도니의 iOS 프로그래밍 세상

[오브젝트] 12장 - 다형성 본문

OOP

[오브젝트] 12장 - 다형성

Donee 2024. 10. 9. 22:38
  • 상속의 목적은 타입 계층을 구조화(not 코드 재사용!)
  • 타입 계층은 다형성의 기반을 제공함

Chap01. 다형성

  1. 오버로딩 다형성
  • 함수의 이름은 동일하나, 서로 다른 파라미터
class Bank { 
	func withdraw(won: WON) 
	func withdraw(dollar: Dollar) 
}

 

2. 강제 다형성

  • 언어가 지원하는 자동 타입 변환 및 사용자 직접 타입변환을 통해 사용하는 방식
  • ex. + 정수일떈 값을 더함, 문자열은 append 시킴

3. 포함 다형성

  • 메시지는 동일하고, 수신 객체 타입에 따라 실제 수행되는 행동이 달라지는 것
  • subtype 다형성

Chap02. 상속의 양면성

  • 객체지향 아이디어의 근거는 데이터와 행동을 객체라는 하나의 실행 단위로 통합하는 것
  • 상속은 결국 부모의 데이터와 행동이 자식에 포함되는 것

→ 이로인해 자식 클래스에서 재사용할 수 있는 메커니즘으로 잘못 생각(자식이 부모를 사용할 수 있다고 해서, 그것이 목적이 아님)

  • but, 상속의 목적은 다형성을 가능하게 하는 타입 계층을 구축하기 위함

Chap03. 업캐스팅과 동적 바인딩

같은 메세지, 다른 메서드

  • 부모 타입으로 선언된 변수에 자식 인스턴스 할당이 가능함(업캐스팅)
  • 선언된 변수 타입이 아닌, 수신 객체 타입에 따라 메서드가 결정됨
  • 컴파일 시점이 아닌, 실행 시점에 결정하는 것을 동적 바인딩라고 함

OCP

  • 업캐스팅, 동적바인딩은 결국 새로운 기능을 기존 코드 수정없이 가능하도록 함
  • 이는 OCP의 원칙의 의도와 일치
  • OCP 원칙을 지키기 위해 업캐스팅 및 동적 메서드 탐색이 방법

결론

  • 상속의 목적은 코드 재사용이 아닌, 타입 계층 구조화
  • 상속을 통해서 부모 클래스의 데이터와 행동을 사용할 수 있다고 해서 그게 목적이 아님
  • 동적 바인딩을 통해서 OCP의 원칙의 의도를 수행할 수 있음
Comments