이 책을 통해 얻고자 하는 것
1. 객체지향을 바라보는 시야 넓히기
2. '객체지향이란 무엇인가'라는 질문에 나만의 견해를 가지고 답할 수 있기
1장 협력하는 공동체
객채지향의 오해
객체지향 프로그램에 대해 오해하는 것이 있다.
객체지향이란 '현실에 존재하는 사물을 최대한 유사하게 소프트웨어로 옮기는 것'이다
실제 소프트웨어 객체와 현실 세계의 사물 간에는 유사성이 없다. 하지만 현실 세계에 대한 비유로 객체지향 개념을 학습하는데 유용하므로 저 관점으로 바라볼 수 있다.
현실 세계에서 커피를 주문하고 제조하는 과정
이해를 위해 우선 현실 세계의 예시로 객체지향의 핵심 개념을 이해해보자.
카페에 가서 커피를 주문하고 제조하는 상황을 생각해보자. 이 상황에선 손님, 캐시어, 바리스타라는 3명의 사람이 있다.
이 3명의 사람은 서로 요청을 하고 요청에 대한 응답으로 구성된 협력을 통해 '커피 주문'이라는 목표를 달성한다.
이 상황의 핵심은 세 가지이다. 바로 역할, 책임, 협력이다.
손님이라는 역할을 가진 사람은 커피를 주문하는 책임을 가진다. 마찬가지로 캐시어라는 역할을 가진 사람은 주문을 받는 책임을 가지고, 바리스타라는 역할을 가진 사람은 커피를 제조하는 책임을 가진다. 이렇게 책임을 수행하는 역할을 가진 사람들이 협력하고 있다.
어떤 특정한 책임을 수행하는 역할을 가진 사람들이 협력한다. 이 말은 몇 가지 중요한 개념을 제시한다.
- 역할은 여러 사람이 수행할 수 있다.
- 손님 입장에서 캐시어라는 역할은 어떤 사람이 수행하든 상관없다. 그저 자신의 책임만 잘 지키면 된다.
- 역할은 대체 가능성을 의미한다.
- 손님 입장에서 캐시어는 대체 가능하다. 요청자 입장에서 어떤 사람이 역할을 수행하더라도 문제가 되지 않는다.
- 책임을 수행하는 방법은 자율적이다.
- 바리스타가 커피를 제조하는 방법은 사람마다 다 다르다. 동일한 요청을 다양한 방식으로 응답할 수 있다. (이것이 바로 다형성이다)
- 한 사람이 여러 역할을 수행할 수 있다.
- 한 사람이 캐시어, 바리스타 역할을 둘 다 할 수 있다.
소프트웨어 관점으로 바라보기
이제 위의 설명에서 사람을 객체로 바꿔 읽어보자.
손님이라는 역할을 가진 객체은 커피를 주문하는 책임을 가진다. 마찬가지로 캐시어라는 역할을 가진 객체는 주문을 받는 책임을 가지고, 바리스타라는 역할을 가진 객체는 커피를 제조하는 책임을 가진다.
이렇게 책임을 수행하는 역할을 가진 객체들이 서로 협력하며 '커피 주문'이라는 기능을 구현할 수 있다. 여기서 객체가 요청하는 건 메시지로, 요청을 처리하는 방법은 메서드로 표현되는 것이다.
객체지향의 핵심
- 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공통체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
- 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행한다.
- 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다.
마무리
이번 장을 통해 객체지향의 기본적인 틀을 알아봤다. 객체지향의 핵심은 클래스가 아니다. 객체지향은 단어에서도 내포하고 있듯이 객체를 바라보는 관점에서 시작한다.
객체지향은 어떤 책임을 가지는 객체들이 서로 협력을 하며 동작하는 것이다. 이때 객체는 자율적으로 자신의 상태와 행위를 스스로 결정한다. 다시 말해 객체지향 패러다임의 핵심은 자율적인 객체들이 협력하며 동작한다는 것이다.
'스터디' 카테고리의 다른 글
[모던 자바 인 액션] 3장. 람다, 함수형 인터페이스, 메서드 참조 (0) | 2023.06.28 |
---|---|
[객체지향의 사실과 오해] 4. 역할, 책임, 협력 (0) | 2023.06.24 |
[모던 자바 인 액션] 1,2장. Java 8의 변화, 동작 파라미터화 (0) | 2023.06.23 |
[객체지향의 사실과 오해] 3. 타입과 추상화 (0) | 2023.06.16 |
[ 객체지향의 사실과 오해 ] 2. 객체의 구성 (상태, 행동, 식별자) (0) | 2023.06.09 |
댓글