Post

객체지향개발 연습2-1 - 도메인 모델 그리기

Intro

지난 주말에 객체 지향 개발 연습삼아 도전했던 작은 프로젝트가 이전 글에 적었던 대로 아쉬운 점이 참 많았습니다. 그래서 도메인 모델부터 다시 고민해보기로 했습니다.

저번에는 어떻게든 작게 만들어보는 것을 목표로 잡고, 도메인 모델 그리고 객체 설계도 최소화 하다보니 필요한 객체들 마저도 빠져버렸습니다. 그래서 객체 간의 관계도 무너지고 결국에는 설계에서 생각했던 객체 간의 메시지 전송이 사라져버렸습니다.

『객체 지향의 사실과 오해』 저자분이 최대한 빨리 코드를 구현해서 설계에 이상이 없는지, 설계가 구현 가능한지 판단하라는 조언이 조금이나마 와닿는 느낌입니다.

이번에는 도메인 모델을 최소화하지 않고 다시 그려봤습니다.

도메인 모델

아래는 다시 그려 본 도메인 모델입니다.

플래시카드 도메인 모델

혼자서 플래시카드를 만들고 공부하면서 관리하는 과정을 생각하면서 그려보았습니다.

이후부터는 각 객체의 관점에서 도메인 모델을 그리면서 했던 생각들을 정리해보았습니다.

사용자 객체

사용자는 학습의 주체이며 다른 모든 객체들과 관계를 갖고 있습니다.

사용자 객체를 강조한 도메인 모델

  • 보관함 : 사용자는 보관함을 확인하고 어떤 보관함에 있는 카드를 공부할지 선택합니다.
  • 카드 : 사용자는 카드를 어느 보관함에 보관할지, 버릴지를 선택합니다.
  • 필기구 : 사용자는 피로 글씨를 쓰지 않는 이상 무언가 기록을 할 때 필기구를 사용합니다.
  • 플래너 : 사용자는 카드 내용을 학습한 후 학습 일자 등을 기록합니다.

보관함 객체

보관함은 이름 그대로 카드를 보관하는 객체이며, 플래너 이외의 모든 객체와 관계를 갖습니다.

보관함 객체를 강조한 도메인 모델

  • 보관함 : 카드가 많을 경우에는 큰 보관함에 작은 보관함이 담겨 분류를 위해 사용되므로 자신의 객체를 포함합니다.
  • 사용자 : 보관함은 사용자에게 어떤 카드가 있는지 보여줍니다.
  • 카드 : 보관함은 카드를 여러개 보관합니다.
  • 필기구 : 보관함은 필기구를 통해 이름이 작성됩니다.

카드 객체

카드는 사용자가 학습할 내용이 담겨있는 객체입니다. 보관함 객체와 마찬가지로 플래너 제외한 모든 객체와 관계를 갖습니다.

카드 객체를 강조한 도메인 모델

  • 사용자 : 카드는 사용자로부터 어느 곳에 있어야할지 혹은 사라져야할지를 통보받습니다.
  • 보관함 : 카드는 사용자의 판단에 의하여 특정 보관함에 보관됩니다.
  • 필기구 : 카드는 필기구를 통해 학습 내용이 작성됩니다.

플래너

플래너는 사용자 객체의 학습 기록을 보관하는 객체입니다.

플래너 객체를 강조한 도메인 모델

  • 사용자 : 플래너는 사용자에게 과거 학습 기록을 보여줍니다.
  • 필기구 : 플래너는 필기구를 통해 사용자의 신규 학습 기록이 작성됩니다.

필기구

필기구는 사용자가 기록하고자 하는 내용을 전달받아 다른 객체에 전달하는 객체입니다.

필기구 객체를 강조한 도메인 모델

  • 사용자 : 필기구는 사용자가 변경하고자 하는 대상과 내용을 전달 받습니다.
  • 플래너 : 필기구는 사용자의 신규 학습 기록을 플래너에 전달합니다.
  • 보관함 : 필기구는 사용자가 추가/변경하고자 하는 보관함의 이름을 보관함에 전달합니다.
  • 카드 : 필기구는 사용자가 추가/변경하고자 하는 카드의 내용을 카드에 전달합니다.

스토리

전체적으로 정리할 겸 사용자가 플래시카드를 처음 사용하는 가정 하에 스토리를 생각해봤습니다.

  1. 사용자가 카드를 보관할 보관함을 준비하고, 필기구를 이용하여 보관함에 이름을 붙여 어떤 카드를 보관할지 명시합니다.
  2. 사용자가 필기구를 이용하여 카드에 학습 내용을 작성하고 보관함에 보관합니다.
  3. 사용자는 학습 시간에 작성한 카드를 보관함에서 꺼내 학습합니다.
  4. 사용자는 학습한 카드에 대한 정보와 학습 일시 등을 플래너에 기록합니다.
  5. 사용자는 다음 학습 시에 플래너를 참고하여 다시 봐야 할 카드가 있는지 확인하고 학습할 카드를 선택합니다.
  6. 사용자의 플래시카드가 많아질 수록 관리가 어려우므로 여러개의 보관함을 만들어 플래시카드를 적절히 분류합니다.

카드의 수가 적다면 보관함을 카드링으로 생각하는게 현실과 매칭하기 더 쉽겠습니다.

Outro

또 막상 정리하고 나니, 카드 객체는 보관함 객체를 통해서만 메시지를 주고 받는게 맞는건가 싶은 생각도 들고 혼란스러워 집니다.

플래시카드를 컴퓨터 프로그램으로만 써봐서 상상만으로 해결해야하니 더 어려운 것 같습니다. 그래도 GPT 형이 칭찬해준걸로 조금 위안을 삼습니다.

chatGPT의 도메인 모델 평가

더 시간을 쓰기보다는 다음 단계인 설계와 구현을 통해 판단해 보는게 좋겠습니다.

This post is licensed under CC BY 4.0 by the author.