본문 바로가기

Programming/C++

[C++]정보은닉과 캡슐화

 

 

객체 지향 프로그래밍 언어를 다룬다면 정보은닉과 캡슐화는 어느정도 숙지하고 있어야된다고 생각한다.

일단 두 내용을 알기위해서는 선행적으로 클래스 알고있어야 내용을 이해할수가 있다.

 

먼저 정보은닉(Infomation Hiding)은 쉽게 "클래스 외부에서 멤버 변수에게 직접적으로 접근하는 것이 아닌  멤버 변수에게 접근하는 함수를 별도로 정의해서 접근하는 방식이다"

 

정보은닉이 필요한 이유는 변수에 접근할때 안전하게 접근하기 위해서 사용한다.

간단한 예를 하나 들어보면

 

예시) 클래스에 멤버 변수 x가 존재하고 해당 멤버 변수 x는 1~10까지 정수만 받아와야 하는 경우

 

정보은닉을 사용하지 않고 클래스에 멤버 변수에 사용자가 접근하게되면 해당하는 정수 이외에 값도 넣을수 있는 경우가 생긴다.

정보은닉은 이러한 경우를 미리 방지하기 위해 멤버 변수를 Private로 선언(C++에서 클래스 멤버 변수에 기본 상태)하고 함수를 별도로 정의해서 예외처리를 미리 해두어서 안정성을 높히기 위해서 사용한다.

 

해시넷에서는 정보은닉의 목적을 아래와 같이 설명해두었다.

 

1. 기능의 교체나 변경에 대한 유연성을 제공하는 것이다. 코드가 타입이나 메소드, 구현등에 의존하는 것을 막아줌으로써 객체 간의 구체적인 결합도를 약화시킨다. 결합도가 약화되면 기능을 변경하거나 다른 기능으로 교체하는게 쉬워진다. 
2. 동일한 타입의 다른 구현 객체들을 교체함으로써 동적 기능 변경이 가능하다. 
3. 연동할 구체적인 구현이 없는 상태 즉, 인터페이스만으로도 정확한 연동 코드의 생성이 가능하다.

4. 코드를 적절히 모듈화하여 주어진 코드의 일부를 이해하기 위해 필요한 정보의 양이 적기 때문에 코드를 이해하기가 더 쉽다. 5. 상호 교환이 필요한 정보의 양을 최소화하면서 독자적으로 각 모듈에 대한 작업을 진행할 수 있기에 개발 기간을 단축시킬 수 있다.

 


캡슐화(Encapusulation)는 간략하게 설명하면 "서로 연관이 있는 변수와 함수를 묶어서 클래스로 만든것"이다.캡슐화에 또 다른 역할이 "실제 구현한 내용 일부를 외부에 감추어 은닉한다" 라는 부분이 있다.

캡슐화 두번째 설명된 부분만 보면 정보은닉과 헷갈리기 쉬운 부분이 있다.

 

기본적으로 둘의 개념은 완전 다르지만 캡슐화는 정보은닉이 기본적으로 포함되는 형태라고 알고있으면 될것같다.