01. 협력하는 객체들의 공동체
리뷰기간: 2024년 10월 14일 → 2024년 10월 20일
태그: 1회독, 작성완료
✨ 내용 요약
- 일상생활에서 찾은 객체지향적 요소
손님, 캐시어, 바리스타는 각각
역할
에 해당하며 각 역할은책임
을 가져야 한다.요청과 응답의 상호작용으로 객체지향적 설계를 설명할 수 있다.
캐시어는 1명일수도, 여러명일수도 있다 마찬가지로 바리스타도 1명일수도 여러명일수도 있다
⇒ 반드시 하나의
객체
만 동일한역할
을책임
지는것은 아니다.하나의 객체가 여러일을 수행 할 수 있다
- 캐시어가 주문을 받고, 동시에 직접 커피를 제조해서 손님에게 전달할 수 있다 ⇒
대체가능성
- 캐시어가 주문을 받고, 동시에 직접 커피를 제조해서 손님에게 전달할 수 있다 ⇒
책임
을 수행하는 방법은 각 객체가자율적
으로 선택할 수 있다- 예를들어, 아이스아메리카노를 주문할때, 손님이 직접 “얼음을 먼저 넣으시구요 물을 반만 채운 다음 에스프레소를 넣고 나머지 물을 채워주세요” 와 같은 주문을 하지 않아도,
바리스타 스스로 얼음을 먼저 채울수도, 물을 먼저 채울수도, 에스프레소를 먼저 채울수 도 있다
.
- 예를들어, 아이스아메리카노를 주문할때, 손님이 직접 “얼음을 먼저 넣으시구요 물을 반만 채운 다음 에스프레소를 넣고 나머지 물을 채워주세요” 와 같은 주문을 하지 않아도,
역할
,책임
, 그리고협력
- 각 객체는
메세지
를 통해 소통하며, 메세지의 요구조건을 수행하는 것을메서드
라고 표현할 수 있다. - 객체들은 상호
협력적인 관계
를 가져야한다, 또한 특정역할
을 수행하는 객체는역할에 대한 책임
을 가져야한다.
- 각 객체는
객체의 자율성
- 객체들은 서로
무엇
을 수행하는지는 알수 있으나어떻게
수행하는지는 몰라야한다.
- 객체들은 서로
객체지향 ≠ 클래스
- 클래스는 객체들의
협력 관계를 코드로 옮기는 도구
에 불과
- 클래스는 객체들의
객체지향의 본질 Point!
- 상호작용하는
자율적인 객체들의 공동체
로 시스템을 바라보고, 객체를 이용해 시스템을 분할 - 자율적인 객체란
상태
와행위
를 포함해스스로 자기자신을 책임
지는 객체를 의미 - 객체는 다른 객체와
협력
하며, 각 객체는 협력 내에서 정해진역할
을책임
을 갖고 수행해야한다 - 객체들간의 협력은
메세지
를 통해 이루어지고, 메세지를 수신한 객체는 메세지 처리를 위해 적합한메서드
를 자율적으로 선택한다.
- 상호작용하는
📝 감상 및 리뷰
- 객체지향 = 클래스 로 인식했던 과거를 반성하게 됨
- 객체지향에 대한 이론적 지식이 잡혀있지 않은 상태로 개발을 해왔으나, 왜 그러한 구조로 개발을 수행되어야 하는지 이해가 되었음
🛠️ 실무/프로젝트 적용
대략적인 공부
class Calcurator { let a: Int let b: Int init(a: Int, b: Int) { self.a = a self.b = b } func add() -> Int { return a + b } func divide() -> Double { return a << b } func minus() -> Int { return ((a * 3) - (b * 3)) / 3 } } class MainClass { let cal = Calcurator(a: 1, b: 3) print(cal.minus) // -2 }
코드를 보면, MainClass는 a-b 를 수행한다고 생각 할 수 있지만, 실제로 minus 함수를 보면 각 수에 3을 곱하고 뺀다음 3으로 나눈다, 하지만 아무 문제없다.
→ MainClass 입장에서 cal.minus는
a 에서 b 값을 뺀다(무엇)
는 것은 알수 있지만어떻게
계산하는지는 모른다 ⇒ 객체의자율성