
[프로그래머스스쿨 / API 서버 개발 미션으로 배우는 자바 웹 백엔드 개발] 에서 수강하며 정리한 글 입니다. 문제가 있을 시, 삭제 하겠습니다.
객체지향의 핵심
IoC(Inversion of Control)를 통해 상위레벨의 모듈을 하위레벨의 모듈로부터 보호하는 것
소스코드의 컴파일 타임 의존성 방향과 런타임 의존성 방향이 다르다.
객체지향
- 객체지향 프로그래밍은 클래스, 객체, 상속, 다형성, 추상화, 캡슐화 등을 사용하여 프로그램을 설계하는 방법론
- 그래서 클래스 이름에서 역햘이 보여야하고 역할은 관련된 책임
- 그러나 상속, 다형성, 추상화, 캡슐화 등이 핵심은 아니다.
- 객체지향의 핵심은! IoC(Inversion of Control)를 통해 상위레벨의 모듈을 하위레벨의 모듈로부터 보호하는 것
- 곧, 객체지향설계는 의존성 관리!
객체지향에서 말하는 재사용은 코드를 재사용하는 것이 아니라,
인터페이스르 통해서 사용할 수 있는 것을 재사용이라고 한다.(구현체를 갈아 끼울 수 있는 것)
이유는? 보호하기 위해서.
SOLID.
인터페이스를 항상 생각해서 코드를 작성하는 연습을 하자.
객체지향 모델링 어떻게 할까
-
문서적듯이 간단하게 정리
- 상품 - product - 판매되는 상품
- 노출된상품 - displayed product - 노출된 상품
- 숨겨진 리뷰 - hidden review
-
타입의 행동과 속성들을 정리
- product - 상품
: 이름, 가격, 상품등록일자, 상품수정일자, 리뷰들을 가져야한다.
- product 추가 add
: 가격은 0원 이상이어야 등록 가능
: 생성일 자동으로 추가
user -> Controller -> application/Service -> Domain
: user와 Controller는 유저가 요청한 것에 따라 값을 돌려주는 역할 정도라고 생각.
실제 application과 service에서 어떤 행위와 메세지를 주고 받으면서 기능을 도메인과 협업하여 서비스 제공이 가능하다고 생각한다.
(개인적 견해)
user <-> api <- Domain[application -> domain(entity, repository)] <- memoryRepository(mysql, mongodb)
추상클래스는 동일한 행동을 추상화시키고 공유함에 있어서 쓰이는데
직접 인스턴스 생성은 불가능하다.(객체 생성 불가)
코드의 공유화가 필요하지 않다고 하면, 추상클래스 사용은 비추천
테스트코드
- 단위 테스트
작은 범위, 단일 동작 단위 검증, 흔히 겪는 것은 클래스단위의 테스트
- 기능 추가나 수정하는 동안 테스트를 통해 보호 받을 수 있음, 리팩터링 수월
- 통합 테스트
UI를 제외한 여러 계층을 함께 테스트(DB등의 외부 시스템 연동 포함)
- 전 구간 테스트
UI를 통해 모든 기능 테스트
Test Double
- xUnit Test Patterns의 저자가 만든 용어로 '테스트를 진행하기 어려운 경우 이를 대신해 테스트를 진행할 수 있도록 만들어준 객체'를 말한다.
- 테스트하려는 객체와 연관된 객체를 사용하기가 어렵고 모호할 때 대신해 줄 수 있는 객체를 테스트 더블이라고 한다.
- mock 으로 더 많이 알려져 있다.
테스트코드 작성시 도움될 만한 것
Given-When-Then / Araange-Act-Assert 패턴으로 연습하자.
객체지향 생활체조
지키며 코딩해보자!
- 한 메서드에 오직 한 단계의 들여쓰기만 한다.
- else 예약어(keyword)는 쓰지 않는다.
- 모든 원시값과 문자열을 포장한다.
- 일급(first-class) 콜렉션을 쓴다.
- 한 줄에 점을 하나만 찍는다.
- 줄여쓰지 않는다(축약 금지).
- 모든 엔티티(entity)를 작게 유지한다.
8. 2개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- 게터(getter)/세터(setter)/프로퍼티(property)를 쓰지 않는다.
왕,,