C++에서 다형성이란 무엇인가요?
Q1: 다형성이란 무엇인가요?
A1: 다형성(Polymorphism)이란 하나의 함수나 객체가 여러 형태로 동작할 수 있는 객체지향 프로그래밍 개념입니다. C++에서 다형성은 주로 상속과 가상 함수(virtual function)를 통해 구현되며, 동일한 인터페이스가 다양한 타입에서 다르게 동작하도록 해줍니다.
Q2: C++에서 다형성의 종류는 어떤 것이 있나요?
A2: C++에서 다형성은 크게 두 종류로 나뉩니다.
- 컴파일 타임 다형성(Static Polymorphism) : 함수 오버로딩, 템플릿 등을 통해 컴파일 시에 결정됩니다.
- 런타임 다형성(Dynamic Polymorphism) : 가상 함수와 상속을 통해 실행 시에 결정되며, 주로 가상 함수 테이블(vtable)을 사용합니다.
Q3: 왜 다형성이 중요한가요?
A3: 다형성은 코드의 유연성과 재사용성을 증가시킵니다. 동일한 인터페이스로 여러 객체를 다룰 수 있어서 코드 유지보수가 쉽고, 확장성이 뛰어나며, 다양한 객체를 동일한 방식으로 처리할 수 있습니다.
Q4: C++에서 런타임 다형성을 구현하는 방법은?
A4: 런타임 다형성은 기본 클래스(Base Class)의 멤버 함수를 `virtual` 키워드로 선언하고, 파생 클래스(Derived Class)에서 해당 함수를 재정의(overriding)함으로써 구현합니다. 호출 시점에 실제 객체의 타입에 따라 적절한 함수가 호출됩니다.
```cpp
class Animal {
public:
virtual void speak() { std::cout << "Animal speak\n"; }
};
class Dog : public Animal {
public:
void speak() override { std::cout << "Dog barks\n"; }
};
Animal* a = new Dog();
a->speak(); // 출력: Dog barks
```
Q5: 가상 함수가 없는 경우 다형성이 어떻게 작동하나요?
A5: 가상 함수가 없으면 함수 호출은 정적으로(컴파일 타임에) 결정되어 기본 클래스의 함수가 호출됩니다. 따라서 파생 클래스에서 재정의된 함수가 호출되지 않고, 런타임 다형성은 구현되지 않습니다.
Q6: 순수 가상 함수란 무엇인가요?
A6: 순수 가상 함수는 `= 0`으로 선언된 가상 함수로, 해당 클래스는 추상 클래스가 되고 객체를 직접 생성할 수 없습니다. 파생 클래스가 이 함수를 반드시 구현해야 합니다.
```cpp
class Shape {
public:
virtual void draw() = 0; // 순수 가상 함수
};
```
Q7: 다형성 사용 시 주의할 점은?
A7:
- 기본 클래스의 소멸자는 반드시 가상 소멸자(virtual destructor)로 선언해야 합니다. 그렇지 않으면 파생 클래스의 소멸자가 제대로 호출되지 않아 메모리 누수가 발생할 수 있습니다.
- 가상 함수 오버라이딩 시 `override` 키워드를 사용하면 오류를 방지할 수 있습니다.
- 너무 과도한 다형성 사용은 성능 저하를 유발할 수 있으며, 불필요한 복잡성을 증가시킬 수 있습니다.
Q8: 요약하면 C++에서 다형성이란?
A8: C++에서 다형성은 동일한 인터페이스가 여러 다른 타입들의 객체에 대해 각각 다른 행동을 하도록 하는 기능입니다. 주로 가상 함수와 상속을 통해 런타임에 동적 바인딩을 실현하며, 객체 지향 설계를 유연하게 만들어 줍니다.
작성자:
이시현 [비회원]
| 작성일자: 1년 전
2024-09-20 17:11:27
조회수: 140 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 140 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.