안녕하세요! 이번 글에서는 C++ 프로그래밍에서 클래스의 상속과 정보은닉에 대해 자세히 설명하겠습니다. 또한, 상속을 설계하는 과정에서 중요한 개념인 public, private, protected 접근 지시자에 대한 내용도 다루겠습니다.
클래스의 상속 (Inheritance)
클래스의 상속은 기존 클래스의 특성과 동작을 새로운 클래스에 물려주는 개념입니다. 기존 클래스를 부모 클래스 또는 상위 클래스라고 하고, 새로운 클래스를 자식 클래스 또는 하위 클래스라고 합니다. 상속을 통해 자식 클래스는 부모 클래스의 멤버 변수와 멤버 함수를 사용할 수 있습니다.
아래는 상속을 사용한 예제를 보여줍니다
class Animal
{
protected:
string name;
public:
void setName(string n)
{
name = n;
}
void eat()
{
cout << name << " is eating." << endl;
}
};
class Cat : public Animal
{
public:
void meow()
{
cout << name << " says meow!" << endl;
}
};
int main()
{
Cat cat;
cat.setName("Whiskers");
cat.eat();
cat.meow();
return 0;
}
- Animal 클래스는 name 멤버 변수와 setName()과 eat() 멤버 함수를 가지고 있습니다. Cat 클래스는 Animal 클래스를 상속받으며, meow() 멤버 함수를 추가로 가지고 있습니다.
- main() 함수에서 Cat 클래스의 인스턴스 cat을 생성한 후, setName()을 호출하여 이름을 설정하고, eat()과 meow()를 호출하여 동작을 수행합니다. 자식 클래스인 Cat은 부모 클래스인 Animal의 멤버 변수와 멤버 함수를 사용할 수 있습니다.
정보은닉 (Encapsulation)과 접근 지시자
정보은닉은 객체 지향 프로그래밍에서 중요한 개념으로, 클래스의 내부 구현 세부 사항을 외부로부터 숨기는 것을 의미합니다. 이를 통해 클래스의 내부 데이터와 구현에 직접 접근하는 것을 방지하고, 안정성과 유지보수성을 높일 수 있습니다.
C++에서는 public, private, protected 세 가지 접근 지시자를 사용하여 정보은닉을 구현합니다
- public : 외부에서 접근 가능한 멤버로, 클래스 외부에서도 접근할 수 있습니다.
- private : 클래스 내부에서만 접근 가능한 멤버로, 외부에서는 접근할 수 없습니다.
- protected : 클래스 내부와 자식 클래스에서만 접근 가능한 멤버로, 외부에서는 접근할 수 없습니다.
기본적으로 클래스의 멤버 변수와 멤버 함수는 private으로 설정되어 외부에서 접근할 수 없습니다. 따라서 public 멤버 함수를 통해 클래스의 인터페이스를 제공하여 외부에서 필요한 동작을 수행할 수 있도록 합니다.
가상 함수와 순수 가상 함수 (Virtual Functions and Pure Virtual Functions)
가상 함수는 클래스의 멤버 함수 중 하위 클래스에서 재정의할 수 있는 함수입니다. 이를 통해 다형성(polymorphism)을 구현할 수 있습니다. 가상 함수는 virtual 키워드를 사용하여 선언되며, 하위 클래스에서 재정의할 수 있습니다.
순수 가상 함수는 하위 클래스에서 반드시 재정의해야 하는 함수로, 구현이 없는 가상 함수입니다. 순수 가상 함수는 virtual 키워드와 함께 = 0으로 선언됩니다.
이번 글에서는 클래스의 상속과 정보은닉에 대한 내용을 다루었습니다.
다음 글에서는 가상 함수와 순수 가상 함수에 대해 자세히 설명하겠습니다.
감사합니다!
'[C++] > 프로그래밍 기초' 카테고리의 다른 글
[C++] 프로그래밍 기초 : 함수 오버라이딩 (0) | 2023.06.03 |
---|---|
[C++] 프로그래밍 기초 : 가상 함수와 순수 가상 함수 (1) | 2023.06.02 |
[C++] 프로그래밍 기초 : 클래스 (0) | 2023.06.02 |
[C++] 프로그래밍 기초 : 포인터와 참조자 (0) | 2023.06.02 |
[C++] 프로그래밍 기초 : 함수와 매개변수 (0) | 2023.06.02 |