UML 클래스 다이어그램 - 접근제어자 표기, 관계 표기하기

REASON·2022년 11월 30일
2

CS

목록 보기
7/7

클래스 다이어그램 작성해보기!

클래스 다이어그램 툴은 GitMind를 사용했다.
중간부터는 툴이 마음에 안들어서 다른 거로 갈아탔다.

UML

통합 모델링 언어(Unified Modeling Language)의 약자로
시각적 모델을 만들기 위한 도안 표기법을 포함한다.

클래스 다이어그램

클래스 다이어그램이란, 시스템의 클래스, 속성 및 개체간 관계를 모델링하여 시스템의 구조를 매핑하는 다이어그램이다.
총 3개의 섹션으로 구분되며 맨 위 칸은 클래스의 이름, 중간 칸은 클래스의 속성, 맨 아래는 클래스의 메서드를 나타낸다.
속성이나 메서드 부분은 생략되어 작성되는 경우도 있다.

클래스 다이어그램을 그리면 클래스 간 의존관계 파악을 쉽게 할 수 있다.

엑세스 표기

접근 제어자를 표기할 때는 +, -, #, ~, 밑줄, / 로 표시할 수 있다.

(접근) 제어자표기
public+
private-
protected#
default(package)~
static밑줄

분석 단계의 클래스 다이어그램에서는 제어자는 표기하지 않고,
설계 단계의 클래스 다이어그램은 제어자를 표기한다.


커피 클래스 다이어그램

간단하게 다이어그램 엑세스 표기를 참고하여 커피 클래스를 만들어보았다.
프라이빗 필드(-) name과
Coffee(컨스트럭터)와 메서드 getName, setName은 public (+)으로 표기한 모습이다.

본인은 자바는 모르므로 자바스크립트로 작성하였다.
코드로 작성하면 이런 느낌이려나..! (클래스는 잘 모릅니다..ㅠㅠ 잘못됐다면 알려주세요..!)

관계 표기

UMS에서 클래스들 간의 관계를 표시할 때는 화살표, 다이아몬드와 같은 형태로 나타낼 수 있다.

연관 관계

연관 관계 를 나타낸다. 화살표 직선 또는 일반 직선을 사용해서 이어주면 된다.

화살표 직선을 사용한 경우 참조 하는 방향을 의미한다.
즉, 위 클래스 다이어그램은 A가 B를 참조하는 것을 의미한다. (A는 B를 알지만 B는 A를 모른다.)
실선을 사용한다면 두 클래스가 서로를 안다.

일반화 관계

일반화 관계를 나타내는 화살표 모양은 위와 같다.
일반화라는 말이 도대체 뭘 의미하는가 싶었는데 상속 관계를 의미하는 것이었다.

아메리카노와 에스프레소가 부모 클래스인 커피를 상속받는 것을 표기해보았다. (필드와 메서드 작성은 생략..ㅎㅎ)

빈 삼각형 화살표가 가르키는 곳이 슈퍼 클래스(부모)이다.

합성 관계

칠해진 다이아몬드 선은 합성 관계를 의미한다.
전체와 부분을 나타낼 때 사용할 수 있다.

여기서는 아메리카노가 전체라면 물과 에스프레소는 부분에 해당한다.

칠해진 다이아몬드 선으로 나타냈으므로 아메리카노 클래스가 물과 에스프레소 인스턴스를 생성해야한다.
전체에 해당하는 아메리카노가 사라지는 경우 부분에 해당하는 물과 에스프레소 인스턴스도 사라져야 한다. 아메리카노가 복사되면 물과 에스프레소도 복사되어야 한다. (이것을 라이프타임이 의존적이라고 한다.)

또, 부분에 해당되는 인스턴스는 공유되서는 안된다.

집약 관계

합성 관계가 꽉찬 다이아몬드였다면, 집약 관계는 빈 다이아몬드이다.
(집약 : 한 데 모아서 요약한다는 뜻인데 이름만 들어서는 집약 관계가 뭔 소리지? 싶다.ㅋㅋㅋ)
번역으로는 집약이라고 하던데 영어로는 aggregation 이라고 표현하는 것 같다.

집약 관계와 합성 관계의 차이는 나만 헷갈리는 게 아니었나보다.
구글링하니 비교하는 내용의 글이 엄청 많이 나왔다. ㅋㅋ

집약 관계는 생명주기가 다른 경우에 해당된다.

앞서 살펴본 합성 관계는 아메리카노가 사라지면 물과 에스프레소도 사라졌었다.
집약 관계로 뭐가 있을까 고민해보다가 도서관과 책을 떠올렸다.
도서관이 사라진다고 해서 책이 사라지는 것은 아니기 때문이다.

그렇다면, Library 클래스에서 바로 Book 객체를 생성하는 것이 아니라
외부에서 받아오게끔 코드를 짜야 된다는 것으로 이해했다.

실체화 관계

인터페이스와 실제 인터페이스를 구현할 클래스와의 관계를 나타낸다.
이건 추가적으로 설명할 게 없을듯하여 넘어간다.

의존 관계

앞서 살펴본 연관 관계와 마찬가지로 화살표 유무가 참조 여부를 의미한다.
점선 형태의 직선 + 화살표 또는 점선 형태의 직선을 사용해서 표현할 수 있다.

리턴 값을 의존할 수도, 함수의 인자값을 의존할 수도, 지역 변수 값을 의존할 수도 있다.
의존한다는 것은 이것이 변경되면 사용중인 다른 곳에도 영향이 있다는 것을 의미한다.

개인적으로 집약 관계가 제일 어려워서 한참 들여다 봤다.
왜이렇게 말을 어렵게 만들었을까 ㅠ ㅠ


참고 자료
UML 클래스 다이어그램 튜토리얼
[UML] 클래스 다이어그램 작성법
UML Association vs Aggregation vs Composition

0개의 댓글