C++을 공부하다 보면 어느 순간 벽처럼 느껴지는 개념이 등장합니다.
변수와 함수까진 괜찮았는데, 갑자기 ‘객체지향’, ‘클래스’, ‘상속’, ‘다형성’ 같은
용어들이 쏟아지면서 머릿속이 혼란스러워지는 순간이 오죠.
하지만 사실 이 개념들은 게임 개발에서 가장 자주 쓰이고,
실제 프로젝트 구조를 이해하려면 반드시 한 번은 넘어야 하는 핵심 문법입니다.
이번 6강에서는 많은 초보자들이 헷갈려 하는
상속(inheritance) 과 다형성(polymorphism) 을
가장 직관적인 예제 중심으로 풀어보려 합니다.
특히 “왜 이런 구조를 쓰는지”,
그리고 “게임 코드에서는 어디에 활용되는지”를 중심으로 설명드릴 테니,
이전 강의에서 배운 클래스 개념이 아직 완벽히 잡히지 않았다면
이번 편이 그 빈틈을 채우는 좋은 계기가 될 거예요.
[ C++ 위기 극복 시리즈 이전 강의 살펴보기 ]
프로그래밍 언어 C++ 4강 : 스마트 포인터의 구원투수
[ C++ 위기 극복 시리즈 이전 강의 살펴보기 ] 1. Prologue : 왜 스마트 포인터가 필요할까? 2. 스마트 ...
blog.naver.com
C++프로그래밍 언어 5강 : 객체지향의 장벽, 클래스 이해하기
[ C++ 위기 극복 시리즈 이전 강의 살펴보기 ] 1. 클래스란 무엇인가? 클래스는 쉽게 말해 데이터(변수)와...
blog.naver.com
1. 상속이란 무엇인가?
상속은 기존 클래스의 특성을 물려받아 새로운 클래스를 만드는 것입니다.
class Animal
{
public:
void eat()
{
cout << "먹는 중....\n";
}
};
class Dog : pubic Animal
{
public:
void bark()
{
cout <<"멍멍!\n";
}
};
● Animal → 부모 클래스 (기본 클래스, base class)
● Dog → 자식 클래스 (파생 클래스, derived class)
Dog는 Animal의 기능을 그대로 쓰면서, 새로운 기능을 추가할 수 있습니다.
2. 흐름도 : 상속 구조
[부모 클래스 : Animal]
↓
상속 (extends)
↓
[자식 클래스 : Dog]
부모는 공통 기능을 제공, 자식은 특화된 기능을 추가합니다.
3. 다형성이란 무엇인가?
다형성은 "하나의 인터페이스로 여러 동작을 표현하는 것"입니다.
특히 가상 함수 (virtual fuction)을 통해 구현됩니다.
class Animal
{
public:
virtual void sound()
{
cout << "동물 소리\n";
}
};
class Dog : public Animal
{
public:
void sound() override
{
cout << "멍멍!\n";
}
};
class Cat : public Animal
{
public:
void sound() override
{
cout << "야옹~\n";
}
};
int main()
{
Animal* a1 = new Dog();
Animal* a2 = new Cat();
a1->sound(); // 멍멍!
a2->sound(); // 야옹~
return 0;
}
같은 sound() 호출이지만, 실제 객체에 따라 다른 동작이 발생합니다.
이것이 바로 런타임 다형성입니다.
4. 비전공자가 자주 하는 오해
1) 상속은 무조건 써야 한다.
● 아니요, 코드가 복잡해질 수 있으므로, "공통기능이 있을 때만" 사용합니다.
2) 다형성 = 단순 오버로딩
● 오버로딩(overloading)은 같은 이름의 함수 여러 개 정의.
● 다형성(polymorphism)은 같은 함수 호출이 객체에 따라 다르게 동작.
3) virtual 은 옵션일 뿐
● 사실상 다형성을 제대로 구현하려면 꼭 필요합니다.
5.[예제] 상속과 다형성 결합
#include <iostream>
using namespace std;
class Animal
{
public:
virtual void speak()
{
cout << "동물 소리\n";
}
};
class Dog : public Animal
{
void speak() override
{
cout << "멍멍!\n";
}
};
class Cat : public Animal
{
void speak() override
{
cout << "야옹~\n";
}
};
int main()
{
Animal* animals[2];
animals[0] = new Dog();
animals[1] = new Cat();
for(int i = 0; i < 2; i++)
{
animals[i]->speak();
}
// 메모리 해제
for(int i = 0; i < 2; i++)
{
delete animals[i];
}
return 0;
}
출력결과
멍멍!
야옹~
6. 실행 추적표

