좋은 클래스가 되기 위한 조건으로는 ‘정보은닉’과 ‘캡슐화’가 있다. 이는 최소한의 조건이다.

정보은닉의 이해

정보 은닉의 목적
- 코드가 구체적인 것들(타입, 메소드, 구현)에 의존하는 것을 막아줌으로써 객체 간의 구체적인 결합도를 약화시켜 기능의 교체나 변경이 쉽도록 함.
- 동일한 타입의 다른 구현 객체들을 교체함으로써 동적 기능 변경이 가능함.
- 연동할 구체적인 구현이 없는 상태에서도 (인터페이스 만으로) 정확한 연동 코드의 생성이 가능함.

출처:

https://effectiveprogramming.tistory.com/entry/객체지향-정보-은닉information-hiding에-대한-올바른-이해

[Effective Programming:티스토리]

Point 클래스의 멤버변수가 public으로 선언되었을 떄 발생할 수 있는 문제점을 보이고 있다.

이는 “프로그래머의 실수에 대한 대책이 하나도 준비되어 있지 않다!”

제한된 방법으로의 접근만 허용을 해서 잘못된 값이 저장되지 않도록 도와야 하고, 또 실수를 했을 때, 실수가 쉽게 발견되도록 해야 한다.

“멤버변수를 private으로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의해서, 안전한 형태로 멤버 변수의 접근을 유도하는 것이 바로 ‘정보은닉’이며, 이는 좋은 클래스가 되기 위한 기본조건이 된다!”

getter 와 setter 액세스 함수 (access function) 을 사용해 맴버 변수를 접근, 이들 함수는 호출되지 않는 경우도 많다.

“그럼 호출되지 않을 함수를 왜 정의하나요?”

필요할 수 있다고 생각해서 정의되는 함수들도 많다.

const 함수

int GetX() const;
int GetY() const;
void ShowRecInfo() const;

이 const 는 다음 내용을 선언하는 것 이다.

“이 함수 내에서는 맴버변수에 저장된 값을 변경하지 않겠다!”

public:
	void InitNum(int n)
		...
	int GetNum()
	void ShowNum() const
	{
		cout<<GetNUm()<<endl; //컴파일 애러 발생
	}

“const 함수 내에서는 const가 아닌 함수의 호출이 제한된다!”

이는 값을 변경하지 않는 함수더라도 허용하지 않는다.