CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): vicman (김대영)
날 짜 (Date): 1994년02월21일(월) 17시39분20초 KST
제 목(Title): [Re]Polymorphism ..삐거덕 (virtual)



아, 나와 같이 퇴근할 후배가 실장님께 붙잡혔다..
최소 20분 정도 걸린다나...
후배가 빈대족이니 어쩔수 없이 기다려야 겠네 잉...

그래서, ZEO님께서 쓰신 virtual function에 대해서 잠시 이야기를 해야 겠네요

virtual function은 후진 사이드 이펙트도 아니고, 보기좋아라고 쓰는 것도 아닙니다
virtual function은 polymorphism을 지원하는 훌륭한 도구 입니다. 

함수앞에다 virtual 을 붙이는 이유는 함수의 특성을 결정지우는 binding을 프로그램
수행중에 한다는 것입니다. 그래서 A class로 선언된 b의 b->vf()도 프로그램 수행
중 A *b = new B에 의해 B Class 종류라는 것을 알게되고, 그래서 클래스 B의
vf를 수행하게 되는 것입니다. 만약 클래스 A의 vf가 virtual이 아닌 경우에는
static binding(binding을 컴파일 시 수행)인 경우 컴파일 하다보니 A *b로 선언
되었기 때문에 이놈은 A 타입으로 결정하고 b->vf()를 클래스 A의 vf()로 링크
시키게 됩니다. 그래서 A의 vf()가 수행되게 되죠!
 
a->nvf()와 b->nvf()가 둘다 A::nvf를 출력하게 되는게 당연하죠. 컴파일시
a, b는 둘다 클래스 A로 선언되기 때문이죠!

위와 같은 virtual function은 아주 유용하게 사용됩니다.

그런데, C++의 virtual function은 사실 엄밀히 말하면 사이비 입니다.
일반적인 객체지향 언어에서는 Dynamic binding(프로그램 수행시 바인딩)이
적절한데(디폴트임), C++에서는 프로그램 수행 속도를 올리기 위해 statci
바인딩을 디폴트로 하고, 필요시 virtual 을 붙임으로써, Dynamic binding
을 하도록 하고 있습니다. 

저도 C++의 초보인데요, 아직 C++로 프로그램을 작성해본적도 없고,
다만 계속 C를 사용하다, 새로운 프로젝트에서 C++을 사용하기로 결정났기
때문에 소스 분석을 자주하고 있거든요

그럼 안녕히 계세요! (KIDS 들어온지 반년만에 처음 포스팅임..아이고 떨려!)


[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.