왜 객체지향 프로그래밍은 실세계를 모방하기 이해하기 위해 만들어졌다고 설명하는가? 이해도 안되고, 괴리감이 드는데.. 그 이유는 역할
책임
협력
을 설명하기 위함이지 않을까?
손님 : 캐시어에게 커피를 주문하는 역할.
캐시어 : 손님에게 커피를 주문받고 바리스타에게 주문내역을 전달하는 역할.
바리스타 -> 캐시어에게 받은 커피 주문서로 커피를 제조하고, 다시 캐시어에게 전달하는 역할.
이는 요청과 응답으로 표현하자면
손님 -> 캐시어 -> 바리스타 -> 캐시어 -> 손님이 될 것이다.
이처럼 바리스타, 손님, 캐시어 간의 협력은 요청과 응답 (메세지) 으로 인해 발생된다.
이때 각자의 역할이 중요한데, 역할을 가진다는 것은, 책임이 부여되는 것과도 같다.
ex) 경찰관 = 범인을 잡을 책임 , 소방관 = 불을 끌 책임
- 여러 사람이 동일한 역할을 수행할 수 있다.
- 역할은 대체 가능성을 의미한다.
- 책임을 수행하는 방법은 자율적으로 선택할 수 있다.
- 한 사람이 동시에 여러 역할을 수행할 수 있다.
객체 지향에서 객체가 결국 주체가 되는 이유는, 서로간의 협력을 하기 위한 주체가 객체이기 때문이다.
단, 주체가 만일 전지전능한 기능으로 협력에 참여하지 않는다면, 내부복잡도로 자멸해버리고 말 것이다.
서로간의 메세지로 각자의 역할을 적절하게 위임받으며 협력하는 것이 좋은 사회, 즉 좋은 애플리케이션이 탄생하게 되는 것이다.
객체가 누군가에게 지배받지 않고, 자율적으로 행동하기 위해서 상태와 행동을 지닌다.
객체의 자율성은 객체의 내부와 외부를 명확하게 구분하는 것으로 나온다.
외부에선 객체가 무슨일을 하는지(what) 은 알고 있지만, 어떻게 (how) 하는지는 알 수 없다.
커피도 각자 무슨일을 하는지는 알고있지만 각 객체가 어떻게 처리하는지는 전혀 알 필요도 없고 자율적으로 행할수가 있다. 따라서 객체는 상태와 행위를 하나의 단위로 묶는 자율적인 존재이다.
- 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
- 자율적인 객체란 상태와 행위를 함께 지니며 스스로자기 자신을 책임지는 객체를 의미한다.
- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
- 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다.
객체지향은 객체를 지향하는 것이지, 클래스를 지향하는것이 아니라는것에 명심하자!