조영호님의 [객체지향의 사실과 오해] 읽고 정리한 내용

상황


객체지향의 본질

객체

상태

현재를 기반으로 객체의 행동 방식을 이해할 수 있다.

행동

외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다.

식별자

어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티다.

추상화

개념

슈퍼타입과 서브타입

어떤 타입을 다른 타입의 서브타입이라고 말할 수 있으려면 다른 타입을 대체할 수 있어야 한다.

역할, 책임, 협력

역할

협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식이다.

역할을 이용해 협력을 추상화했기 때문에 역할을 수행할 수 있는 어떤 객체라도 협력에 참여할 수 있다.

책임

책임은 객체에 의해 정의되는 응집도 있는 행위의 집합으로, 객체가 알아야 하는 정보와 객체가 수행할 수 있는 행위에 대해 개략적으로 서술한 문장이다. 즉, 객체의 책임은 ‘객체가 무엇을 알고있는가’와 ‘무엇을 할 수 있는가’로 구성된다.

협력

협력은 시스템의 큰 목표를 달성하기 위해 하는 행위로, 한 객체가 다른 객체에게 도움을 요청할 때 시작된다. 자신에게 할당된 일을 처리하던 중에 스스로 해결하기 어려운 문제에 부딪히게 되면 문제를 해결하는 데 도움 받을 수 있는 다른 객체에게 도움을 요청하게 된다.

메시지, 메서드, 다형성

메시지

메시지는 객체들이 서로 협력하기 위해 사용할 수 있는 유일한 의사소통 수단이다.

메서드

메서드는 메시지를 처리하기 위해 객체가 내부적으로 선택하는 방법이다.

다형성

다형성은 서로 다른 타입에 속하는 객체들이 동일한 메시지를 수신할 경우 서로 다른 메서드를 이용해 메시지를 처리할 수 있는 매커니즘을 가리킨다.

객체지향 설계 기법

책임-주도 설계

책임 주도 설계에서는 시스템의 책임을 객체의 책임으로 변환하고 객체의 책임과 상호작용에 집중한다. 결과적으로 시스템은 스스로 자신을 책임질 수 있을 정도로 충분히 자율적인 동시에 충분히 협조적인 객체들로 생태계를 구성한다.

디자인 패턴

디자인 패턴은 전문가들이 반복적으로 사용하는 해결 방법을 정의해 놓은 설계 템플릿의 모임이다. 특정 문제를 해결하기 위해 이미 식별해 놓은 역할, 책임, 협력의 모임이다.

테스트-주도 개발

테스트-주도 개발은 책임-주도 설계를 통해 도달해야 하는 목적지를 테스트라는 안전장치를 통해 좀 더 빠르고 견고한 방법으로 도달할 수 있도록 해주는 최상의 설계 프랙티스다.

도메인 모델