2장 객체를 활용한 테스트 주도 개발
객체지향이란 무엇인가?
- 하나의 책임을 수행하기 위해 각자 역할을 가지고 자율적으로 동작하는 객체들이 서로 협력하는 방식으로 프로그래밍 하는 것.
-
객체 지향 시스템
- 협업하는 객체의 망으로 구성
- 시스템은 객체를 생성해 서로 메시지를 주고받을 수 있게 조립하는 과정을 거쳐 만들어진다.
-
객체
- 자신이 이해할 수 있는 메시지를 처리
- 내부 상태를 캡슐화
- 자율적으로 메시지를 처리
값과 객체는 무엇이고, 어떤 차이점이 있는가?
-
값
- 변하지 않는 양이나 크기를 나타낸다.
- 불변적
-
객체
- 시간이 지남에 따라 상태가 변한다. -> 시간의 추이에 따른 객체의 행위를 나타낸다.
- 식별자가 있다.
- 계산 절차를 담고 있다.
- 가변적
메시지란 무엇인가?
- 다른 객체와 의사소통할 수 있는 수단
- 객체간의 의존성을 명시적으로 나타내는 것
-
객체간의 의사소통(메시지)에 초첨을 맞추어 설계를 이끌어 나가야 한다.
- 왜 메시지 중심으로 설계를 이끌어 나가야 하는가?
- 메시지 = 객체가 다른 객체에 접근할 수 있는 유일한 방법이다.
- 메시지 = 메시지를 받은 객체가 수행해야 하는 책임을 의미한다.
- 책임 = 객체가 무엇을 해야하는가? 를 설명한다.
- 메시지에 초점을 맞춘다. = 객체가 무엇을 하는가에 초점을 맞춘다.
- 어떻게 하는가에 대해서는 객체가 자율적으로 선택하게 한다.
- 시스템의 행위를 변경하기 쉽게 하여 시스템이 유연하도록 만든다.
디미터 법칙
-
디미터의 법칙
- 객체는 자기 자신을 책임지는 자율적인 존재여야 한다.
- 객체는 내부적으로 보유하고 있거나 메시지를 통해 확보한 정보만 가지고 의사 결정을 내려야 한다.
- 객체는 다른 객체를 탐색해 뭔가를 일어나게 해서는 안된다.
mock 객체란 무엇인가?
- 테스트 대상이 되는 객체의 이웃을 대체하는 가짜 객체
- 목 객체를 사용하면 객체 간의 관계를 파악하는 데에 도움이 된다.
테스트에서 목 객체를 어떻게 사용하는가?
- 테스트 대상 객체의 이웃 객체를 목 인스턴스로 생성
- 해당 목 인스턴스를 어떻게 호출하고 상태를 검사하는가에 관한 예상 구문 결정
- 테스트시 스텁 형태로 동작할 필요가 있는 행위를 구현
- 목 객체의 사용으로 단위 테스트는 대상 객체와 해당 객체를 둘러싼 환경 간의 관계를 명확하게 드러나게 만든다.
스터디
-
메소드 체이닝과 열차 충돌의 차이
- 메소드 체이닝은 내부 구현이 들어나지 않지만 열차 충돌은 내부 구현 (세부 사항)을 드러낸다.