재 현
우아한 객체 지향 - 의존성 본문
의존성을 이용해 설계 진화시키기
의존성(Dependency)
설계 - 어디에 어떤 코드를 넣을지
핵심은 '변경'이다. 같이 변경되는 코드를 같은 곳에 넣어야 한다. 그게 의존성
연관관계: 타입을 알고 있음
의존관계: 파라미터 혹은 리턴타입 혹은 메서드 안에서 그 타입을 생성
상속관계: 타입을 상속
아래 5가지를 지켜주자.
- 양방향 의존성을 피하라
- 다중성이 적은 방향을 선택해라
- One-To-Many 보단 Many-To-One
- 의존성이 필요 없다면 제거해라
- 패키지 사이의 의존성 사이클(양방향 의존성)을 제거한다. 설계 원칙은 변경이다.
관계에는 방향성이 필요
관계의 방향 = 협력의 방향 = 의존성의 방향
관계의 종류
연관관계: 협력을 위해 필요한 영구적인 탐색 구조
의존관계: 협력을 위해 일시적으로(파라미터, 리턴타입, 지역변수) 필요한 의존성
연관관계 = 탐색 가능성
A객체를 알면 B객체를 찾아갈 수 있어
보통 객체 참조를 사용
어떤 객체가 어떤 메시지를 받는다는 것은,
그 객체의 퍼블릭 메서드로 구현된다는 걸 의미한다.
메시지를 결정하고 메서드를 만드는 것이 맞다.
설계 개선하기
class를 구현하면 dependency를 그려보자
문제가 있다.
- 객체 참조로 인한 결합도 상승
- 패키지 의존성 사이클
객체 참조는 모든 객체가 연결되었기 때문에 함께 수정 가능하다. 가장 높은 의존성.
1. Repository를 통한 탐색(약한 결합도) - id
2. 인터페이스 - 구현을 통한 의존성 역전
3. 새로운 패키지 생성
간단한 규칙
- 함께 생성되고 함께 삭제되는 객체들을 함께 묶어라
- 도메인 제약사항을 공유하는 객체들을 함께 묶어라
- 가능하면 분리하라
그룹은 트랜잭션/조회/비즈니스 제약의 단위
주문 - 주문아이템 - 옵션 그룹 - 옵션
https://www.youtube.com/watch?v=dJ5C4qRqAgA&list=LL&index=1([우아한테크세미나] 190620 우아한객체지향 by 우아한형제들 개발실장 조영호님)
'Development' 카테고리의 다른 글
파이브 라인스 오브 코드 읽기(1) (0) | 2023.10.30 |
---|---|
주식 자동 매수/매도 프로그램 만들기 후기 (0) | 2023.08.02 |
const의 위력 (0) | 2023.07.31 |
이슈 받았을 때 (0) | 2023.07.27 |
아마존의 글쓰기 (0) | 2023.07.23 |