250x250
반응형
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

재 현

객체지향의 사실과 오해 본문

Book

객체지향의 사실과 오해

본명은이점례 2021. 11. 5. 16:13
728x90

책을 다 읽고서 혼자서 만들어본 객체 지향적 프로그래밍

 

<스토리>

고객은 음식점에 들어간다. 메뉴판을 보고 음식을 정한 후, 셰프에게 주문을 한다. 셰프는 한식, 중식, 양식 셰프들이 있다. 고객이 주문한 요리에 맞는 셰프가 요리를 시작한다. 요리가 끝나면 고객에게 제공한다.

 

 

 

1. 유스케이스

  • 음식을 주문하라 -> 시스템의 책임으로 바꿔준다. 

 

 

2. 시스템은 이 거대한 책임을 나눌 객체를 선별한다

  • 고객은 메뉴판을 보고 주문을 할 책임이 있다.
  • 메뉴판은 고객에게 메뉴항목을 알려줄 책임이 있다
  • 셰프는 주문을 받아 요리를 줄 책임이 있다

 

3. 객체들을 선별했으면 관계를 정의해야 한다

  • 요리는 메뉴판에 포함되어 있으니 포함관계로 정의한다.
  • 손님은 메뉴판을 알지만 포함은 아니므로 연관관계이다.
  • 셰프는 손님을 알지만 포함은 아니므로 연관관계이다
  • 셰프들은 셰프의 포함관계이다.
  • 요리는 셰프를 알지만 포함관계는 아니므로 연관관계이다.

 

 

4. 메시지가 객체를 선택한다.

  • '주문을 하라'라는 메세지의 대상은 손님이 된다. 
  • 메뉴항목을 찾아라의 대상은 메뉴판이 된다.
  • 손님은 메뉴항목을 넘겨 음식을 제조해라라는 메시지를 보내고 그 대상은 셰프이다
  • 셰프가 생성하라는 메시지를 보내고 수신자는 요리가 될 것이다.

 

 

 

 

  • Main과 Customer 코드

 

  • appConfig를 사용하여 구성 영역과 사용 영역을 구분했다. OCP 원칙을 지키기 위해서다.
  • order 메소드에 메뉴 이름을 매개변수로 받는다.
  • 메뉴 클래스의 choose 메소드를 통해 해당 메뉴 객체를 반환한다.
  • 셰프 클래스는 메뉴 객체에 맞는 구현 객체를 주입받고 makeDish 메소드를 실행하여 요리 객체를 반환한다. 

 

  • AppConfig 코드 

 

  • Chef와 ChineseChef 코드

 

  • Chef는 인터페이스로 구현했다.
  • ChineseChef는 Chef 클래스를 구현한다. 
  • 오버라이딩을 통해 딤섬 객체를 반환한다. ( KoreanChef는 갈비, WesternChef는 파스타를 반환한다)

 

 

 

 

* 전체 소스코드

https://github.com/songjayhyun/orderDish

 

GitHub - songjayhyun/orderDish

Contribute to songjayhyun/orderDish development by creating an account on GitHub.

github.com

 

 

책을 읽고 나서 이러쿵 저러쿵 만들어 봤는데, 이것이 바른 설계와 코드인지는 아직 잘 모르겠다. 최대한 책에서 배운 것을 활용하려고 애썼다. 문제점이나 더 나은 코드가 있다면 알려주세요 !

 

 

객체지향 수업은 학교에서 듣기도 했고, vending machine 같은 걸 만들기도 했었는데 개인적으로 이 책을 읽고 나서 확실하게 알게 된 것 같다. 애매했던 개념을 정리했다. 앞으로 설계부분에서 계속해서 들여다 볼 책.

 

 

가장 핵심 두 가지

  • 객체는 협력을 위해 존재한다. 책임이 중요하다. 
  • 메시지가 객체를 선택한다

 


*수정*

 

<며칠 뒤 다시 본 후, 수정한 부분>

 

1. chef, dish, config라는 패키지를 만들어 각 클래스들을 분류했다

2. 각 chef 구현체들 보면, return 값이 구현체에 의존하고 파라미터를 제대로 활용하지 못하기에 menuItem으로 리턴하도록 했다

 


 

728x90

'Book' 카테고리의 다른 글

6. 객체 지도  (0) 2021.11.03
5. 책임과 메시지  (0) 2021.10.29
4. 역할, 책임, 협력  (0) 2021.10.26
3. 타입과 추상화  (0) 2021.10.20
2. 이상한 나라의 객체  (0) 2021.10.20