일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 믹스인
- dip
- OOP
- 오브젝트
- 행동 호환성
- 서브 타이핑
- 메서드를 통한 해결
- 유여난 설계
- 런타임 의존성
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
- 상속
- 일관성 있는 협력
- 유연한 설계
- 컴파일 타임 의존성
- OCP
- 객체 생성 사용 분리
- iSP
- 다형성
- 추상화
- 책임주도설계
- 객체지향
- 합성
- 알고리즘
- 설계 재사용
- 명령-쿼리 분리
- '기존 설계 재사용
- 상속 조합 폭발적 증가
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
- 의존성
- 하향식 접근
Archives
- Today
- Total
도니의 iOS 프로그래밍 세상
[오브젝트 2회독] 10장 - 상속과 코드 재사용 본문
- 객체 지향 코드 재사용의 관점에서 상속이란 클래스 안에 정의된 인스턴스 변수와 메서드를 새로운 클래스에 추가하는 기법
- 코드 재사용의 동기는 중복 코드 제거
1. 상속과 중복 코드
DRY 원칙
- 중복 코드 제거의 가장 큰 이유는 변경을 방해한다는 것
- 비즈니스 로직의 변화로 코드를 변경할 때, 중복 코드는 수정하는데 많은 노력이 발생
- 중복 코드를 발견하여도, 개별적 테스트 후 동일한 결과를 체크해야 함
- 중복의 기준은 변경,요구 사항 변경시 함께 수정되는 것
상속을 이용한 중복 코드 제거
- 이미 존재하는 클래스와 유사 클래스 필요시 코드를 복사하지 않고 상속을 이용
- 상속을 염두하지 않는 클래스를 상속을 통해 재사용하는 것은 쉽지 않음
- 상속은 부모 클래스와 자식 클래스 사이의 강한 결합을 만들어 코드 수정을 어렵게 만듦
2. 취약한 기반 클래스 문제
- 상속의 첫번째 문제점은 자식 클래스가 부모 클래스의 구현 세부사항에 의존하여 캡슐화를 약화시킴
- 서로간의 강한 결합으로 객체 내부 규칙을 깨트릴 수 있음
- 결국 강한 결합도로 인해 자식 클래스와 서브 클래스는 영원히 변경되지 않거나, 동시에 변경되거나 둘중 하나를 선택해야 함
3. 기존 객체 개선하기
추상화에 의존
- 가장 큰 문제는 자식 클래스가 부모 클래스의 구현에 강하게 의존한다는 사실
- 자식 클래스가 구현이 아닌, 추상화에 의존하도록 수정
코드 중복 제거 방법
- 두 메서드가 유사할 때 차이점을 메서드로 추출하고, 두 메서드를 동일한 형태로 만듦
- 중복 코드를 부모 클래스로 올리고, 부모 클래스를 추상 클래스로 만드는 것
4. 차이에 의한 프로그래밍
중복 코드 제거 및 코드 재사용
- 재사용 가능한 코드는 심각한 버그가 존재하지 않는 코드(단순 타이핑 노력을 감소하기 위함X)
- 가장 유명한 방법은 상속이며, 여러 클래스 사이의 재사용 코드를 하나로 모음
- 코드 재사용 관점에서 상속을 사용할 경우, 오용으로 인해 더욱 이해하기 어려운 코드가 발생
- 코드 재사용의 가장 좋은 방법은 합성
결론
- 중복 코드 제거 방법중 하나는 상속
- 중복의 기준은 변경의 원인이 동일한 경우를 의미
- 상속은 자식이 부모의 내부 구현에 강하게 의존하는 구조를 가져 결합도를 높임
- 따라서, 올바른 상속을 위해선 부모의 내부 구현이 아닌 추상화에 의존
- 코드 중복 제거를 위해 추상화에 의존하며, 중복된 코드를 부모 클래스로 올리고 추상 클래스로 만드는 과정이 필요함
- 하지만 그럼에도 불구하고 코드 재사용 관점에서는 상속보다 합성이 더욱 좋은 방법
- 상속은 오용시 더욱 이해하기 힘든 코드를 만듦
'OOP' 카테고리의 다른 글
[오브젝트 2회독] 12장 - 다형성 (0) | 2024.11.19 |
---|---|
[오브젝트 2회독] 11장 - 합성과 유연한 설계 (0) | 2024.11.19 |
[오브젝트 2회독] 9장 - 유연한 설계 (2) | 2024.11.19 |
[오브젝트 2회독] 8장 - 의존성 관리하기 (0) | 2024.11.19 |
[오브젝트 2회독] 7장 - 객체 분해 (0) | 2024.11.19 |
Comments