Encapsulation
- Class와 Struct 모두 encapsulation을 위한 도구이다. 내가 이해한 캡슐화는 다음과 같다.
1) 유사한 기능이나 변수를 한 집합으로 하여 더 관리하기 쉽게하고 코드를 명확히 함.
2) 외부에서 멤버를 엑세스하는 방법을 지정할 수 있도록, 직접 접근을 막거나 접근 전 부가적인 처리를 요구함.
3) 정보를 외부에 은닉하여 외부에서는 해당 집합의 세부 내용에 집중하지 않도록 함
- encapsulation(캡슐화)와 3번의 information Hiding(정보 은닉)의 특성은 캡슐화로 정보 은닉을 실현 시킬 수 있어 같은 것이라고 생각하기 좋으나 그 개념 자체는 다른 것이다. 한마디로 위의 캡슐화 특성 중 2번과 3번이 같지 않다.
- 2번은 접근 제한에 중심을 둔 것이다. 외부에서 해당 객체의 내부 데이터를 마음대로 접근 할 수 없도록 제한하고, get/ set 과 같은 함수를 통해 입력을 처리 후 데이터에 접근하는 등 내부 데이터의 보호에 중심을 둔다.
- 반면 3번 은닉성은 객체 내부를 외부에 은닉에 중심을 둔다. 외부에서 객체 내부에 신경쓰지 않게 해준다. 예를 들어 '고양이가 사과를 먹는다.'를 설계할 때, 설계자는 고양이/ 사과 / 먹다에 집중만 하면 되지 사과의 성분 변수라던가, 사과를 먹음에 따른 고양이의 변화에는 신경쓰지 않을 수 있는 것이다.