본문 바로가기
C++/기본

[C++] 20. OOP - 추상

by 위니밍 2025. 3. 29.
반응형
📌 요약: 추상화 | 추상 클래스 | 순수가상함수 | 오버라이딩 | 자식 클래스 구현

🔧 추상화 (Abstraction)

추상화는 클래스 설계 시 구체적인 동작을 정의할 수 없는 기능을 추상적인 표현으로 미리 정의해두는 방식입니다. 이런 기능은 자식 클래스에서 구체화하여 구현하게 됩니다.

📌 추상 클래스란?

추상 클래스는 하나 이상의 순수가상함수를 포함한 클래스입니다. 해당 클래스 자체는 인스턴스화가 불가능하며, 자식 클래스에서 해당 가상 함수를 반드시 재정의해야 합니다.

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

위처럼 함수 선언 뒤에 = 0을 붙이면 해당 함수는 구현 없이 선언만 된 순수가상함수가 됩니다.

💡 예제 코드: 아이템 사용과 동물 울음 구현
#include <iostream>

using namespace std;

class Item {
public:
	virtual void Use() = 0;
};

class Potion : public Item {
public:
	void Use() override {
		cout << "포션을 사용하여 체력을 회복합니다." << endl;
	}
};

class Herb : public Item {
public:
	void Use() override {
		cout << "해독초를 사용하여 독상태를 해제합니다." << endl;
	}
};

class Animal {
public:
	virtual void Cry() = 0;
};

class Cat : public Animal {
	void Cry() override {
		cout << "야옹" << endl;
	}
};

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

int main() {
	Item* potion = new Potion();
	potion->Use();

	Item* herb = new Herb();
	herb->Use();

	delete potion;
	delete herb;

	Animal* cat = new Cat();
	cat->Cry();

	Animal* dog = new Dog();
	dog->Cry();

	delete cat;
	delete dog;

	return 0;
}
📌 추상 클래스의 특징
  • 인스턴스를 생성할 수 없음
  • 자식 클래스에서 반드시 순수가상함수를 구현해야 함
  • 기능이 다양한 자식 클래스에서 동일한 인터페이스 제공 가능
🧪 실행 순서

1. Potion과 Herb 객체 생성 후 Use() 호출 2. 각각 체력 회복 및 상태 해제 메시지 출력 3. Cat과 Dog 객체 생성 후 Cry() 호출 4. 각각 울음소리 출력 5. 생성된 객체 delete로 해제

반응형

'C++ > 기본' 카테고리의 다른 글

[C++] 22. String 문자열  (0) 2025.03.29
[C++] 21. STL  (0) 2025.03.29
[C++] 19. OOP - 다형성  (0) 2025.03.29
[C++] 18. OOP - 상속  (0) 2025.03.29
[C++] 16. OOP(객체지향 프로그래밍)  (0) 2025.03.29