데이터 은닉(Data Hiding)은 객체 지향 프로그래밍(OOP)의 핵심 기능 중 하나로, 프로그램의 함수가 클래스 타입의 내부 표현에 직접 접근하는 것을 막아줍니다. 이러한 접근 제한은 클래스 본문 안에서 public, private, protected라는 접근 지정자(access modifier) 섹션을 통해 지정할 수 있습니다.
특별히 접근 지정자를 명시하지 않으면, 클래스 멤버와 클래스 자체의 기본 접근 수준은 private으로 설정됩니다.
예제 코드
class Base {
public:
// public 멤버는 여기에 작성
protected:
// protected 멤버는 여기에 작성
private:
// private 멤버는 여기에 작성
};접근 지정자별 특징
1. public (공개)
public 멤버는 클래스 외부 어디에서든 프로그램 전체 범위에서 접근할 수 있습니다. 별도의 멤버 함수 없이도 public 변수의 값을 자유롭게 설정(set)하고 가져올(get) 수 있습니다.
2. private (비공개)
private 멤버 변수나 함수는 클래스 외부에서 접근할 수 없을 뿐만 아니라, 조회조차 불가능합니다. 오직 해당 클래스 자신과 friend 함수만 private 멤버에 접근할 수 있습니다.
3. protected (보호)
protected 멤버 변수나 함수는 private 멤버와 매우 유사하지만, 한 가지 중요한 장점이 있습니다. 바로 파생 클래스(derived class), 즉 자식 클래스에서도 접근할 수 있다는 점입니다. 이 덕분에 상속 관계에서 부모 클래스의 내부 데이터를 자식 클래스가 안전하게 활용할 수 있습니다.
접근 가능 범위 비교표
| 접근 지정자 | 클래스 내부 | 파생 클래스 | 외부 코드 |
|---|---|---|---|
| public | O | O | O |
| protected | O | O | X |
| private | O | X | X |
이처럼 세 가지 접근 지정자를 적절히 활용하면 클래스의 캡슐화를 강화하고, 의도치 않은 데이터 변경을 방지하며, 상속 구조에서 필요한 만큼만 기능을 노출하는 견고한 설계를 할 수 있습니다.