객체지향 패러다임으로의 전환을 위한 두 가지

  1. 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라
  2. 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 봐야 한다.

도메인의 구조를 따르는 프로그램 구조

Untitled

클래스를 만들 때 인스턴스 변수의 가시성은 private이고 메서드의 가시성은 public이라는 것을 알 수 있다. 외부에서는 객체의 속성에 직접 접근할수 없도록 막고 적절한 public 메서드를 통해서만 내부 상태를 변경하는 것이다. 그 이유는 경계의 명확성이 객체의 자율성을 보장하고 프로그래머의 구현의 자유를 제공하기 때문이다.

자율적인 객체

  1. 객체가 상태와 행동을 함께 가지는 복합적인 존재
  2. 객체가 스스로 판단하고 행동하는 자율적인 존재

객체지향을 위해 단위 안에 데이터와 기능을 함께 묶는 것을 캡슐화 라고 한다. 더 나아가 외부에서의 접근을 통제할 수 있는 접근제어 매커니즘도 함께 제공한다. 접근제어를 위해 public, protected, private 과 같은 접근 수정자를 제공한다.

캡슐화와 접근 제어는 객체를 두 부분으로 나눈다. 하나는 외부에서 접근 가능한 부분으로 이를 퍼블릭 인터페이스 라고 부른다. 다른 하나는 외부에서는 접근 불가능 하고 오직 내부에서만 접근 가능한 부분으로 이를 구현 이라고 부른다.

프로그래머의 자유

프로그래머의 역할은 클래스 작성자클라이언트 프로그래머로 나뉜다.

클래스 작성자는 새로운 데이터 타입을 프로그램에 추가하고, 클라이언트 프로그래머는 클래스 작성자가 추가한 데이터 타입을 이용한다. 클래스 작성자는 클라이언트 프로그래머에게 필요한 부분만 공개하고 나머지는 꽁꽁 숨긴다. 이를 구현 은닉 이라고 한다.