지난번 살펴본대로 객체지향 초기 캡슐화의 핵심 아이디어는 결합도 감소입니다.
하지만 현실에선 이전과 같은 문제가 발생하는 경우가 많았습니다.
SIMULA67의 한계는 바로 객체 내부 변수에 대한 직접 접근을 프로그램적으로 제한하지 않았다는 것입니다.
SIMULAR67는 관례적인 규칙 (_varname와 같은 변수 네이밍)에 의존했습니다.
절차지향적 프로그래밍에 익숙해져있던 개발자들은 메소드를 통한 간접 접근이 아닌 변수에 직접 접근하는 경우가 많았습니다.
1972년 데이비드 파나스는 다음과 같이 주장하며 정보은닉 개념 이론을 주장했습니다.
"모듈은 자신의 내부 구현을 완전히 숨겨야 하며, 오직 인터페이스만 노출해야 한다."
출처: "On the Criteria to Be Used in Decomposing Systems into Modules" (1972).
이 후 SIMULAR67의 영감을 받아 만들어진 여러 객체지향 언어들에서 정보은닉을 지원하기 시작했습니다.
Getter/Setter가 처음 등장했습니다.
Smaltalk은 모든 변수는 기본적으로 은닉되며 accesser를 통해 접근하도록 하였습니다.
C++와 JAVA는 private 접근제어자를 도입하였습니다.
"On the Criteria to Be Used in Decomposing Systems into Modules" (1972).