같은 함수 호출이지만, 객체에 따라 결과가 달라집니다.
7. 극복 전략
● 상속은 공통 기능이 있을 때만 사용 ➡ 불필요한 상속은 코드 복잡성만 증가.
● 다형성을 작은 예제로 연습 ➡ 동물 소리, 도형 면적 계산 등 간단한 모델로 시작.
● virtual 키워드의 의미를 명확히 이해 ➡ "나중에 자식 클래스가 이 함수를 덮어쓸 수 있다."
8. 마무리 요약
● 상속 : 부모 클래스의 기능을 자식 클래스가 물려받아 재사용.
● 다형성 : 같은 함수 호출이 객체에 따라 다르게 동작.
● 가상 함수 (virtual)를 통해 다형성을 구현.
● 객체지향 프로그래밍에서 상속과 다형성은 코드 재사용 성과 확장성을 높이는 핵심 개념.
💬다음 편에서는 7강 – 템플릿 공포증 극복하기를 통해,
많은 초보자들이 혼란을 느끼는
template 문법을 쉽게 풀어보겠습니다.
그리고 저희 어소트락 게임 아카데미에서는 교육생들이
상속과 다형성을 단순 이론이 아닌 프로젝트 실습을 통해 배우도록 지도합니다.
추상적으로만 들리는 객체지향 개념도, 직접 경험하면 훨씬 빠르게 이해할 수 있는데요.
상속과 다형성은 이론으로만 보면 쉽지 않지만,
직접 설계하고 구현해 보는 순간 머릿속에서
퍼즐이 맞춰지기 시작할 겁니다.
어소트락 무료 강의로
🎮 예습·복습 완성!🎮

특히 현재 어소트락 무료 유튜브 강의에서는
상속의 활용(80강, 82강)
함수 오버라이딩의 정확한 사용법(81강)
다형성 구현과 확장(83~84강)
까지 단계적으로 이어지기 때문에,
기초를 다진 뒤 직접 움직이는 결과로 연결할 수 있습니다.
상속과 다형성은
“듣고 이해하는 개념”이 아니라
“직접 설계하고 구현하면서 익히는 기술”입니다.
이제 어소트락에서, 여러분도 객체지향의
진짜 실력을 쌓아보세요. 🧐
Direct X 11 기반 게임 엔진 제작까지
확장하고 싶다면?
국내 최초 에픽게임즈 언리얼엔진 공인(UATC)
골드 등급 교육기관에서 지금 바로 수강 신청!
[자체 게임엔진 제작 과정 30% 할인코드 제공 중 ]
30% 할인 혜택?어소트락 DirectX11기반 온라인 강의 과정
유데미 온라인 강의 DirectX11 기반 자체게임엔진제작 할인 링크 클릭 방법 (사이트 바로가기) ※각 파트...
blog.naver.com
'무료강의 > 프로그래밍 원리' 카테고리의 다른 글
| C++ 왕초보 강의 8강: STL 멘붕 탈출 가이드 (0) | 2025.12.29 |
|---|---|
| C++ 왕초보 강의 7강 : Template 한 번에 정리하기 (0) | 2025.12.19 |
| C++ 왕초보 강의 5강 : 클래스 입문과 this 포인터 완전 정복 (0) | 2025.12.10 |
| C++ 왕초보 강의 4강 : 스마트 포인터의 구원투수 (0) | 2025.11.19 |
| C++ 왕초보 강의 3강 : 메모리 관리 공포증(new & delete) (0) | 2025.10.21 |