티스토리 뷰
Ch.4 역할, 책임, 협력
객체가 가져야 할 행동 혹은 상태를 먼저 생각하지 말자.
객체간의 협력
이 우선이다.
즉, 책임을 어떻게 구현할 것인가? (no)
객체간의 협력에서 올바른 객체가 책임을 가져야 한다.
객체의 책임 분류
하는것(doing)
- 객체를 생성, 계산하는 등 스스로 하는것
- 다른 객체의 행동을 시작시키는것
- 다른 객체의 활동을 제어하고 조절하는것
아는것(knowing)
- 개인적인 정보에 관해 아는것
- 관련된 객체에 관해 아는것
- 자신이 유도하거나 계산할 수 있는것에 관해 아는것
아는것의 경우
책에서의 재판의 관한 예를 보았지만
프로그래밍 내의 예시를 생각하여 이해하기는 힘들었다.
역할
역할을 대체할 수 있는 객체란, 동일한 메세지를 이해할 수 있는 객체
역할의 개념을 사용한다면
- 다양한 객체들이 협력에 참여할 수 있어 협력에 유연
- 다양한 객체들이 동일한 협력에 참여할 수 있기에 재사용성이 높아진다.
- 하나의 협력안에 여러 종류의 객체가 참여함으로써 협력을
추상화
할 수 있다.
대체가능성
본질적인 역할은 다른 객체에 의해 대체가능하다.
-> 유연성 + 확장성
객체가 역할에 주어진 책임 이외에 다른 책임을 수행할 수도 있다.
=> "하나의 객체가 CRUD의 역할을 갖고 있는 것이 되는걸까?"
객체지향의 흔한 오류
데이터를 저장하기 위해 객체가 존재한다?
- 상태의 일부로 데이터를 포함하지만,
데이터는 객체가 행위를 수행하는데 필요한 재료!
- 상태의 일부로 데이터를 포함하지만,
클래스와 클래스간의 정적인 관계만을 표현하는가?
- 협력에 참여하는 동적인 객체이다.
객체지향 설계기법
책임-주도 설계
- 올바른 책임을 올바른 객체에 할당하는것
- 시스템의 책임을 객체의 책임으로 변환(스프링의 IOC가 예가 될수 있지 않을까 싶다.)
디자인 패턴
- 반복적인 문제와 그 문제의 해법의 쌍으로 정의
- 특정상황에 적용가능한 디자인 패턴을 안다면
책임-주도 설계를 따르지 않고 시스템 안에 구현할 객체들을 손쉽게 작성할 수 있다.
테스트 주도 개발
- 객체가 존재한다 가정 후 어떤 메세지를 전송할지 생각
- 단순히 테스트를 작성하는 것이 아니다.
- 책임을 수행할 객체 또는 클라이언트가 기대하는 객체의 역할이 메세지를 수신할 때,
어떤 결과를 반환하는지 어떤 객체와 협력할지 작성
느낀점
- "객체지향의 흔한 오류"의 경우 부끄럽게도 제가 계속 헷갈리는 부분을 잘 잡아준 것 같습니다.
- 객체의 역할, 책임, 협력을 설계기법과 잘 생각하여 도메인 설계를 해봐야겠다. 라고 느꼈습니다.
- 스프링부트의 경우 자주 사용하는 디자인패턴을 어노테이션으로 처리하거나 그 구조를 편하게 만들었다고 예전에 공부하며 적용했던 부분이 생각났습니다.
의견을 나눌 점
아직 TDD 의 경험 + 객체지향적 설계가 완벽하지 않아
어떤 점에서 TDD가 더욱 고차원적인 객체지향적 설계를 나타낼 수 있는지 궁금하네요.
'IT Book > 객체지향의 사실과 오해' 카테고리의 다른 글
Ch.6 객체지도 (0) | 2023.05.29 |
---|---|
Ch.5 책임과 메시지 (0) | 2023.05.21 |
Ch.3 타입과 추상화 (0) | 2023.05.08 |
Ch2. 이상한 나라의 객체 (0) | 2023.04.29 |
Ch1. 협력하는 객체들의 공동체 (0) | 2023.04.22 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- vuex
- LEVEL2
- CompositionAPI
- JWT
- 맥 error
- 토스페이먼츠
- 객체 지도
- 다음 큰 숫자
- it책 리뷰
- 객체지향의 사실과 오해
- 한권으로끝내기리눅스마스터2급
- 알고리즘
- 리눅스마스터2급
- pinia
- 함께모으기
- 프로그래머스
- 정수형으로 변환
- vue.js
- springboot
- 책리뷰
- 타임리프
- java 플레이그라운드
- 스프링부트
- mybatis구현
- script setup
- Vue.js3
- 짝지어제거하기
- 객체지향
- SpringSecurity
- for
- Total
- Today
- Yesterday