[열혈 C++] Chap04: 클래스의 완성1 (좋은 클래스 특: 정보은닉, 캡슐화)
1. 정보은닉(Info Hiding)
-
메인함수나 다른 클래스에서 객체를 생성하여 사용할 때,
변경되어서는 안되는 변수를 보호하기 위함이다. -
제한된 방법으로의 접근만 허용을 해서 잘못된 값이 저장되지 않도록,
실수 했을 때 쉽게 발견될 수 있도록 할 수 있다. -
예시
//Point.h class Point{ private: int x; int y; public: bool Init(int xpos, int ypos); int GetX(); int GetY(); bool SetX(int xpos); bool SetY(int ypos); };
//Point.cpp bool Point::Init(int xpos, int ypos){ if(xpos<0 || ypos<0){ cout << "error" << endl; return false; } x = xpos; y = ypos; return true; } int Point::GetX() const{ return x; } int Point::GetY() const{ return y; } bool Point::SetX(int xpos){ //대충 코드 } //대충 다른 함수...
-
즉, 위 코드처럼 멤버변수를
private
으로 선언하고, 해당 변수에 접근하는 함수인 엑세스 함수를 별도로 정의해서, 안전한 형태로 멤버 변수의 접근을 유도하는 것! -
엑세스 함수:
Init()
,GetX()
,GetY()
등 멤버 변수에 접근하기 위한 함수
-
✏️const
-
const 선언된 함수: “이 함수 내에서는 멤버변수에 저장된 값을 변경하지 않겠다”는 뜻이다.
자신의 의도와 다르게 멤버변수 값을 변경했을 때, 컴파일에러로 확인할 수 있다. -
const가 선언된 함수 내에서는 const가 선언된 함수만 호출이 가능하다.
-
const 참조자를 이용하는 함수에선 const가 선언된 함수만 호출이 가능하다.
2. 캡슐화(Encapsulation)
-
하나의 목적을 이루기 위해 둘 이상의 기능을 모아놓는 것.
-
잘 쓰면 프로그램이 효율적이고, 잘못하면 프로그램 복잡도가 높아진다.
-
어려운 이유는, 범위를 결정하기 어렵기 때문이다.
-
정보은닉은 캡슐화에 기본적으로 포함된다.
(감싸려면 안전하게 감싸야 하니까!)