티스토리 뷰

728x90
반응형

1. 객체 지향

 1) 객체지향의 4가지 특징

  • 추상화: 불필요한 부분을 제거하고 필요한 핵심만 남기는 것. (일반화, 단순화)
  • 다형성: 다양한 형태를 갖는 것. 한 개의 타입으로 여러 종류의 객체를 참조하는 것.
  • 캡슐화: 객체의 세부사항을 외부로부터 감추는 것.
  • 상속: 부모로부터 물려받는 것.

 

2) 객체지향의 5가지 설계 원칙 (SOLID)

좋은 객체지향 코드를 작성할 수 있는 원칙

  1. SRP : Single Responsibility Principle (단일 책임의 원칙)
    • 하나의 책임을 갖게 하는 것.
  2. OCP : Open/Closed Principle (개방 폐쇄의 원칙)
    • 기존 코드를 변경하지 않고 기능을 추가하는 것.
  3. LSP : Liskov’s Substitution Principle (리스코프 치환의 원칙)
    • 상위 타입을 하위 타입으로 치환해도 문제가 없어야하는 것.
  4. ISP : Interface Segregation Principle (인터페이스 분리의 원칙)
    • 인터페이스를 작은 단위로 분할하는 것. 클라이언트가 사용하지 않는 기능에 의존하지 않음.
  5. DIP : Dependency Inversion Principle (의존성 역전의 원칙)
    • 변경이 거의 일어나지 않는 것에 의존하는 것. 변화의 영향을 최소화하기 위한 원칙.

 

3) 객체지향 패러다임

  • 객체지향 패러다임은 SW의 복잡도를 낮추기 위해 등장했으며,
  • 적절한 객체에게 알맞은 책임을 할당하여 서로 메시지를 주고 받으며 협력하게 하는 것을 말한다.
    • 클래스가 아닌 객체에 초점을 맞추고,
    • 적절한 역할과 책임을 할당하는 것이 중요하다.
  • 절차지향과 객체지향은 책임이 한곳에 집중되어 있는지 (절차지향) 분산되어 있는지 (객체지향) 에 따라 차이가 나타난다.

 

4) 높은 응집도(cohesion) 낮은 결합도(coupling)

  • 비슷한 것 끼리는 응집도를 높이고, 다른 성격을 갖는 것끼리는 분리를 시키는 것이다.
  • 영향 범위가 어디까지인지 쉽게 파악 가능하다.
  • 한 곳만 수정해도 되는 것이 응집도가 높은 것이다.
  • 변경이 발생했을 때, 다른 곳에 영향을 미치지 않는다면 결합도가 낮은 것이다.

 

5) 객체지향 설계

  1. 도메인을 구성하는 객체에는 어떤 것들이 있는지 고민
  2. 객체들 간의 관계를 고민
  3. 동적인 객체를 정적인 타입으로 추상화해서 도메인 모델링 하기
  4. 협력을 설계
  5. 객체들을 포괄하는 타입에 적절한 책임을 할당
  6. 구현하기

 

2. 사칙연산 계산기

1) 요구사항

  • 간단한 사칙연산을 할 수 있다.
  • 양수로만 계산할 수 있다.
  • 나눗셈에서 0을 나누는 경우 IllegalArgument 예외를 발생시킨다.
  • MVC패턴(Model-View-Controller) 기반으로 구현한다.

 

2) 구현

(1) 덧셈 (뺄셈, 곱셈, 나눗셈도 유사)

  • 덧셈을 구현하기 위해서는 피연산자와 연산자, 피연산자(1, '+', 2)를 calculator에게 전달하여 작업을 위임하고 결과값을 return 받는다.
  • 테스트 코드를 돌렸을 때 통과하는 코드를 작성하면 심리적 안정감을 얻고, 코드를 리팩토링할 수 있다. 리팩토링한 코드 또한 통과를 한다면 잘 수정된 코드임을 보장할 수 있기 때문이다.

(2) 사칙연산 테스트 코드를 분리하여 작성할 수도 있지만, 한번에 작성할 수도 있다.

  • @Test 어노테이션을 @ParameterizedTest 로 변경해주고, @MethodSource를 추가해준다.
  • Stream<Arguments>의 메소드를 통해 피연산자1, 연산자, 피연산자2, 결과값을 arguments로 MethodSource에 주고 calulateTest(피연산자1, 연산자, 피연산자2, 결과값)를 진행할 수 있다.

(3) 산술 연산자(ArithmeticOperator) enum으로 구현하기

  • enum을 활용하여 사칙연산 기호에 따라 피연산자들을 계산하도록 구현할 수 있다.

  • enum에게 작업을 위임하여 최종적으로 ArithmeticOperator가 작업을 하도록 할 수 있다.

(4) 요구사항 3번 나눗셈의 제한사항

  • 0으로 나눌 수 없다는 제한 사항은 나눗셈을 진행하는 파트에 가서 if문을 추가하면 된다.

(5) 요구사항 2번 양수만 계산

  • 양수에 대한 객체 클래스를 생성하여 음수라면 예외처리를 하도록 구현한다.
  • 이를 통해 PositiveNumber 라는 객체가 생성된다면 음수가 아닌 양수라는 것을 보장할 수 있다.
  • 이후 int operand 대신 PositiveNumber operand로 수정해주면 된다.
  • 이때 양수라는 점에서 이미 0이 제외되기 때문에 4번 사항을 지워줄 수도 있다.

 


본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/43z0P6S

 

 

#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완

728x90
반응형
댓글