클래스의 내부와 외부를 구분해야 하는 이유
1. 경계의 명확성이 객체의 자율성을 보장하기 때문이다.
- 객체가 자율적인 존재로 우뚝 서기 위해서 외부의 간섭을 최소화해야 한다. 일반적으로 객체의 상태는 숨기고 행동만 외부에 공개해야 한다. 외부에서는 객체가 어떤 상태에 놓여 있는지, 어떤 생각을 하고 있는지 알아서는 안 되며, 결정에 직접적으로 개입하려고 해서도 안 된다. 객체에게 원하는 것을 요청하고는 객체가 스스로 최선의 방법을 결정할 수 있을 것이라는 점을 믿고 기다려야 한다.
- 캡슐화와 접근 제어는 객체를 두 부분으로 나눈다. 하나는 외부에서 접근 가능한 부분으로 이를 퍼블릭 인터페이스라 부른다. 다른 하나는 외부에서 접근 불가능하고 오직 내부에서 접근 가능한 부분으로 이를 구현이라 부른다.
2. 프로그래머에게 구현의 자유를 제공하기 때문이다.
- 객체의 외부와 내부를 구분하면 클라이언트 프로그래머가 알아야 할 지식의 양이 줄어들고 클래스 작성자가 자유롭게 구현을 변경할 수 있는 폭이 넓어진다.
- 프로그래머의 역할을 클래스 작성자와 클라이언트 프로그래머로 구분하는 것이 유용하다. 클래스 작성자는 새로운 데이터 타입을 프로그램에 추가한다. 클라이언트 프로그래머는 클래스가 작성자가 추가한 데이터 타입을 사용한다.
- 클라이언트 프로그래머의 목표는 필요한 클래스들을 엮어서 애플리케이션을 빠르고 안정적으로 구축하는 것이다. 클래스 작성자는 프로그래머에게 필요한 부분만 공개하고 나머지는 꽁꽁 숨겨야 한다. 클라이언트 프로그래머가 숨겨 놓은 부분에 마음대로 접근할 수 없도록 방지함으로써 클라이언트 프로그래머에 대한 영향을 걱정하지 않고도 내부 구현을 마음대로 변경할 수 있다. 이를 구현 은닉이라 부른다.
참고
- 책 <오브젝트, 코드로 이해하는 객체지향 설계>
'프로그래밍-학습기록 > 객체 지향 프로그래밍' 카테고리의 다른 글
<오브젝트>에서 말하는 '객체지향, 왜 필요한가?' (0) | 2021.02.04 |
---|---|
주요 디자인 패턴 (0) | 2021.01.15 |
DI(Dependency Injection)와 서비스 로케이터 (0) | 2021.01.14 |
SOLID 설계 원칙 (0) | 2021.01.11 |
재사용, 상속보다는 조립으로 (0) | 2021.01.07 |