on
조영호님의 [객체지향의 사실과 오해] 읽고 정리한 내용
상황
- 객체지향의 사실과 오해 조영호님의 책을 읽고 정리한 내용입니다.
객체지향의 본질
-
객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
-
객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
객체
- 하나의 개별적인 실체로 식별 가능한 물리적인 또는 개념적인 사물은 어떤 것이라도 객체가 될 수 있다. 즉, 상태, 행동, 식별자를 지닌다.
상태
현재를 기반으로 객체의 행동 방식을 이해할 수 있다.
행동
외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다.
식별자
어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티다.
추상화
- 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다.
개념
-
추상화된 공통점을 기반으로 객체들을 묶기 위한 그릇을 개념이라고 한다.
-
개념을 이용해 공통점을 가진 객체들을 분류할 수 있다.
슈퍼타입과 서브타입
- 일반적인 타입을 슈퍼타입(Supertype)이라고 하고 좀 더 특수한 타입을 서브타입(Subtype)이라고 한다.
객체지향 개발 5대 원리 SOLID 중 LSP (리스코브 치환의 원칙: The Liskov Substitution Principle)
어떤 타입을 다른 타입의 서브타입이라고 말할 수 있으려면 다른 타입을 대체할 수 있어야 한다.
역할, 책임, 협력
역할
협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식이다.
역할을 이용해 협력을 추상화했기 때문에 역할을 수행할 수 있는 어떤 객체라도 협력에 참여할 수 있다.
책임
책임은 객체에 의해 정의되는 응집도 있는 행위의 집합으로, 객체가 알아야 하는 정보와 객체가 수행할 수 있는 행위에 대해 개략적으로 서술한 문장이다. 즉, 객체의 책임은 ‘객체가 무엇을 알고있는가’와 ‘무엇을 할 수 있는가’로 구성된다.
협력
협력은 시스템의 큰 목표를 달성하기 위해 하는 행위로, 한 객체가 다른 객체에게 도움을 요청할 때 시작된다. 자신에게 할당된 일을 처리하던 중에 스스로 해결하기 어려운 문제에 부딪히게 되면 문제를 해결하는 데 도움 받을 수 있는 다른 객체에게 도움을 요청하게 된다.
메시지, 메서드, 다형성
메시지
메시지는 객체들이 서로 협력하기 위해 사용할 수 있는 유일한 의사소통 수단이다.
메서드
메서드는 메시지를 처리하기 위해 객체가 내부적으로 선택하는 방법이다.
다형성
다형성은 서로 다른 타입에 속하는 객체들이 동일한 메시지를 수신할 경우 서로 다른 메서드를 이용해 메시지를 처리할 수 있는 매커니즘을 가리킨다.
객체지향 설계 기법
책임-주도 설계
책임 주도 설계에서는 시스템의 책임을 객체의 책임으로 변환하고 객체의 책임과 상호작용에 집중한다. 결과적으로 시스템은 스스로 자신을 책임질 수 있을 정도로 충분히 자율적인 동시에 충분히 협조적인 객체들로 생태계를 구성한다.
디자인 패턴
디자인 패턴은 전문가들이 반복적으로 사용하는 해결 방법을 정의해 놓은 설계 템플릿의 모임이다. 특정 문제를 해결하기 위해 이미 식별해 놓은 역할, 책임, 협력의 모임이다.
테스트-주도 개발
테스트-주도 개발은 책임-주도 설계를 통해 도달해야 하는 목적지를 테스트라는 안전장치를 통해 좀 더 빠르고 견고한 방법으로 도달할 수 있도록 해주는 최상의 설계 프랙티스다.
도메인 모델
-
도메인 모델이란 사용자가 프로그램을 사용하는 대상 영역에 관한 지식을 선택적으로 단순화하고 의식적으로 구조한 형태다.
-
객체지향을 사용하면 사용자들이 이해하고 있는 도메인의 구조와 최대한 유사하게 코드를 구조화할 수 있다.
-
소프트웨어 객체는 그 대상이 현실적인지, 현실적이지 않은지에 상관없이 도메인 모델을 통해 표현되는 도메인 객체들을 은유해야한다.