본문 바로가기

프로그래밍/디자인패턴

[ST교육] Upcasting & Binding (Composite Patten)


Upcasting & Binding



a), b)는 각각 Animal Cry, Dog Cry가 호출된다.


func함수는 Animail의 객체로 Cry를 호출하는 함수이다.

c)와 d)는 무엇이 출력될까?


둘 다 Animal Cry가 출력된다. 

부모 포인터에 자식 객체의 주소를 담을 수 있기 때문에 Animal Cry가 출력된다.

이는 public 상속일 때만 가능하다. private 상속이면 Dog로 생성한 객체로 Cry를 부를 수 없다.


e)는 pAnimal에 Dog를 담은 후 Cry를 호출했다. d)와 별 다를 것이 없다.

역시 Animal Cry가 호출된다. 


Composite Patten

A와 B를 묶고싶다면 "공통의 부모 클래스"를 만들어야 한다.


f)를 보자.

n은 컴파일 시간이 아닌 실행시간중에 결정된 변수이다. 이때 출력되는 것은 무엇일까?


결론부터 말하자면, 0, 1, 2 어느 것을 하던 Animal Cry가 출력된다.

컴파일 시간에 pAnimal가 어느 객체를 가르키는지 알 수는 없고, 무슨 타입인지만 알 수 있다. 


pAnimal->Cry()를 어떤 함수에 연결할 것인가? 함수 바인딩 문제


- static binding : 컴파일러가 컴파일 시간에 결정

원리는 포인터의 타입만 가지고 결정, Animal Cry 호출

early biding, 속도가 빠르다. (C++, C#)

- dynamic biding : 컴파일러가 컴파일 시간에 pAnimal의 메모리를 조사하는 기계어 코드 생성

실행 시간에 메모리 조사 후 호출, Dog Cry 호출

late binding, 실행할 때 조사해봐야해서 성능 저하가 있다.




'프로그래밍 > 디자인패턴' 카테고리의 다른 글

[ST교육] 접근변경자 (드디어 첫번째 패턴 : Adapter)  (0) 2014.09.06
[ST교육] 생성자소멸자  (0) 2014.09.06
[ST교육] thiscall 4  (0) 2014.08.31
[ST교육] thiscall 3  (0) 2014.08.31
[ST교육] thiscall 2  (0) 2014.08.31