**접근 제어자(access modifier)**는 class 멤버의 가시성을 제어하여, 누가 그것을 읽거나 호출할 수 있는지 제한함으로써 encapsulation을 강제합니다.
**접근 제어자(access modifier)**는 class 멤버의 가시성을 제어하여, 누가 그것을 읽거나 호출할 수 있는지 제한함으로써 encapsulation을 강제합니다.
| 제어자 | 접근 가능 범위 |
|---|
public | 어디서나 |
protected | 해당 class 와 그 서브클래스 |
private | 선언한 class 내부에서만 |
public class Employee {
private double salary; // 내부용 — Employee 만 접근
protected String department; // 서브클래스가 사용 가능
public String name; // 모두에게 공개
public double getSalary() { // 통제된 public 읽기 접근
return salary;
}
}
salary는 private이므로 외부 코드가 손상시킬 수 없습니다. public getter가 유일한 창구입니다.
class Demo:
def __init__(self):
self.public = 1
self._protected = 2 # 관례일 뿐 ("건드리지 마시오")
self.__private = 3 # _Demo__private 로 이름 맹글링됨
Python에는 강제되는 private이 없습니다 — 명명 관례에 의존합니다. Java/C#은 컴파일 타임에 제어자를 강제합니다. Java에는 패키지 전용(기본값, 키워드 없음)도 있습니다.
모든 것을 public으로 만들면 encapsulation이 무력화됩니다. 가장 제한적인 수준을 기본으로 하고 실제 필요가 생길 때만 넓히세요.
접근 제어자는 encapsulation을 원칙에서 컴파일러가 검사하는 강제 규칙으로 바꾸는 구체적인 도구입니다.
작은 public 표면적은 내부에 의존할 수 있는 코드가 적다는 뜻이므로, 호출자를 깨뜨리지 않고 자유롭게 리팩터링할 수 있습니다.