티스토리 뷰

상속을 사용하는 가장 큰 이유는 이전 글 (죽음의 다이아몬드)에서 설명했듯이 프로그램의 확장성을 위한 것이다. 이를 위해서 부모클래스에서는 최대한 모든 객체가 가지는 특성을 가지고, 자식 클래스로 내려갈수록 점점 그 객체들만 가지는 특성을 가지게 된다. 하지만 여기서 문제가 생긴다. ‘최상위 부모 객체는 그저 기초 클래스의 의미만 가질 뿐, 객체의 생성을 목적으로 정의된 클래스가 아니라는 점이다. 예를 들어, ‘사람이라는 클래스가 있고, 그 클래스는 이름과 나이라는 변수를 지닌다. 이는 최상위 부모 객체가 된다. 그 자식 객체는 직업이 없는 사람들과 학생, 또 직장인으로 나눠질 수 있다. 또 여기서 학생은 초, , , 전문대, 4년제, 대학원 등 여러 자식 객체로 나눠질 수 있지만 그 이야기를 하려는게 아니라, 이렇게 객체를 나누고 나면 객체를 생성할 때 부모 객체인 사람은 그저 기초 클래스의 의미만 가진다는 점이다.


   Person * junhwa = new Person (“Park Jun Hwa”);


이런 문장이 만들어진다면 문법적으로는 아무런 문제가 없기 때문에 오류로 발견되지 않지만, 이는 명백히 프로그래머의 실수이다. 이런 일을 막기 위해서는 가상함수를 순수 가상함수로 선언하여 객체의 생성을 문법적으로 막는 것이 좋다.


   virtual Int GetAge() const = 0;


부모 객체에서 사용할 일이 없는데도 불구하고 객체 안에 가상함수를 선언해야 할 일이 많은데, 이러한 가상함수에 ‘0의 대입을 표시한다. 이는 진짜로 0을 대입하라는 의미가 아니라, 컴파일러에게 몸체를 정의하지 않았다라는 의미로 해석된다. 이렇게 하나 이상의 순수 가상함수로 선언한 클래스를 추상 클래스(Abstract Class in C++)라고 하는데, 이러한 클래스는 그 객체만을 따로 선언하려 하면 컴파일 에러가 발생하여 프로그래머의 실수를 방지한다.



혹시 잘못된 내용이나 오류가 있다면 댓글로 알려주세요!! 공부를 위해 올린 글이니 태클은 언제나 환영입니다!!

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함