캡슐화는 객체 지향 프로그래밍(OOP)의 핵심 원칙 중 하나로, 데이터와 이 데이터를 처리하는 기능을 그룹화하고 사용자로부터 구현 세부 사항을 숨기려는 필요에서 등장했습니다.
OOP가 등장한 이후, 캡슐화는 프로그램의 신뢰성을 높이고, 오류를 줄이며, 코드 유지 관리를 용이하게 하는 데 초점을 맞추어 왔습니다. C++에서 이는 데이터 숨김과 객체와의 상호 작용을 위한 인터페이스 제공을 통해 구현됩니다.
캡슐화가 없다면 클래스의 내부 데이터와 구현 세부 사항은 프로그램의 어떤 부분에서도 변경할 수 있습니다. 이는 오류를 발생시키고, 변경 시 복잡성을 증가시키며, 코드의 관리성을 떨어뜨립니다.
C++에서 캡슐화는 클래스 내 접근 제어자(private, protected, public)를 통해 달성됩니다. 클래스의 내부 데이터는 private 또는 protected로 선언되며, 이를 접근하기 위해 공개 메서드(게터 및 세터)를 사용합니다.
코드 예시:
class Account { private: double balance; public: Account(double initial) : balance(initial) {} double getBalance() const { return balance; } void deposit(double amount) { if (amount > 0) balance += amount; } };
주요 특징:
protected 멤버는 클래스의 객체가 있는 프로그램의 어디에서든 접근할 수 있는가?
아니요, protected 멤버는 클래스 자신, 친구 및 파생 클래스의 메서드에서만 접근할 수 있으며, 다른 클래스 및 외부 객체에서는 접근할 수 없습니다.
클래스의 public 멤버는 "캡슐화"될 수 있는가?
아니요, public 멤버는 캡슐화되지 않으며, 이들의 역할은 외부 인터페이스를 제공하는 것입니다. 지나치게 공개된 public 멤버는 캡슐화 원칙을 위반할 수 있습니다.
private 접근 제어자가 런타임에서 코드의 안전성을 추가하는가?
아니요, 접근 제어자는 컴파일러 수준에서만 작동하며 실행 파일에서 데이터에 대한 접근을 방지하지 않지만 설계 오류를 제한합니다.
개발자가 '비즈니스 논리의 단순성'을 위해 모든 클래스 변수를 public으로 설정했습니다.
장점:
단점:
데이터가 private으로 선언되고, 검증이 필수인 getter/setter를 통해 상호작용합니다.
장점:
단점: