# 객체 지향 설계 원칙

## 객체지향 설계란

객체지향 설계란 말 그대로 객체를 지향하는 설계이며 핵심 3가지 는 협력 , 역할, 책임이 있다.

적절한 책임을 적절한 객체에 할당하고 그 책임 수행하는 객체들의 협력으로 프로그래밍 하는 것이다.

커피를 주문하는 과정에 적용을 해보면

손님-캐셔-바리스타

각 세사람의 역할이 있다. 각 역할을 하는 사람은 각자만의 책임이 있다.

* 손님

커피를 고르고 주문을 하는책임

* 캐셔

주문을 받고 메뉴를 바리스타에게 전달하는 책임

* 바리스타

주문 받은 메뉴를 제조하는 책임

각 역할들의 협력으로 주문-메뉴전달-제조 완성한다. 각 사람들은 다른 사람이 정확하게 뭘 하고 있는지 자세히 알필요가없다. 그냥 요청을 할 뿐이다.

손님-주문하기 요청\
캐셔-주문대한 요청을 받고 메뉴제조를 요청\
바리스타-메뉴제조 요청을 받고 메뉴제조

여기서 캡슐화라는 개념을 적용해보면 손님은 주문만 하면되고 캐셔는 주문에 대한 응답만 하면 된다. 주문이 어떻게 이루어지는지 손님은 알필요가 없다. 단지 캐셔가 주문만 받으면 된다. 주문에 대한 세부내용을 변경해도 외부(손님)에 영향이 없다.\
그리고 손님은 주문에 대한 세부내용을 알필요도 없고 알아서도 안된다.

객체지향설계의 목표는 변경에 유연한 설계를 하는 것이고 코드에 변경이 일어났을때 그 영향이 최소한으로 하는것을 목표로 하는것이라고 생각한다.

> 객체 지향 설계 5대 원칙

* [단일 책임 원칙](undefined/undefined)
* [개방 폐쇄 원칙](undefined/undefined-1)
* [리스코프 치환 원칙](undefined/undefined-2)
* [인터페이스 분리 원칙](undefined/undefined-3)
* [의존 역전](undefined/undefined-4) 원칙
