일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- 명령-쿼리 분리
- 의존성
- 합성
- 하향식 접근
- 객체지향
- 행동 호환성
- 믹스인
- '기존 설계 재사용
- OOP
- 알고리즘
- 유여난 설계
- 서브 타이핑
- 설계 재사용
- OCP
- 추상화
- 일관성 있는 협력
- 상속
- 컴파일 타임 의존성
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
- 유연한 설계
- 오브젝트
- 런타임 의존성
- 책임주도설계
- 메서드를 통한 해결
- 다형성
- dip
- 상속 조합 폭발적 증가
- iSP
- 객체 생성 사용 분리
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
Archives
- Today
- Total
도니의 iOS 프로그래밍 세상
[오브젝트] 10장 - 상속과 코드 재사용 본문
- 객체 지향의 장점중 하나인 상속을 통한 코드 재사용
- 합성을 통해서도 코드 재사용 가능
Chap01. 상속과 중복 코드
- 중복 코드란 스펙이 변경될 때 함께 수정되어야 하는 코드
- 중복을 제거해야 하는 이유는, 추후 코드 수정시에 몇배의 노력이 발생 하기 때문(계속된 중복 코드는 제곱배로 커져, 버그 발생 가능성이 높아짐)
- 따라서, 신뢰할 수 있는 소프트웨어를 위해선 DRY 원칙(Don’t Repeat Yourself를 지켜야 함
중복 제거 방법
- 타입코드
- 중복 코드를 제거를 위해, 클래스로 만들어 중복 코드를 이관시킴
- 타입코드는 낮은 응집도와 높은 결합도 문제 발생(특정 타입에 종속되어 있기 때문)
- 상속
- 상속을 통해 기반 클래스의 로직을 재활용
- 상속을 염두하지 않는 클래스를 상속하는 것은 코드 수정 및 이해를 어렵게 함
- 상속은 부모 ↔ 자식간 강한 결합도를 가지기 때문
- 따라서, super 호출하는 부분또한 결합도를 위해서 제거되어야 함(만약 계층 구조가 상속을 염두하였고 반드시 필요한 공통 로직이라, super를 사용하거나 별도 함수를 사용하는 게 더 나을듯)
Chap02. 취약한 기반 클래스 문제
- 부모 클래스의 변경이 자식 클래스에 영향을 주는 현상
- 불필요한 인터페이스 상속 문제
- 메서드 오버라이딩 오남용 문제
- 부모 클랫, 자식 클래스 동시 수정 문제
→ 핵심은 결국 부모 ↔ 자식간 강력한 커플링으로 인해, 서로에 영향을 주어 버그 발생 위험이 높아 진다는 점이다. 자식은 부모의 추상화가 아닌, 구현에 의존하기 때문에 부모의 변경으로 인해 자식은 변경될 수 밖에 없다.
Chap03. 기존 클래스 수정
- 차이를 메서드로 분리
- 공통 코드를 부모 클래스로 이동
- 핵심은 추상화
Chap04. 차이에 의한 프로그래밍
- 기존 코드와 다른 부분을 추가하여 애플리케이션 기능을 확장하는 방법
- 목표는 중복 코드 제거 및 코드 재사용
- 코드 재사용을 통해 코드 품질 유지 및 코드 작성 노력 과 테스트를 줄일 수 있음(but, 재사용 가능 단위로 코드를 분리하고 재구성 해야함)
상속
- 코드 재사용의 가장 유명한 방법
- 기능 추가에 대한 코드 양을 줄일 수 있음
- 하지만 대부분의 케이스에서 코드 재사용을 위한 경우 상속은 좋은 방법이 아닐 수 있다.
결론
- 중복 코드를 제거하는 목적은 관리 비용을 줄이기 위함
- 상속을 통해 해결할 경우, 부모 ↔ 자식간 커플링으로 많은 문제가 발생할 수 있음
- 중복 코드 제거를 위한 클래스 수정 방안(메서드, 공통로직 부모클래스 이동등)
→ 하지만 구조 설계를 하지 않은 채 무작정 상속을 사용할 경우 더 많은 문제가 발생할 수 있음.
'OOP' 카테고리의 다른 글
[오브젝트] 12장 - 다형성 (1) | 2024.10.09 |
---|---|
[오브젝트] 11장 - 합성과 유연한 설계 (0) | 2024.10.09 |
[오브젝트] 9장 - 유연한 설계 (1) | 2024.09.28 |
[오브젝트 2회독] 3장 - 역할, 책임, 협력 (1) | 2024.09.15 |
[오브젝트 2회독] 2장 - 객체지향 프로그래밍 (3) | 2024.09.08 |
Comments