모듈을 분리하는 가장 중요한 기준?
⇒ 드러내지 않아야 할 비밀을 얼마나 잘 숨기느냐에 있다.
클래스는 본래 정보를 숨기는 용도로 설계 되었다.
클래스는 연결 관계를 숨기는 데도 유용하다
위임 숨기기(7.7장)
→ 하지만, 너무 많이 숨기면 인터페이스가 비대해진다.
⇒ 중개자 제거하기(7.8장)을 이용할 수 있다.
가장 큰 캡슐화 단위는 클래스와 모듈이지만 함수도 구현을 캡슐화 한다.
→ 알고리즘을 통째로 바꿔야 할 떄가 있는데, 함수 추출하기(6.1장)로 알고리즘 전체를 함수 하나에 담은 뒤 알고리즘 교체하기(7.9장) 에 적용하면 된다.
대부분의 프로그래밍 언어는 데이터 레코드는 표현하는 구조를 제공한다.
→ 직관적인 방식으로 묶으면 각각을 취급할 때보다 의미있는 단위로 전달한다.
단순한 레코드의 단점
→ 값을 명확히 구분해야 하는 점이 번거롭다.
⇒ 객체를 사용하면 어떻게 저장했는지 숨긴 채 각 메서드로 제공가능하다.
레코드 두가지 구조
필드 이름을 노출하는 형태
원하는 이름을 쓸 수 있는 형태
→ 주로 라이브러리에서 해쉬, 맵, 해쉬맵, 딕셔너리, 연관 배열로 제공한다.