- 책임

객체지향 공동체를 구성하는 기본 단위는 '자율적'인 객체다.

자율적인 객체는 '어떻게(how)' 해야 하는가가 아니라 '무엇(what)'을 해야 하는지에 더 초점을 두고 있다.

무엇을 해야하는지 정해지면 그 책임, 행동을 수행하기 위한 방법은 객체의 자율성에 맡긴다.

 

객체지향 공동체에 거주하는 객체는 다른 요청을 수신할 때(메세지를 받았을 때)만 어떤 행동을 시작한다.

즉 행동을 수행하게 만드는 유일한 방법은 메세지이다.

 

- 메세지와 메서드

보통 메세지는 수신자와 메세지 이름, 인자(추가정보)의 조합으로 구성된다.

이러한 메세지를 처리하기 위해 내부적으로 선택하는 방법을 메서드라고 한다.

(Java의 메서드를 연관시켜 생각해보면, 메서드의 선언부와 구현부를 의미한다고 보면 될 것 같다.

선언부를 통해 '무엇(what)'이 실행되는지 알 수 있고 구현부를 통해 '어떻게(how)' 행동을 수행하는지 알 수 있다)

 

- 다형성

다형성은 동일한 메세지에 대해 서로 다르게 반응하는 것을 의미한다.

즉, 같은 요청에 대해 처리하는 방법이 다르다는 것이다. 그러나 구체적인 방법만 다를 뿐 결과는 동일하다.

메세지 송신자의 입장에서는 수신자가 달라지더라도 동일한 책임을 수행하고 있다면 이 수신자들을 구별할 필요가 없다.

이는 객체들 간에 대체 가능성을 의미한다. 동일한 책임을 수행할 수 있다면 다른 객체로 변경이 가능하다.

 

다형성은 수신자의 종류를 캡슐화하여 어떤 객체와도 협력할 수 있는 유연하고 확장 가능한 구조를 만들 수 있게 한다.

 

 

- 객체지향의 핵심, 메시지

좋은 객체지향 설계는 객체들간의 메세지 송수신을 중심으로 객체 사이의 협력 관계를 구성하는 것이다.

어떤 메세지가 필요한지 결정하고, 메세지를 결정한 후에는 메세지를 수신하기에 적합한 객체를 선택한다.

 

 

- 인터페이스

인터페이스란 어떤 두 사물이 마주치는 경계 지점에서 서로 상호작용할 수 있게 이어주는 방법이나 장치를 의미한다.

 

인터페이스의 세가지 특징)

1. 인터페이스의 사용법만 알고 있으면 대상의 내부 구조나 동작 방법을 몰라도 상호작용이 가능하다.

2. 인터페이스가 변경되지 않고 단순히 내부 구성이나 작동 방식만을 변경하는 것은 인터페이스 사용자에게 어떤 영향도 미치지 않는다.

3. 대상이 변경되더라도 동일한 인터페이스를 제공하기만 하면 아무런 문제 없이 상호작용 할 수 있다.

 

객체의 인터페이스는 객체가 수신할 수 있는 메세지의 목록으로 구성된다(외부에 공개됨).

그리고 메세지를 수신했을 때 책임을 수행하는 방법(구현)은 메서드를 의미한다(내부에 감춰짐. 캡슐화).

메세지와 메서드의 구분은 다형성을 통해 다양한 타입의 객체를 수용할 수 있는 유연성을 부과한다.

 

객체 설계의 핵심은 객체를 외부에 공개되는 인터페이스와 내부에 감춰지는 구현으로 분할해 설계하는 것이다.

 

이렇게 설계함으로써 인터페이스를 구현하고 있는 다양한 객체들과 협력할 수 있고(대체 가능성)

책임을 수행하는 내부적인 방법(구현)이 변경되더라도 외부에 영향을 미치지 않는다.

+ Recent posts