[iOS][DesignPatterns] 클래스 다이어그램을 읽는 방법

Uno·2021년 6월 27일
0

iOS 디자인패턴

목록 보기
2/5

Q. 클래스 다이어그램이 뭔가요?

A. 클래스 다이어그램은 디자인패턴을 이해하기 쉽도록 도와주는 도표입니다.

클래스 다이어그램은 설계도를 그릴 때, 구체적인 항목을 그리는 것이 아닌 개념적인 항목을 그리는 설계도라고 이해하시면 편할 것 같아요. "개념적인 항목" 이라고 말했듯 비유와 상징이 있겠죠?

아마 정보처리기사 필기를 공부했으면, 한 번은 들어봤을 법한 UML (Unified Modeling Language)를 이용하여 그릴겁니다. 자세한 설명은 글이 길어지니 생략할게요.

그러면 본격적으로 클래스 다이어그램에 대해서 좀 알아보겠습니다.

클래스 다이어그램이란?


클래스 다이어그램에는 다음과 같은 요소가 있습니다.

  • 클래스
  • 프로토콜
  • 프로퍼티
  • 메소드
  • 관계

먼저 클래스 중에서 "Dog" 클래스가 있다고 해보면 다음과 같이 그릴 수 있겠죠.

하나의 클래스가 다른 클래스에 속함을 나타내고 싶다면 화살표를 사용합니다.

그래서 이 둘을 하나의 관계로 만들면 다음과 같이 그릴 있습니다.

SheepDog 는 Dog 이다. 라는 관계죠.

다른 예시를 추가해보면,

  • 람보르기니는 자동차이다.
  • 슈나우져는 강아지다.
  • Swift는 프로그래밍언어이다.

이런 추상과 구체화의 관계라고 볼 수 있습니다.

개념: 프로퍼티


이어서 프로퍼티에 대해서 알아보면 그림은 다음과 같습니다.

뜻처럼 무언가 "연결" 혹은 "소유" 의 느낌이 있죠?

그래서 예시도 다음과 같습니다.

"농부가 강아지를 가지고 있다." 이런 관계죠.

다른 예시를 좀더 들어보면, 이런 것들이 있습니다.

  • 나는 맥북이 있다.
  • 나는 마우스가 있다.
  • 나는 모니터가 있다.

예시에서도 보면 나는 여러가지 다른 것들을 가질 수 있습니다.

즉, 1 : N 관계가 가능하다는 뜻이죠.

책에 있는 예시들을 좀 종합해서 보면 다음과 같이도 표현가능합니다.


해석)

농부는 SheepDog를 가지고 있다.

SheepDog는 Dog 이다.

= 농부는 SheepDog를 가지고 있는데 그것은 Dog 이다.

지금은 이렇게 하나의 예시니까, 보기 편하죠. 소프트웨어 설계를하다보면 이것들이 엄청 복잡해지고 많을 것입니다.

이런 문제를 해결하기 위해서는 "프로토콜" 을 사용하면 좋습니다!

개념: 프로토콜


먼저 프로토콜의 표현방식은 다음과 같이 그립니다.

프로토콜을 "채택한다" 혹은 "준수한다." "따른다." 와 같은 경우 화살표를 다음과 같이 그립니다.

그래서 위 예시처럼 농부가 프로토콜을 따른다고 표현하면 다음과 같이 그릴 수 있겠죠?

또 다른 화살표에 대해서 하나 설명드리고 싶은데요.

이번 화살표는 "사용하다" 의 의미가 있습니다. UML 용어로는 "종속성" 을 의미하는데요

좀더 구어적으로 말씀드리자면,

농부입장에서 프로토콜은 "따라야만 하는 것" 이구요

강아지입장에서는 "이용해야하는 것" 입니다.

농부는 이 규칙에 따라서 강아지를 소유할 수 있구요. 강아지 입장에서는 이 프로토콜을 따르거나 하진 않습니다. 다만 그 프로토콜에 있는 것들을 이용할 수 있는 관계입니다.

농부는 강아지를 가지기 위해서 자신의 이름, 전화번호 등을 구청에 신고해야하고

강아지는 무언가 신고하거나 하는 법(즉, 반드시 준수해야하는 규칙)은 없습니다. 하지만 그 프로토콜을 이용하여 자신이 유기견이 아닌 주인에게 관리를 받을 수 있죠.

만약 iOS 프로그래밍을 경험하신 분들이라면 아실 겁니다. 대신 수행해주는 클래스에서는 Delegate 메소드를 구현해주어야하고 그 Delegate 대상자가 자신임을 "신고" 해야하죠.

하지만 그 delegate를 수행하는 시점에 있는 class(여기서 예시로는 강아지) 는 그저 delegate?.메소드() 만 하면 그 메소드를 수행할 수 있죠.

다시 돌아와서 그 종속성에 대한 도식을 보면 다음과 같습니다.

이 의존성에 대한 개념이 추상적인 개념이라 이해하시기 어려우실 수 있으나, 지금은 "인지" 만 하시고, 직접 사용해보시면서 "구체화" 하시는 방법을 추천드립니다. (기회가 된다면 글로 다뤄보겠습니다.)

그래서 강아지가 protocol에 종속성이 부여된 것을 도식화하면 다음과 같습니다.

(종속성이라는 개념을 퉁쳐서 설명하자면, 특정 무언가를 종속되기로 했다면, 종속을 주는 주체의 무언가를 활용할 수 있다. 정도로만 머리에 그려보세요.)(키워드로는 "종속성 주입" 과 관련된 걸 검색해보시면 훌륭하신 블로거분들이 도와주실 겁니다!)

Q. 그러면 프로토콜은 어떻게 구성되나요?

A. 그렇죠. 프로토콜에 대한 설명을 아직도 안하고 있었죠.

프로토콜은 말그대로 "규약"입니다. 무언가 따라야 하는 거죠. "이 프로토콜을 따른다" 의 의미는, 정해진 약속을 지키겠다는 것이죠.

그래서 "강아지소유방침(강아지소유프로토콜)" 이라는 것이 있따면,

  • 강아지의 이름
  • 강아지에게 식사제공

이런 것들을 따라야한다고 칩시다.

그러면 이 규약을 따르기로 한 주인은 어떻게해야하죠? 강아지에게 이름을 부여하고 식사를 제공해야겠죠. 식사제공은 어떤식으로 할 것인지 정해야겠고요. 그리고 구청에 이걸 제출해야한다고 칩시다.

이런식으로 제출 할 수 있을 것 같습니다.

<< 강아지 소유방침 - Uno >>

- 강아지 이름 : Moya
- 강아지 식사제공방안
    - 강아지가 밥달라고하면 시져 : 시리얼사료 = 1 : 1 비율로 섞어서 강아지에게 제공한다.
    - 강아지의 기분전환을 위해 8시간 보초근무 시, 간식을 배급한다. 간식의 최소 제공량은 10g 이다.

뭐 이런식으로요.

다시 책의 예시로 돌아와서 프로토콜을 작성하면 다음과 같이 그릴 수 있습니다.

최종 다이어그램의 모습


그래서 지금까지의 예시를 모두 종합한 다이어그램은 다음과 같습니다.

지금까지 클래스 다이어그램에 대해서 알아봤습니다.

앞으로는 이를 활용하여 디자인패턴에 대한 설명을 하겠습니다.

읽어주셔서 감사합니다.

참고자료)

https://www.raywenderlich.com/books/design-patterns-by-tutorials/v3.0/chapters/2-how-to-read-a-class-diagram

profile
iOS & Flutter

0개의 댓글