객체의 구성 : 데이터 + 데이터를 조작하는 프로시저(오퍼레이션, 메서드, 함수)
객체를 정의할 때 사용되는 것은 객체가 제공해야 할 기능이며, 객체가 내부적으로 어떤 데이터를 갖고 있는 지로는 정의되지 않는다.
예를 들어, 소리 크기 제어 객체가 있다고 하고, 이 객체가 제공하는 기능은 다음과 같다.
이 객체가 내부적으로 소리 크기를 어떤 데이터 타입 값으로 보관하는지는 중요 X
실제로 객체가 어떻게 소리 크기를 증가/감소 시키는지 알 수 X
단지 세 가지의 기능을 제공한다는 것이 중요하다.
객체는 객체가 제공하는 기능으로 정의된다고 했는데, 객체가 제공하는 기능을 보통 '오퍼레이션'이라고 한다. 객체가 제공하는 모든 오퍼레이션 집합을 객체의 '인터페이스'라고 부르며, 서로 다른 인터페이스를 구분할 때 사용되는 명칭이 바로 타입(type)이다. 인터페이스는 객체를 사용하기 위한 일종의 명세나 규칙이라고 생각하면 된다.
인터페이스는 명세서일 뿐, 실제 객체의 구현을 정의하는 것은 클래스(class)이다.
아니 근데 좀 이상한게
오퍼레이션 : 객체가 제공하는 기능
인터페이스 : 객체가 제공하는 모든 오퍼레이션 집합
이렇게 되면
인터페이스 : 객체가 제공하는 모든 (객체가 제공하는 기능) 집합
이게 머선말29...;;
객체는 각각의 책임을 갖는다. 예를들면 파일 읽기 객체는 파일에서 데이터를 읽어와 제공하는 책임을 갖는다던지 하는..
이 객체가 갖는 책임을 결정하는 것이 바로 객체 지향 설계의 출발점이다.
객체를 어떻게 구성하느냐에 규칙같은게 있는 건 아니지만 단 하나의 확실한 규칙이 존재하는데, 그 규칙은 바로
객체가 갖는 책임의 크기는 작을수록 좋다.
= 객체가 제공하는 기능의 개수가 적을수록 좋다.
는 것이다.
왜냐, 한 객체에 기능이 많아지면 절차 지향적인 구조를 갖게 되어버린다..또륵
그리하여 객체의 크기와 관련된 원칙이 있다. 그것은 바로
단일 책임 원칙 : 객체는 단 하나의 책임만을 가져야 한다.