반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 커스텀상태
- android
- 알고리즘
- theming
- 책
- Compose
- 회고
- 병렬프로그래밍
- 코틀린
- kotlin강좌
- 병럴프로그래밍
- Rxjava
- k8s
- 글또
- 안드로이드강좌
- 코루틴
- g 단위테스트
- 안드로이드
- 알게되는
- mockito
- 자바
- Gradle
- 테스트
- Kotlin
- 안드로이드스튜디오
- Coroutine
- 스레드
- 디자인패턴
- viewmodel
- ReactiveProgramming
Archives
- Today
- Total
선생님, 개발을 잘하고 싶어요.
[오브젝트] 챕터 11 - 합성과 유연한 설계 본문
상속의 문제점을 지적하며 합성의 장점을 설명하는 챕터입니다.
조합의 폭발적인 증가는 실제로 경험해 본 적이 없지만 부주의하게 상속을 사용하는 경우 당연히 발생할 것 같습니다. (실제로 경험 안해보는 게 정신 건강에 좋을 것 같네요.)
합성을 사용하는 게 컴파일타임 의존성과 런타임 의존성을 다르게 설정할 수 있는 방법이라는 걸 알게되었습니다. 지금까지 저자가 강조했던 것 처럼 유연한 설계를 위해서는 이 둘의 차이가 있어야 한다고 했던 지점과 일치하는 듯 하네요.
하지만 결국 합성만이 만능키라는 게 아니고 상속이 가지고 있는 문제 (컴파일타임에 의존성을 런타임에 못 바꿈)을 해결할 수 있다면 mixin과 같은 방법도 좋아보입니다.
상속, 합성, 믹스인 모두 도구일 뿐이라는 점을 상기시키는 것 같습니다.
- 도입
- 상속
- 부모 자식간 의존성을 컴파일타임에 해결
- is-a 관계
- 부모의 구현에 의존한다.
- 클래스 사이의 정적인 관계
- 합성
- 두 객체 사이의 의존성을 런타임에 해결
- has-a 관계
- 구현에 의존하지 않는다.
- 객체 사이의 동적인 관계
- 상속
- 상속을 합성으로 변경하기
- 상속으로 인한 조합의 폭발적인 증가
- 작은 기능을 조합해서 더 큰 기능을 수행하는 객체를 만들어야 하는 경우
- 기능 추가나 수정을 위해 불필요하게 많은 수의 클래스를 추가, 수정 하게 된다.
- 이러한 기능 들은...
- 선택적으로 적용되는 기능
- 조합 가능한 기능
- 임의의 순서로 적용할 기능
- 추상 메서드: 자식 클래스에서 오버라이딩할 의도로 만든 메서드
- 훅 메서드: 기본 동작을 제공하면서도 오버라이딩할 의도로 만든 메서드
- 클래스 폭발 문제: 상속의 남용으로 하나의 기능을 추가하기 위해 필요 이상으로 많은 수의 클래스를 추가하게 되는 경우
- 작은 기능을 조합해서 더 큰 기능을 수행하는 객체를 만들어야 하는 경우
- 합성 관계로 변경하기
- 상속 → 컴파일타임 의존성과 런타임 의존성을 동일하게 만들거야!
- 합성을 사용하면 런타임에 객체 사이의 의존성 변경이 자유롭다.
- 기능을 조합하기 위해서 컴파일타임 의존성을 변경하는 게 아니라 런타임 의존성을 변경하는 형태로 접근 할 수 있다.
- 오직 하나의 클래스만 추가하고 런타임에 필요한 정책들을 조합해서 원하는 기능을 얻을 수 있다.
- 합성이 상속(구현 상속)보다 좋은 방법이다.
- 믹스인
- 컴파일 시점에 필요한 코드 조각을 조합하는 재사용 방법
- 코드를 다른 코드 안에 유연하게 섞어 넣을 수 있으면 믹스인
- super 참조가 가리키는 대상이 컴파일 시점이 아닌 실행 시점에 결정된다.
- 일반 상속은 super는 선언한 클래스의 부모 클래스를 가리킨다. 즉 컴파일 타임에 결정되는 부분이다.
- super를 동적으로 바인딩
'일상 > 책 리뷰' 카테고리의 다른 글
[오브젝트] 챕터 13 - 서브클래싱과 서브타이핑 (0) | 2022.03.23 |
---|---|
[오브젝트] 챕터 12 - 다형성 (0) | 2022.03.23 |
[오브젝트] 챕터 10 - 상속과 코드 재사용 (0) | 2022.03.19 |
[오브젝트] 챕터 9 - 유연한 설계 (0) | 2022.03.18 |
[오브젝트] 챕터 8 - 의존성 관리하기 (0) | 2022.03.14 |
Comments