캡슐화는 객체 지향 설계의 원칙으로, 객체의 내부 구조를 숨기고 필요한 공용 인터페이스만 제공하는 것을 의미합니다.
문제의 역사: 객체 지향 프로그래밍의 처음부터 주요 과제 중 하나는 객체의 내부 상태를 외부에서 잘못 변경하는 것으로부터 보호하고 논리를 엄격하게 제어하는 것이었습니다.
문제: 캡슐화가 없으면 모든 데이터와 메서드가 외부 코드에 접근 가능해져 객체의 상태 제어를 잃고 찾기 힘든 오류가 발생할 수 있습니다.
해결책:
C++에서는 세 가지 접근 제한자 private, protected, public를 사용합니다. private는 클래스 외부에서 멤버에 접근하는 것을 금지하고, protected는 상속받은 클래스에만 접근을 허용하며, public은 멤버를 인터페이스의 일부로 만듭니다.
코드 예:
class Stack { private: int *data; int top; public: Stack(); void push(int val); int pop(); };
주요 특징:
private 멤버는 클래스 외부에서 어떤 식으로든 변경할 수 없다?
거짓입니다. friend 함수, friend 클래스 또는 비안전한 방법(예: 포인터 캐스팅 또는 정의되지 않은 동작을 통한 접근)을 사용할 수 있습니다.
상속 시 한정자가 적용되는 순서는 어떻게 되나요 (private, protected, public)?
상속이 private로 선언되면, 기본 클래스의 모든 public 및 protected 멤버는 파생 클래스의 private 멤버가 됩니다.
protected 상속과 private 상속의 차이는 무엇인가요?
protected 상속에서는 기본 클래스의 모든 public 및 protected 멤버가 파생 클래스의 protected 멤버가 되고, private 상속에서는 모두 private 멤버가 됩니다.
모든 클래스 멤버가 public으로 선언되어 있어 외부 코드가 구조를 변경하고 객체의 불변성을 위반할 수 있습니다.
장점:
단점:
필요한 public 메서드만 사용하고 나머지 데이터는 숨겨져 (private) 있어 상태가 보호됩니다.
장점:
단점: