Reference

c++ private, public, protected 속성, 상속 접근 지정자

일반적으로 부모 클래스는 자식 클래스의 변수나 함수에 직접 접근할 수 없습니다. 자식 클래스에는 부모 클래스에 없는 추가 멤버 변수나 함수가 포함될 수 있기 때문입니다.

그러나 자식 클래스는 부모 클래스에서 멤버 변수와 함수를 상속할 수 있으며 부모 클래스는 이러한 상속된 멤버에 액세스할 수 있습니다. 이러한 멤버의 액세스 수준은 멤버를 상속할 때 사용되는 가시성 모드에 따라 다릅니다.

  1. Public 상속: 자식 클래스가 공개 상속을 사용하여 부모 클래스로부터 멤버 변수나 함수를 상속하면 멤버는 자식 클래스의 퍼블릭 멤버가 됩니다. 이는 부모 클래스가 마치 자식 클래스의 공용 멤버인 것처럼 자식 클래스 개체를 사용하여 멤버에 액세스할 수 있음을 의미합니다.
  2. Protectd 상속: 자식 클래스가 보호된 상속을 사용하여 부모 클래스로부터 멤버 변수 또는 함수를 상속하면 해당 멤버는 자식 클래스의 보호된 멤버가 됩니다. 즉, 부모 클래스는 멤버에 직접 액세스할 수 없지만 자식 클래스의 모든 파생 클래스에서 액세스할 수 있습니다.
  3. Private 상속: 자식 클래스가 개인 상속을 사용하여 부모 클래스로부터 멤버 변수 또는 함수를 상속하면 멤버는 자식 클래스의 개인 멤버가 됩니다. 즉, 부모 클래스는 멤버에 직접 액세스할 수 없으며 자식 클래스의 파생 클래스에서도 액세스할 수 없습니다.

일반적으로 상위 클래스가 하위 클래스의 변수나 함수에 액세스하도록 하는 것은 객체 지향 프로그래밍의 캡슐화 원칙을 위반하기 때문에 좋은 설계 방식이 아닙니다. 부모 클래스는 자식 클래스에서 public 또는 protected로 선언된 멤버에만 액세스해야 합니다.

Public 상속은 가장 일반적인 상속 유형이며 일반적으로 파생 클래스가 기본 클래스의 하위 유형일 때 사용됩니다. 즉, 파생 클래스가 기본 클래스 "이다"를 의미합니다. 이 경우 파생 클래스는 기본 클래스의 모든 public 및 protected 멤버를 상속하며 이러한 멤버는 각각 파생 클래스의 public 및 protected 멤버가 됩니다. 공용 상속은 기본 클래스의 기능을 재사용하고 파생 클래스에서 확장하려는 경우에 유용합니다.

Protected 상속은 공개 상속보다 덜 일반적이며 일반적으로 기본 클래스의 기능을 재사용하지만 외부 세계에 노출하고 싶지 않을 때 사용됩니다. 이 경우 파생 클래스는 기본 클래스의 모든 보호 및 공용 멤버를 상속하지만 이러한 멤버는 파생 클래스의 보호된 멤버가 됩니다. 보호된 상속은 기본 클래스의 구현을 재사용하지만 외부 액세스를 허용하지 않으려는 경우에 유용합니다.