단일 접근 원칙 (Uniform Access Principle)
Source
Evernote/Advanced View Required/단일 접근 원칙(Uniform Access Principle)을 통한 캡슐화 - (下)完.md
Summary
단일 접근 원칙은 Bertrand Meyer가 제안한 설계 원칙으로, 객체의 특징(속성 또는 함수)에 접근할 때 구현 방식(저장된 값 vs 계산된 값)에 관계없이 동일한 표기법을 사용해야 한다는 것이다. 이를 통해 정보 은닉과 캡슐화를 유지하면서도 클라이언트 코드의 가독성을 높일 수 있다. Java는 public 속성 노출 시 읽기/쓰기 제어가 불가능하여 캡슐화 위반이 발생하거나 Getter/Setter 사용 시 코드가 복잡해지는 문제가 있다. 반면 C#은 ‘프로퍼티(Property)‘를 통해, Ruby는 메타프로그래밍(attr_reader 등)과 함수 호출 괄호 생략 기능을 통해 언어 차원에서 단일 접근 원칙을 지원한다. 특히 Ruby는 모든 인스턴스 변수를 private으로 강제하며, 구현 변경 시 클라이언트 코드의 수정 없이 내부 로직만 변경하면 되므로 진정한 단일 접근 원칙을 잘 구현하고 있다.
Key Points
- 정의: 모듈의 서비스(속성/함수)는 단일 표기법으로 접근 가능해야 하며, 구현 방식(저장/계산)을 누설하지 않아야 한다.
- Java의 한계: public 속성은 캡슐화 위반, Getter/Setter는 코드 복잡도 증가 및 인지 과부하 유발.
- C#의 해결책: 프로퍼티(Property)를 사용하여 직관적인 속성 접근 문법과 내부 캡슐화(Setter 제한 등)를 동시에 지원.
- Ruby의 해결책: 인스턴스 변수의 private 강제, 함수 호출 시 () 생략 허용, 메타프로그래밍을 통한 자동 Getter/Setter 생성으로 언어 차원의 완벽한 지원.
- 장점: 구현 방식(저장된 값 ↔ 계산된 값) 변경 시 클라이언트 코드의 수정 없이 내부 구현만 변경하면 되므로 유지보수성 향상.