일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 일관성 있는 협력
- 상속 조합 폭발적 증가
- 상속
- OCP
- 하향식 접근
- 알고리즘
- 오브젝트
- OOP
- 런타임 의존성
- 유여난 설계
- 메서드를 통한 해결
- '기존 설계 재사용
- 컴파일 타임 의존성
- 설계 재사용
- 명령-쿼리 분리
- 추상화
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
- 합성
- 객체지향
- 믹스인
- iSP
- 서브 타이핑
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
Archives
- Today
- Total
도니의 iOS 프로그래밍 세상
[오브젝트] 12장 - 다형성 본문
- 상속의 목적은 타입 계층을 구조화(not 코드 재사용!)
- 타입 계층은 다형성의 기반을 제공함
Chap01. 다형성
- 오버로딩 다형성
- 함수의 이름은 동일하나, 서로 다른 파라미터
class Bank {
func withdraw(won: WON)
func withdraw(dollar: Dollar)
}
2. 강제 다형성
- 언어가 지원하는 자동 타입 변환 및 사용자 직접 타입변환을 통해 사용하는 방식
- ex. + 정수일떈 값을 더함, 문자열은 append 시킴
3. 포함 다형성
- 메시지는 동일하고, 수신 객체 타입에 따라 실제 수행되는 행동이 달라지는 것
- subtype 다형성
Chap02. 상속의 양면성
- 객체지향 아이디어의 근거는 데이터와 행동을 객체라는 하나의 실행 단위로 통합하는 것
- 상속은 결국 부모의 데이터와 행동이 자식에 포함되는 것
→ 이로인해 자식 클래스에서 재사용할 수 있는 메커니즘으로 잘못 생각(자식이 부모를 사용할 수 있다고 해서, 그것이 목적이 아님)
- but, 상속의 목적은 다형성을 가능하게 하는 타입 계층을 구축하기 위함
Chap03. 업캐스팅과 동적 바인딩
같은 메세지, 다른 메서드
- 부모 타입으로 선언된 변수에 자식 인스턴스 할당이 가능함(업캐스팅)
- 선언된 변수 타입이 아닌, 수신 객체 타입에 따라 메서드가 결정됨
- 컴파일 시점이 아닌, 실행 시점에 결정하는 것을 동적 바인딩라고 함
OCP
- 업캐스팅, 동적바인딩은 결국 새로운 기능을 기존 코드 수정없이 가능하도록 함
- 이는 OCP의 원칙의 의도와 일치
- OCP 원칙을 지키기 위해 업캐스팅 및 동적 메서드 탐색이 방법
결론
- 상속의 목적은 코드 재사용이 아닌, 타입 계층 구조화
- 상속을 통해서 부모 클래스의 데이터와 행동을 사용할 수 있다고 해서 그게 목적이 아님
- 동적 바인딩을 통해서 OCP의 원칙의 의도를 수행할 수 있음
'OOP' 카테고리의 다른 글
[오브젝트 2회독] 5장 - 책임 할당하기 (0) | 2024.11.19 |
---|---|
[오브젝트 2회독] 4장 - 설계 품질과 트레이드 오프 (0) | 2024.11.19 |
[오브젝트] 11장 - 합성과 유연한 설계 (0) | 2024.10.09 |
[오브젝트] 10장 - 상속과 코드 재사용 (0) | 2024.10.01 |
[오브젝트] 9장 - 유연한 설계 (1) | 2024.09.28 |
Comments