정보 은닉(Data Hiding)은 말그대로 정보를 숨긴다는 의미입니다.
자동차의 타이어를 만드는 공장에서 핸들이 어떤 기술을 사용해서 만들어지는지 몰라도 된다는 것입니다.
객체로 말하면 다른 객체가 어떻게 구현되었는지 몰라도 된다는 것
좀 더 능동적으로 보자면 다른 객체의 내부 구현을 몰라도 된다는 것에 그치는것이 아니라. 다른 객체의 내부 구현을 반드시 몰라야 한다고 강요하는것입니다. 그래서 정보 무관심이 아니라 정보 은닉 이라고 합니다.
객체 A는 내부적인 사정으로 인해서 객체 B에게 본래 100바이트를 넘겨주는것이 약속이었지만 108바이트를 넘겨 주고 있었다.
객체 B는 객체 A에 대해서 여분의 8바이트가 더 오는것을 확인하고 계속해서 108바이트를 사용했다.
객체 A는 소스 코드를 수정하여 다시 100바이트를 넘겨 주었다.
객체 B는 여분의 8바이트가 사라져버려서 문제를 일으키게 된다.
이것이 바로 정보 은닉의 필요성입니다. 객체 B가 객체 A에대해 약속한 범위를 넘어서 버리는 오히려 아는것이 더 많아서 다쳐버렸습니다.
결국 정보 은닉은 서로 약속되어 있는 부분이 아니라면 보여주지도 말고 보지도 말자 라는 것입니다.
캡슐화(Encapsulation)은 텔레비젼 속에는 많은 전기 장치들이 들어있지만 케이스로 둘러 쌓여있어 보이지 않습니다.
보이는 것은 화면과 단추 뿐입니다. (여기서 화면과 단추는 텔레비전과 사용자간의 약속입니다.)
이렇게 약속된 부분을 제외한 나머지 부분을 감싸서 숨겨버리는 것을 캡슐화라고 합니다.
캡슐화를 사용해서 정보 은닉을 달성할수 있고. 객체간에 약속한 부분만이 드러나고 나머지 부분은 캡슐로 감싸서 다른 객체가 볼 수 없게 만드는 것입니다.
하지만 C++에서는 정보 은닉이나 캡슐화에 1:1로 매치되는 기능은 가지고 있지 않습니다.
하지만 클래스에 멤버 변수나 함수를 정의하면서 그 멤버를 외부에 보이게 할지 여부를 지정할 수 있습니다.
다른 객체와 약속된 부분이라면 외부에 보이게 저장하고, 아니라면 외부에 보이지 않게 지정하면 됩니다.
이렇게 함으로써 정보 은닉이나 캡슐화가 지향하는 목표를 상당부분 달성 할 수 있습니다.
'C++' 카테고리의 다른 글
이클립스 C++ 환경 구축 (0) | 2013.10.05 |
---|---|
상속과 다형성 (0) | 2013.09.27 |
표준 라이브러리 헤더파일과 만든 헤더파일의 차이.. (0) | 2013.08.31 |
클래스와 객체..? (0) | 2013.08.31 |
#ifdef 와 #ifndef의 기능 (#define.... #endif) (0) | 2013.08.31 |