c++

C++ 클래스 상속과 다형성 활용법

개발에대해 2025. 9. 21. 12:48
반응형

C++ 클래스 상속과 다형성 활용법

 

객체지향 프로그래밍(OOP)에서 상속(Inheritance)다형성(Polymorphism)은 핵심 개념입니다.

C++에서는 클래스를 기반으로 코드 재사용성과 확장성을 높이고, 다양한 객체를 공통 인터페이스로 처리할 수 있습니다.

 

이번 글에서는 C++에서 상속을 구현하는 방법과 가상 함수, 함수 오버라이딩, 추상 클래스 활용법까지 실전 예제와 함께 설명합니다.

1. 상속 기본

C++에서 상속은 부모 클래스(기반 클래스)의 멤버를 자식 클래스(파생 클래스)에서 재사용하고 확장할 때 사용합니다.

기본 문법은 다음과 같습니다.


#include <iostream>
using namespace std;

class Animal {
public:
    void Eat() { cout << "먹는다" << endl; }
};

class Dog : public Animal { // Animal을 public 상속
public:
    void Bark() { cout << "짖는다" << endl; }
};

int main() {
    Dog d;
    d.Eat();  // 부모 클래스 함수 사용
    d.Bark(); // 자식 클래스 함수 사용
}
  

 

상속 종류에 따라 접근 범위가 달라집니다.

  • public 상속: 부모 public 멤버가 자식 public으로, protected는 그대로 protected
  • protected 상속: 부모 public/protected 모두 자식 protected
  • private 상속: 부모 public/protected 모두 자식 private

 

2. 다형성과 가상 함수

 

다형성은 동일한 인터페이스로 여러 객체를 다르게 동작하도록 하는 특징입니다.

이를 위해 C++에서는 가상 함수(virtual function)를 사용합니다.


class Animal {
public:
    virtual void Speak() { cout << "동물이 소리낸다" << endl; }
};

class Dog : public Animal {
public:
    void Speak() override { cout << "멍멍" << endl; }
};

int main() {
    Animal* a = new Dog();
    a->Speak(); // 멍멍 출력, 다형성 적용
    delete a;
}
  

 

override 키워드를 사용하면 부모의 가상 함수를 명시적으로 재정의할 수 있으며,

실수로 함수 시그니처가 다를 때 컴파일러가 오류를 알려 안전합니다.

 

3. 추상 클래스와 순수 가상 함수

 

추상 클래스(Abstract Class)는 하나 이상의 순수 가상 함수(pure virtual function)를 포함하는 클래스입니다.

순수 가상 함수는 `=0`으로 선언하며, 자식 클래스에서 반드시 구현해야 합니다.


class Shape {
public:
    virtual void Draw() = 0; // 순수 가상 함수
};

class Circle : public Shape {
public:
    void Draw() override { cout << "원 그리기" << endl; }
};

int main() {
    Shape* s = new Circle();
    s->Draw(); // 원 그리기 출력
    delete s;
}
  

 

추상 클래스를 사용하면, 공통 인터페이스를 정의하고 다양한 파생 클래스에서 구체 구현을 강제할 수 있어 유지보수성이 높아집니다.

 

4. 주의사항

  • 가상 함수를 사용하는 클래스는 가상 소멸자(virtual destructor) 필요: 부모 포인터로 삭제 시 메모리 누수 방지
  • 다중 상속 시 이름 충돌과 다이아몬드 문제 주의
  • 상속 깊이가 깊어지면 유지보수 어려움 → 적절한 설계 필요
  • override와 final 키워드 활용: 안전한 오버라이딩과 상속 제한 가능
 

마무리

이번 글에서는 C++의 클래스 상속과 다형성을 다뤘습니다.

 

상속을 통해 코드 재사용성을 높이고, 가상 함수를 통해 다형성을 구현할 수 있으며,

추상 클래스는 공통 인터페이스를 정의하는 데 활용됩니다.

 

하지만 가상 소멸자, 다중 상속 문제, 설계 깊이 등 주의사항을 반드시 고려해야 합니다.

객체지향 설계를 이해하고 올바르게 활용하면, 확장성과 유지보수성이 뛰어난 코드를 작성할 수 있습니다.

반응형