OOP
[오브젝트] 12장 - 다형성
Donee
2024. 10. 9. 22:38
- 상속의 목적은 타입 계층을 구조화(not 코드 재사용!)
- 타입 계층은 다형성의 기반을 제공함
Chap01. 다형성
- 오버로딩 다형성
- 함수의 이름은 동일하나, 서로 다른 파라미터
class Bank {
func withdraw(won: WON)
func withdraw(dollar: Dollar)
}
2. 강제 다형성
- 언어가 지원하는 자동 타입 변환 및 사용자 직접 타입변환을 통해 사용하는 방식
- ex. + 정수일떈 값을 더함, 문자열은 append 시킴
3. 포함 다형성
- 메시지는 동일하고, 수신 객체 타입에 따라 실제 수행되는 행동이 달라지는 것
- subtype 다형성
Chap02. 상속의 양면성
- 객체지향 아이디어의 근거는 데이터와 행동을 객체라는 하나의 실행 단위로 통합하는 것
- 상속은 결국 부모의 데이터와 행동이 자식에 포함되는 것
→ 이로인해 자식 클래스에서 재사용할 수 있는 메커니즘으로 잘못 생각(자식이 부모를 사용할 수 있다고 해서, 그것이 목적이 아님)
- but, 상속의 목적은 다형성을 가능하게 하는 타입 계층을 구축하기 위함
Chap03. 업캐스팅과 동적 바인딩
같은 메세지, 다른 메서드
- 부모 타입으로 선언된 변수에 자식 인스턴스 할당이 가능함(업캐스팅)
- 선언된 변수 타입이 아닌, 수신 객체 타입에 따라 메서드가 결정됨
- 컴파일 시점이 아닌, 실행 시점에 결정하는 것을 동적 바인딩라고 함
OCP
- 업캐스팅, 동적바인딩은 결국 새로운 기능을 기존 코드 수정없이 가능하도록 함
- 이는 OCP의 원칙의 의도와 일치
- OCP 원칙을 지키기 위해 업캐스팅 및 동적 메서드 탐색이 방법
결론
- 상속의 목적은 코드 재사용이 아닌, 타입 계층 구조화
- 상속을 통해서 부모 클래스의 데이터와 행동을 사용할 수 있다고 해서 그게 목적이 아님
- 동적 바인딩을 통해서 OCP의 원칙의 의도를 수행할 수 있음