이런 분들이 찾고 있어요
이 레슨과 관련된 학습 키워드
코드를 읽고 설명하면, 합격합니다
이 레슨과 관련된 학습 키워드
C++ 프로그래밍 — 성능과 추상화의 균형 → C에서 C++로
What — 상속(Inheritance)이란?
Why — 왜 상속이 필요한가?
How — 상속의 구조
[여기에 다이어그램]
다이어그램 구성 요소:
상속 접근 지정자에 따른 차이
IS-A vs HAS-A 구분
기반 클래스 생성·소멸 순서
핵심 정리
오늘은 C++ 상속이 무엇인지 살펴보겠습니다.
상속은 기존 클래스의 멤버를 새 클래스가 물려받는 구조입니다.
핵심 개념은 IS-A 관계입니다.
Dog IS-A Animal처럼 파생 클래스는 기반 클래스의 한 종류입니다.
그림 가운데 상단을 보시면 Animal 기반 클래스가 있습니다.
Animal은 name, age, energy 멤버와 eat, sleep 함수를 가집니다.
여기서 energy는 protected 멤버로 선언되어 있습니다.
그림 왼쪽 아래를 보시면 Dog 파생 클래스가 있습니다.
Dog는 콜론 public Animal 구문으로 Animal을 상속합니다.
breed 필드와 bark 함수가 새로 추가됩니다.
name, age, eat, sleep은 Animal로부터 자동으로 물려받습니다.
오른쪽 Cat도 마찬가지로 purr 함수를 추가하고 나머지는 상속받습니다.
두 클래스 모두 protected 멤버 energy에 접근 가능합니다.
가운데 메모리 레이아웃을 보시면 Dog 객체의 실제 구조가 보입니다.
Animal 부분인 name, age, energy가 메모리 앞쪽에 먼저 배치됩니다.
그 뒤에 Dog 고유의 breed가 붙는 구조입니다.
상속이 필요한 이유는 코드 재사용 때문입니다.
비슷한 클래스마다 같은 코드를 복붙하면 DRY 원칙 위반입니다.
또한 상속은 가상 함수와 동적 바인딩을 가능하게 하는 토대입니다.
하단 비교표를 보시면 접근 지정자별 차이가 한눈에 보입니다.
public 상속은 기반의 public이 파생에서도 public으로 유지됩니다.
진정한 IS-A 관계를 표현하는 가장 일반적인 방식입니다.
protected 상속은 외부 노출을 막고 싶을 때 사용합니다.
private 상속은 모든 멤버가 private이 되어 HAS-A에 가깝습니다.
Sutter와 Alexandrescu는 이 경우 합성을 선호하라고 권장합니다.
하단 오른쪽을 보시면 protected 멤버의 접근 범위 표가 있습니다.
클래스 내부와 파생 클래스에서는 energy 접근이 가능합니다.
하지만 main 같은 외부 코드에서는 energy에 접근할 수 없습니다.
생성 순서는 Base 생성자가 먼저, 그 다음 Derived 생성자 순입니다.
소멸은 역순으로 Derived 소멸자가 먼저, Base 소멸자가 마지막입니다.
정리하면 public 상속만이 진정한 IS-A 관계를 표현합니다.
그리고 상속은 다음 레슨에서 배울 다형성의 필수 전제 조건입니다.