상세 컨텐츠

본문 제목

[이론] 상속의 규칙과 사용에 따른 가상함수 비용

C / C++

by 부레두 2024. 2. 19. 03:24

본문

상속

동일한 데이터를 가지고 있는 클래스에 다른 동작을 정의하기 위한 개념
이미 존재하는 클래스를 기반으로 새로운 클래스를 만들어 변형을 가함

 

부모 클래스에서 필요한 부분을 복사해 새로운 자식 클래스를 만드는 것은 완성된 캡슐화 클래스를 깨는 행위에 가깝기 때문에 상속이란 개념이 중요

장점 단점
개체의 실제 형에 대해 신경쓰지 않아도됨 가상 함수 사용 시 얼마간의 성능저하 발생
개체가 사용하는 코드와 각 자식 클래스의 특정 구현을 분리 과한 확장성 대비가 코드 작성에 어려움을 야기
실제 클래스형에 상관없이 하나의 함수를 이용해 모든 파생 클래스 참조를 가능하게 함  

 

상속 클래스 다이어그램

[이미지]


virtual 키워드의 역할

상속된 클래스가 해당 함수를 오버라이드한 경우, virtual 키워드 여부에 따라 개체의 형을 이용해 호출될 함수를 결정

다형성 : 부모 클래스의 형 포인터를 이용해 하위 개체들을 참조할 수 있게 해주는 것

class Parent
{
};

class Child : public Parent
{
};

// 자식 개체 생성
Child * pChild = new Child;
// 부모형의 포인터 만들고 Child 개체를 가리킴
Parent* pParent = new Child;

상속을 하기 위한  규칙

  1. 다른 클래스에서 새로운 클래스를 상속할 경우 '포함' 관계가 성립되야 한다.
    ▶ B형의 개체가 또한 A형이다. = B는 A이다.
    ▶ 논리적이고 적절한 디자인 설계가 필요
  2. 데이터가 아닌 동작을 변경하는 경우에만 상속을 이용
    ▶ 데이터의 수치만 변경하는 것은 변수의 값만 다르게 초기화된 클래스와 다를 것이 없다.

관련글 더보기