티스토리 뷰
728x90
반응형
1. 객체 지향
1) 객체지향의 4가지 특징
- 추상화: 불필요한 부분을 제거하고 필요한 핵심만 남기는 것. (일반화, 단순화)
- 다형성: 다양한 형태를 갖는 것. 한 개의 타입으로 여러 종류의 객체를 참조하는 것.
- 캡슐화: 객체의 세부사항을 외부로부터 감추는 것.
- 상속: 부모로부터 물려받는 것.
2) 객체지향의 5가지 설계 원칙 (SOLID)
좋은 객체지향 코드를 작성할 수 있는 원칙
- SRP : Single Responsibility Principle (단일 책임의 원칙)
- 하나의 책임을 갖게 하는 것.
- OCP : Open/Closed Principle (개방 폐쇄의 원칙)
- 기존 코드를 변경하지 않고 기능을 추가하는 것.
- LSP : Liskov’s Substitution Principle (리스코프 치환의 원칙)
- 상위 타입을 하위 타입으로 치환해도 문제가 없어야하는 것.
- ISP : Interface Segregation Principle (인터페이스 분리의 원칙)
- 인터페이스를 작은 단위로 분할하는 것. 클라이언트가 사용하지 않는 기능에 의존하지 않음.
- DIP : Dependency Inversion Principle (의존성 역전의 원칙)
- 변경이 거의 일어나지 않는 것에 의존하는 것. 변화의 영향을 최소화하기 위한 원칙.
3) 객체지향 패러다임
- 객체지향 패러다임은 SW의 복잡도를 낮추기 위해 등장했으며,
- 적절한 객체에게 알맞은 책임을 할당하여 서로 메시지를 주고 받으며 협력하게 하는 것을 말한다.
- 클래스가 아닌 객체에 초점을 맞추고,
- 적절한 역할과 책임을 할당하는 것이 중요하다.
- 절차지향과 객체지향은 책임이 한곳에 집중되어 있는지 (절차지향) 분산되어 있는지 (객체지향) 에 따라 차이가 나타난다.
4) 높은 응집도(cohesion) 낮은 결합도(coupling)
- 비슷한 것 끼리는 응집도를 높이고, 다른 성격을 갖는 것끼리는 분리를 시키는 것이다.
- 영향 범위가 어디까지인지 쉽게 파악 가능하다.
- 한 곳만 수정해도 되는 것이 응집도가 높은 것이다.
- 변경이 발생했을 때, 다른 곳에 영향을 미치지 않는다면 결합도가 낮은 것이다.
5) 객체지향 설계
- 도메인을 구성하는 객체에는 어떤 것들이 있는지 고민
- 객체들 간의 관계를 고민
- 동적인 객체를 정적인 타입으로 추상화해서 도메인 모델링 하기
- 협력을 설계
- 객체들을 포괄하는 타입에 적절한 책임을 할당
- 구현하기
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번 사항을 지워줄 수도 있다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완
728x90
반응형
'Study > FastCampus' 카테고리의 다른 글
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 웹 애플리케이션 (0) | 2023.08.13 |
---|---|
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 학점계산기, 음식주문 (0) | 2023.08.12 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 테스트코드 (0) | 2023.08.10 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 환경설정3 Docker Desktop (0) | 2023.08.10 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 환경설정2 IntelliJ webapp (0) | 2023.08.09 |
댓글