기본형
데이터와참조형
데이터 모두 주솟값을 복사한다. 다만 그 과정에 있어서 차이가 있을 뿐이다.
해당 문서는 도서 코어 자바스크립트
의 내용에서 발췌하였습니다. 더 자세한 내용은 아래 링크를 참고해 주시길 바랍니다.
카페에서 음료를 주문한다는 상황을 가정해보자. 손님, 바리스타 등의 사람을 객체
로, 음료의 주문을 메세지
로, 요청을 처리하는 것(주문전달, 음료제조 등)을 메소드
로 해석했을 때 이를 객체지향
이라 할 수 있겠다.
주제가 객체지향
인 만큼 객체
를 중심으로 생각했을 때 객체와 객체는 저마다의 역할
을 수행하기 위해 존재하며 메세지
를 통해 request
와 response
를 주고받는다. 역할을 부여받은 객체들은 각각 기능을 수행할 책임
이 있고 이 과정에서 협력
이 발생하게 된다.
현대사회에서 혼자서 모든 일을 수행하는것은 불가능에 가깝다. 문제를 해결하고자 한다면 해당 문제 해결에 도움이 되는 객체
에게 요청(request)
를 하게 되며 요청받은 객체
는 역할을 수행한 후 요청 주체에게 응답(response)
하게 된다.
역할을 기준으로 객체를 분리한다면 아마 다음과 같을것이다.
요청
하고 주문한 음료를 수령
하는 역할요청
을 바리스타에게 전달하고 바리스타의 응답
을 손님에게 전달하는 역할요청
에 의해 음료를 제조
하고 카운터에게 응답
하는 역할주어진 역할을 수행하는 것을 본인의 책임
으로 볼 수 있기에 명확한 역할을 구분하는 것이 중요하며 이를 위해선 다음과 같은 역할/책임의 특성을 고려할 필요가 있다.
하나의 객체
가 2개 이상
의 역할을 수행할 수 있다.
- 규모가 작은 동네 카페의 경우 카운터가 바리스타의 역할을 동시에 수행해도 문제없다.
반대로 여러 객체
가 하나의 역할
을 수행할 수 있다.
- 능률 향상을 위해 2명 이상의 바리스타를 고용해도 된다.
역할은 대체 가능성
을 내포하고 있다.
- 손님 입장에선 바리스타가 누구인지는 전혀 상관없다. 문제가 발생할 경우 해당 바리스타를 해고하고 새로운 바리스타를 고용하면 그만이다.
객체는 스스로 책임을 수행할 방법을 정할 수 있다.
- 모든 카페의 바리스타는 손님에게 음료를 제공한다는 동일한 책임
을 부여받지만 각 프렌차이즈 별로 다른 원두, 장비, 로스팅 방법 등을 사용한다. 이를 다형성(polymorphism)
라고한다.
당장 떠오르는 클래스
, 메소드
따위에 매몰되지 말고 객체의 역할
, 책임
, 협력에
집중해야 한다. 결국 객체지향이란 상호작용하는 자율적인 객체
들의 공동체를 통해 시스템을 분할
하는 방법이다.
참고문서