일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 컴파일 타임 의존성
- 런타임 의존성
- 책임주도설계
- 객체 생성 사용 분리
- 하향식 접근
- 유여난 설계
- 알고리즘
- 상속 조합 폭발적 증가
- 일관성 있는 협력
- 설계 재사용
- 오브젝트
- Swift#flatMap#map#Monad#함수형 프로그래밍#Optional
- OCP
- 합성
- 메서드를 통한 해결
- 유연한 설계
- 추상화
- 다형성
- '기존 설계 재사용
- iSP
- 상속
- Apple # HIG #iOS15 #iOS14 #Human #Interface #Guidelines #Apple developer # Apple human interface guidelines
- 서브 타이핑
- 명령-쿼리 분리
- 의존성
- 행동 호환성
- 객체지향
- OOP
- dip
- 믹스인
Archives
- Today
- Total
도니의 iOS 프로그래밍 세상
[오브젝트 2회독] 12장 - 다형성 본문
- 상속의 타입 계층을 구조화 하기 위해 사용하는 것이지 코드 재사용이 아님
1. 다형성
- 서브타입 다형성은 메세지가 동일하더라도 수신한 객체의 타입에 따라 실제 수행되는 행동이 달라지는 것
- 우리가 부르는 다형성은 일반적으로 서브타입 다형성 의미
- 상속은 다형성을 위한 서브타입 계층을 구축하여, 런타임에 상속 계층 안에서 적절한 메서드 선택을 가능하게 함
2. 상속의 양면성
객체 지향 패러다임의 아이디어는 객체라고 불리우는 실행 단위 안으로 데이터와 행동을 통합하는 것
- 데이터와 행동 관점에서만 바라본다면, 상속이란 부모 클래스의 데이터와 행동을 자식 클래스와 자동적으로 공유할 수 있는 메카니즘
- 진정한 목적은 타입 계층을 구조화 하는 것
3. 업캐스팅과 동적 바인딩
같은 메시지, 다른 결과
- 업캐스팅이란 부모 클래스 타입으로 선언된 변수에 자식 클래스 인스턴스를 할당하는 것
- 동적 바인딩이란 선언된 변수 타입이 아닌 메시지 수신 객체 타입에 따라 실행 메서드가 결정되는 것
- OCP의 의도는 코드 변경 없이 기능 추가가 가능한 것이며, 업캐스팅과 동적 메서드 탐색을 통해 이루어질 수 있다.
- 결국 OCP가 목적이고, 업캐스팅과 동적 바인딩이 방법
업캐스팅
- 컴파일러는 명시적 타입 변환 없이도 자식 클래스가 부모 클래스 대체 가능
- 이런 특성을 이용하여 부모 타입으로 선언된 파라미터에 자식 클래스 인스턴스를 전달하는게 가능
- 다운 캐스팅이란 부모를 자식으로 변환하기 위해선 명시적인 타입 캐스을 하는 것
- 컴파일러 관점에서 자식 클래스는 부모 클래스를 대체할 수 있어, 부모 클래스와 협력하는 클라이언트의 경우 다양한 자식 클래스 인스턴스와 협력 가능
- 결국 어떠한 자식 클래스와도 협력할 수 있는 무한한 확장 가능성을 가짐
결론
- 상속의 진정한 목적은 코드 재사용이 아닌, 타입 계층을 구조화
- 다형성은 타입 계층을 구조화 하여 런타임때 수신 객체에 따라 결과가 달라짐
- 다형성을 상속을 통해 구현할 수 있는 까닭은 컴파일러가 업캐스팅 및 동적 바인딩을 지원하기 때문
- 업캐스팅을 통해 부모 클래스와 협력하는 객체는 무한한 자식 클래스와 제약없는 협력이 가능하며, 동적 바인딩을 통해 부모가 아닌 자식 인스턴스가 메시지를 수신하여 실행함
- 결과적으로 타입 계층의 자식 클래스들이 한가지 기능을 다양한 방식으로 실행함으로써, 공통된 다양한 기능에 대응할 수 있는 구조를 설계할 수 있음
'OOP' 카테고리의 다른 글
[오브젝트 2회독] 14장 - 일관성 있는 협력 (0) | 2024.11.19 |
---|---|
[오브젝트 2회독] 13장 - 서브 클래싱과 서브 타이핑 (0) | 2024.11.19 |
[오브젝트 2회독] 11장 - 합성과 유연한 설계 (0) | 2024.11.19 |
[오브젝트 2회독] 10장 - 상속과 코드 재사용 (0) | 2024.11.19 |
[오브젝트 2회독] 9장 - 유연한 설계 (2) | 2024.11.19 |
Comments