728x90
반응형
개요
객체지향 프로그래밍에서 추상화(Abstraction)는 OOP의 핵심 개념이지만, 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)이라는 "3요소"로 따로 분리되어 언급되지는 않는다. 그러나 추상화는 3요소에 깊이 관여하는 개념으로, 특정 요소에 포함되거나, 독립적인 개념으로 이해될 수 있다.
추상화와 캡슐화의 관계
- 추상화는 무엇을 해야 하는지에 초점을 맞추는 반면, 캡슐화는 어떻게 할 것인지에 초점을 맞춘다.
- 예를 들어, 추상 클래스나 인터페이스를 사용하여 "행동의 골격(what to do)"을 정의한 다음, 세부 구현은 감추는 캡슐화를 통해 내부적으로 처리한다.
추상화와 상속의 관계
- 상속은 추상화를 실현하기 위한 도구로 사용된다.
- 부모 클래스는 공통적인 특징과 동작을 정의(추상화)하고, 자식 클래스는 이를 상속받아 구체화한다.
추상화와 다형성의 관계
- 추상화는 다형성을 가능하게 하는 기반이다.
- 추상 클래스를 통해 여러 클래스가 공통된 인터페이스를 공유하며, 다형성을 통해 런타임에 서로 다른 동작을 수행한다.
예시
추상 클래스 Animal
은 "소리를 낸다"는 공통된 행동을 정의(추상화)했다.
이를 상속받아 Dog
과 Cat
과 같은 다형의 클래스가 형성되고, 각 클래스는 구체적인 구현을 제공한다.
#include <iostream>
using namespace std;
// 추상화: 동물의 공통된 행동 정의 (무엇을 해야 하는가)
class Animal {
public:
virtual void makeSound() const = 0; // 순수 가상 함수
};
// 구체화: 세부 동작 정의 (어떻게 할 것인가)
class Dog : public Animal { //자식 클래스 Dog가 Animal을 상속받아 구체화
public:
void makeSound() const override {
cout << "Woof!" << endl;
}
};
// 구체화: 세부 동작 정의 (어떻게 할 것인가)
class Cat : public Animal { //자식 클래스 Cat이 Animal을 상속받아 구체화
public:
void makeSound() const override {
cout << "Meow!" << endl;
}
};
int main() {
// 추상클래스 Animal을 통해 Dog, Cat 클래스로 다양하게 형성
Animal* animal1 = new Dog();
Animal* animal2 = new Cat();
animal1->makeSound(); // Dog의 구현
animal2->makeSound(); // Cat의 구현
delete animal1;
delete animal2;
return 0;
}
결론
- 추상화는 3요소에 내재된 개념으로, 캡슐화, 상속, 다형성을 구현하는 데 필수적인 기반이다.
- 따라서 OOP의 "4번째 요소"로 보기보다는, OOP의 3요소에 전반적으로 스며 있는 개념으로 이해하는 것이 적합하다.
- 추상 클래스, 인터페이스, 가상 함수 등은 추상화를 구체화하는 도구로서 다른 요소들과 자연스럽게 통합된다.
참고 문헌
728x90
반응형
'Programming > 객체지향프로그래밍' 카테고리의 다른 글
OOP의 실제 사례: 유명한 소프트웨어에서의 객체지향 원칙 적용 사례 (6) | 2025.05.05 |
---|---|
OOP와 절차적 프로그래밍의 차이: 두 프로그래밍 패러다임 간의 비교 (7) | 2025.05.04 |
객체지향개발이 운영체제(Linux/Windows)에 미치는 잠재적 악영향 (0) | 2025.04.04 |
객체지향프로그래밍의 3요소 5원칙 #2 - 5원칙 (0) | 2025.01.23 |
객체지향프로그래밍의 3요소 5원칙 #1 - 3요소 (0) | 2025.01.22 |