반응형
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
- Kotlin
- 알고리즘
- Rxjava
- 스레드
- theming
- viewmodel
- 테스트
- g 단위테스트
- 자바
- 책
- 병렬프로그래밍
- 안드로이드스튜디오
- Coroutine
- 커스텀상태
- kotlin강좌
- 알게되는
- 코틀린
- 코루틴
- mockito
- 디자인패턴
- 안드로이드
- Gradle
- Compose
- 회고
- 글또
- 안드로이드강좌
- 병럴프로그래밍
- android
- ReactiveProgramming
- k8s
Archives
- Today
- Total
선생님, 개발을 잘하고 싶어요.
[오브젝트] 챕터 10 - 상속과 코드 재사용 본문
DRY 원칙과 이를 달성하기 위한 방법으로 자주 사용되는 상속에 대해서 다룬 챕터였습니다.
우선 DRY를 판단하는 기준에 대해서 설명하는데 중복 코드의 기준은 코드의 모양이 아니라 변경시 함께 수정되어야 하는가 여부라는 내용이 좋았습니다.
기존 클래스와 유사한 동작을 하는 새로운 클래스를 만들기 위해서 Copy & Paste하는 것의 문제점을 살피고 상속을 활용해서 기존 코드를 재활용하는 방법을 보입니다.
하지만 부주의한 상속의 과정에서 따라오는 문제를 조명합니다.
부모 클래스를 잘못 설계하면 자식 클래스가 부모 클래스의 구현에 강하게 결합되며 부모 클래스를 점진적 개선 시키는 게 어렵다는 내용이였습니다.
- 상속과 중복 코드
- DRY 원칙
- 중복 코드는 변경 방해
- 중복 여부 판단하는 기준은 변경이다. (not 코드 모양)
- DRY 원칙
- 취약한 기반 클래스 문제
- 부모의 변경이 자식에게 영향을 미치는 현상
- 기반 변경할 때, 자식 까지 다 살피게 된다.
- 상속의 양면
- 자식 클래스를 점진적으로 추가해서 기능 확장은 용이
- 높은 결합도로 인해 부모 클래스의 점진적 개선은 힘듬
- 불필요한 인터페이스 상속 문제
- 자식 클래스에게 부적합한 부모 클래스 오퍼레이션이 상속되어서 자식 클래스의 상태가 불안정해지는 문제
- 메서드 오버라이딩의 오작용 문제
- 오버라이딩 할 때, 자식이 부모 메서드 호출 방법에 영향을 받는 문제
- 부모와 자식 동시 수정 문제
- 부모와 자식의 개념적 결합으로 인해 부모 변경시 자식도 함께 변경하게 되는 문제
- 상속은 코드 재사용을 위해 캡슐화를 희생한다.
- 결합도는 다른 대상에 대해 알고 있는 지식의 양
- Phone 다시 살펴보기
- 추상화에 의존하자
- 자식이 부모의 구현이 아닌 추상화에 의존하도록
- 부모가 제공하는 추상 함수를 override하는 방식?
- 코드 중복을 제거하기 위해 상속을 도입하는 방법
- 차이점을 메서드로 추출
- 자식 클래스의 코드를 상위로 올려라 (not 부모 클래스 코드 하위로)
- 자식이 부모의 구현이 아닌 추상화에 의존하도록
- 차이를 메서드로 추출
- 중복 코드를 부모 클래스로 올려라
- 설계는 추상화에 의존하게 된다.
- 자식 마다 다른 동작을 먼저 보게되고, 그 차이를 메서드로 추출하게 된다. 차이를 추상화된 메서드로 만들고 부모에 올리면 된다.
- 추상화가 핵심이다
- OCP 준수, 의존성 역전 준수 등등... → 클래스가 추상화에 의존하기 때문
- 의도를 드러내는 이름 선택하기
- 추상화에 의존하자
- 차이에 의한 프로그래밍
- 기존 코드와 다른 부분만 추가하여 기능 확장하는 방법
- 코드 재사용을 위해 맹목적으로 사용하면 안되, 상속의 오용과 남용은 앱을 이해하기도 어렵고 확장도 어렵게 만든다.
- 상속을 위한 경고
- super를 사용해 메서드를 직접 호출할 경우 부모 자식은 강하게 결합된다. (super를 제거할 수 있는 방법을 찾아보자.)
- 부모 클래스의 메서드가 자식 클래스 내부 구조의 규칙을 깰 수 있다. (Vector → Stack 문제)
- 메서드 오버라이딩 시, 부모가 메서드를 사용하는 방법에 자식이 강하게 결합될 수 있다.
- 클래스 상속하면 자식과 부모를 동시에 변경할 수 밖에 없다...?
'일상 > 책 리뷰' 카테고리의 다른 글
[오브젝트] 챕터 12 - 다형성 (0) | 2022.03.23 |
---|---|
[오브젝트] 챕터 11 - 합성과 유연한 설계 (0) | 2022.03.20 |
[오브젝트] 챕터 9 - 유연한 설계 (0) | 2022.03.18 |
[오브젝트] 챕터 8 - 의존성 관리하기 (0) | 2022.03.14 |
[오브젝트] 챕터 7 - 객체 분해 (0) | 2022.03.05 |
Comments