상세 컨텐츠

본문 제목

[Java] UML 다이어그램 3️⃣ - 연관, 집합, 합성

Backend/Java

by hyeminyy 2023. 11. 7. 21:52

본문

728x90

https://steady-developer-hyemin.tistory.com/23

 

[Java] UML 다이어그램 1️⃣

UML 이란 ? - 시스템을 모델로 표현해주는 대표적인 모델링 언어 클래스 다이어그램이란 ? - 시간에 따라 변하지 않는 시스템의 정적인 면을 보여주는 대표적은 UML 구조 다이어그램 UML 클래스의

steady-developer-hyemin.tistory.com

 

 

[Java] UML 다이어그램 2️⃣ - 일반화, 실체화, 의존

클래스간의 관계 클래스 다이어그램의 주 목적은 클래스 간의 관계를 한 눈에 쉽게 보고 의존 관계를 파악하는 것에 있다. 그래서 클래스 다이어그램에서 가장 중요한 것이 클래스 간의 관계이

steady-developer-hyemin.tistory.com

 

 

Association (연관), Directed Association (방향성있는 연관)

보통 다른 객체의 참조를 가지는 필드

import java.util.List;

public class User{
	private List<Adress> addresses;
}

 

첫번째 다이어그램은 일반적인 연관으로 실선 하나로 클래스를 연결하여 표기하고,

두번째 다이어그램은 방향성 있는 연관으로 클래스를 실선으로 연결 후 실선 끝에 화살표를 추가한다.

 

두 다이어그램의 차이점은 화살표가 의미하는 방향성인데

이것에 따라 참조 하는 쪽과 참조 당하는 쪽을 구분한다.

 

두번째 다이어그램은 User에서 Adress 쪽으로 화살표가 있으므로 User에서 Adress를 참조하는 것을 의미합니다.

방향성이 없는 연관은 명시되지 않은 것으로

User가 Adress를 참조 할 수도, Adress가 User를 참조할 수도, 또는 둘 다 일수도 있는 것을 의미한다.

 

화살표 옆에 -adresses는 roleName(역할명)을 나타내고 Adress가 User 클래스에서 참조될 때 어떤 역할을 가지고 있는지를 의미한다.

 

*는 개수를 나타내는데 대상 클래스의 가질 수 있는 인스턴스 개수 범위를 의미한다.

0...1과 같이 점으로 구분하여 앞에 값은 최소값, 뒤에 값은 최대값을 의미하는데 *은 0...*과 같은 의미로 객체가 없을 수도 있고

또는 수가 정해지지 않은 여러 개일 수도 있다는 것을 의미한다.

 

세 번째 다이어그램은 두 번째의 다이어그램과 비슷한 의미를 가지고 있지만 다른 형태의 속성 표기법으로 나타낸 것이다.

roleName은 보통 클래스의 필드명이 된다. 여러 개의 객체에 대한 컨테이너가 List라는 것을 알리고 있다.

 

위 다이어그램 2, 3의 같은 의미

 

연관 class (1)

 

연관 class (2)

연관 클래스 (1) 과 (2)는 같다.

 

import java.util.List;

public class Student {
	private List<Grade> subjects;
}
public class Grade{
	private Subject subject;
    private String grade;
}
public class Subject{
	private String name;
}

 

Aggregation (집합)

집합은 Composition과 함께 연관 관계를 좀 더 특수하게 나타낸 것으로 whole(전체)와 part(부분)의 관계를 나타낸다.

연관은 집합이라는 의미를 내포하고 있지 않지만 집합은 집합이라는 의미를 가지고 있다.

public class User{
	private List<Address> adresses;
}

 

whole과 part를 실선으로 연결 후 whole쪽에 비어있는 다이어몬드를 표기한다.

part쪽에는 화살표를 명시해도 되고 명시하지 않아도 된다.

집합의 다이아몬드가 이미 navigability의 방향을 표기하고 있기 때문이다.

 

Composition (합성)

집합과 비슷하게 whole와 part의 집합 관계를 나타내지만 개념적으로 집합보다 더 강한 집합을 의미한다.

표기법이 집합과 비슷하지만 다이아몬드의 내부가 채워져 있다는 것만 다르다.

더 강한 집합이란 part가 whole에 종속적이어서 part가 whole의 소유이다.

 

집합은 part가 whole에 대해 독립적이어서 whole이 part를 빌려 쓰는 것과 비슷하다.

집합과 합성의 차이점은

1. part를 가지는 whole 인스턴스가 part 인스턴스의 전체 수명을 책임진다.

 

1-1. whole 인스턴스가 part 인스턴스를 생성

1-2. whole 인스턴스가 소멸되면 part 인스턴스도 함께 소멸

1-3. whole 인스턴스가 복사되면 part 인스턴스도 함께 복사

 

2. part에 해당하는 인스턴스는 공유 될 수 없다.

 

728x90

'Backend > Java' 카테고리의 다른 글

[Java] 변수 (Variable) 1️⃣  (1) 2023.11.15
[Java] JDBC 사용법  (0) 2023.11.13
[Java] 메모리 구조  (0) 2023.11.13
[Java] UML 다이어그램 2️⃣ - 일반화, 실체화, 의존  (0) 2023.11.05
[Java] UML 다이어그램 1️⃣  (0) 2023.11.04

관련글 더보기