Class
협력, 객체, 클래스
- 클래스를 고민하는게 능사가 아니다. 애초에 무엇을 만들기 위해서 클래스를 만드는 것은 객체지향이 지향하는 바와는 거리가 멀다.
- 할 일을 정의하고 이에 필요한 데이터 구조를 정의하고 만들 클래스를 정한다.
- 클래스는 공통적인 행동과 상태를 공유하는 객체를 추상화하는 과정이다.
- 객체는 독립적 존재가 아니라 기능 구현을 위한 서로가 서로를 위한 협력하는 공동체의 일원으로 생각해야 한다.
도메인
- 문제를 해결하기 위해서 프로그램을 사용하는 분야를 도메인이라고 한다.
- 도메인을 지정하고 용어를 지정하고 각 객체 간의 상호작용으로 현실의 문제를 풀어나가는 모습은 객체지향과 궤를 같이 한다.
구현
- 클래스를 사용해서 문제를 해결할 때 중요한 것은 클래스의 경계를 구분 짓는 것이다.
- 그래야 어떤 역할로, 어떤 모습으로 협업할지를 그려낼 수 있다.
- 경계를 구분 짓는 가장 좋은 방법은 어떤 부분을 외부에 공개하고 어떤 부분을 감출지 결정하는 것이다.
- 경계를 명확하게 하는 것은 개념적으로 가두는 것일 수도 있으나 오히려 명확하게 객체의 역할과 한계를 정해서 자율성을 보장하는 길이다
자율성
- 객체가 상태와 행동을 함께 가지는 복합적인 존재이며, 객체가 스스로 판단하고 행동하고 자율적인 존재하는 사실이 중요하다.
- 위와 같은 것을 ‘캡슐화’라고 한다.
- 자율적인 존재가 되기 위해서 접근을 통제하고 이 경계를 바탕으로 협업을 한다.
- 협업이란 시스템의 어떤 기능을 구현하기 위해서 객체들 사이에 이뤄지는 상호작용을 협력이라고 한다.
협력
- 객체는 다른 인터페이스에 공개된 행동을 수행하도록 ‘요청’할 수 있다.
- 요청을 받은 객체는 자율적인 방법에 따라 요청을 처리하고 응답한다.
- 이와 같이 객체가 다른 객체와 상호작용하는 것을 ‘메시지를 전송’한다고 한다.
- 요청이 도착하는 ‘수신자’ 객체는 메시지를 수신한다고 한다. 수신된 메시지를 처리하기 위한 자신만의 방법을 메소드라고 한다.
다형성
- 다형성은 이 메시지를 수신하고 처리하면 된다는 아이디어를 바탕으로 상속 등으로 이를 처리한다.
- 이 기반에서는 추상화라는 개념이 있다.