공부해봅시당
[CS] UML(Unified Modeling Language) 관계 본문
UML 관계 종류 요약
1. 일반화 관계(Generalization Relationship)
2. 실체화 관계(Realization Relationship)
3. 의존 관계(Dependency Relationship)
4. 연관 관계(Association Relationship)
4-1. 직접 연관(Directed Association Relationship)
4-2. 집합 연관(Aggregation Relationship)
4-3. 복합 연관(Composition Relationship)
관계명 | 설명 | 관계 |
일반화 관계(Generalization Relationship) | 일반적인 것(동물)과 특화된 것(포유류)과의 관계 | 상속 |
실체화 관계(Realization Relationship) | 인터페이스와 그것을 구현한 것과의 관계 | 구현 |
의존 관계(Dependency Relationship) | 어떤 클래스가 다른 클래스를 참조하는 관계 | 참조 |
연관 관계(Association Relationship) | 두 클래스 간의 관계를 나타냄 (아래에서 더 자세히 설명) |
1. 일반화 관계(Generalization Relationship)
일반화는 쉽게 말해 상속 관계
ex) User라는 클래스를 상속받은 Customer와 Admin 클래스
public class User {
private String id;
private String pass;
public void login(){}
}
public class Customer extends User {
@Override
public void login() {
//일반 유저의 로그인...
}
}
public class Admin extends User {
@Override
public void login() {
//관리자 로그인
}
}
2. 실체화 관계(Realization Relationship)
실체화는 인터페이스를 구현받아 추상 메서드를 오버라이딩 하는 것을 의미
이것은 UML 로 표기하는데 두가지 방법이 있음
방법은 다르지만 같은 표기임
public class DateCheckLogic implements CheckLogic {
@Override
public boolean isTrue() {
return true;
}
}
3. 의존 관계(Dependency Relationship)
의존 관계는 어떤 클래스가 다른 클래스를 참조하는 것을 의미
참조 형태: 객체 생성이나 사용 메서드 호출, 매개변수로 객체 사용 등
해당 객체는 사용 후 참조를 유지 하지 않음
클래스간 객체화 및 메서드 사용은 빈번한 일 이므로 가장 많이 사용되는 관계
public class Driving {
public static void main(String[] args) {
Car myCar = new Car();
myCar.turnOn();
myCar.turnOff();
}
}
public class Car {
public void turnOn(){
System.out.println("시동이 켜졌습니다.");
}
public void turnOff(){
System.out.println("시동이 꺼졌습니다.");
}
}
4. 연관 관계(Association Relationship)
연관 관계는 직접연관, 집합연관, 복합 연관으로 나뉨
관계 | 설명 |
직접연관 | 화살표의 방향에 따라 참조를 나타냄 |
집합연관 | whole(몸통)과 part(엑세서리)의 관계 (몸통이 죽어도 부분은 살아남음) |
복합연관 | whole(몸통)과 part(신체일부분)의 관계 (몸통이 죽으면 부분도 같이 죽음) |
4-1. 직접 연관(Directed Association Relationship)
이놈이 -> 이놈을 참조
직접 연관은 한 클래스가 다른 클래스를 참조하는 관계
이 부분은 의존 관계(Dependency Relationship)와 헷갈릴 수도 있으나 차이가 있음
의존과 직접연관 : 객체가 사라지느냐 유지되느냐 라는 차이
관계 | 차이점 |
의존 | 참조하는 객체나 클래스가 사용 후 사라지는 관계 (사라진다 -> 지역 변수에 객체 보관되어 메서드 종료 시 사라짐) |
직접연관 | 참조하는 객체나 클래스가 사용 후에도 유지되는 관계 (유지된다 -> 전역변수에 객체가 보관되어 클래스 생명 주기까지 유지됨) |
직접 연관 관계는 객체화 하지 않은 클래스 자체를 참조 하는 것 이라고 할 수 있음
import java.util.List;
public class User {
private List<Address> addr;
}
위 그림은 User 가 Address 를 참조한다는 의미
1…* 은 대상 클래스가 가질 수 있는 인스턴스의 개수 범위를 나타냄
점(…) 을 기준으로 앞에 값은 최소값, 뒤에 값은 최대값을 의미
1 : 1개의 객체가 연관
N : n개의 객체가 연관
0...1 : 연관된 객체가 없거나 1개만 존재
0...* : 또는 *: 연관된 객체가 없거나 다수
1...* : 연관된 객체가 적어도 1개 이상
n...* : 연관된 객체가 적어도 n개 이상
n...m : 연관된 객체가 최소 n개에서 최대 m개
추가로 List 라는 컬레션 프레임워크를 사용한 점과 이것을 addr 변수에 담았다는 내용
그것을 표현하기 위해서는 아래와 같이 두 가지 방법이 있음
public class Subject {
public String name;
}
public class Grade {
public Subject subject = null;
public String grade;
}
import java.util.List;
public class Student {
private List<Grade> gradeList = null;
}
아래와 같은 순서로 UML 을 그릴 수 있음
1. Grade 는 Subject 를, Student 는 Grade 를 참조
2. Grade 클래스는 Subject 클래스를 subject 변수에 1 개만 객체화 가능
3. Student 클래스는 Grade 클래스를 gradeList 변수에 List 형태 참조하여 가져옴 객체생성은 1~무한대
최종적으로 3번과 같은 그림이 그려짐
변수 앞에 붙는 부호는 접근 제어자를 의미
- 마이너스 부호(-): 해당 멤버가 private임을 의미
- 샵 부호(#): 해당 멤버가 protected임을 의미
- 물결 부호(~): default 또는 package-private임을 의미
- 플러스 부호(+): 해당 멤버가 public임을 의미
4-2. 집합 연관(Aggregation Relationship)
몸통 ◇-> 부분
집합연관은 전체와 부분의 관계
하지만 직접 연관과는 코드상에 차이를 구분하기 애매함
그래서 가급적으로 사용하지 않는다는 주장들이 있고, 거의 그렇게 되어가는 추세
public class Computer {
private Monitor screen;
private Body body;
private Keyboard keyboard;
public Computer(Monitor screen, Body body, Keyboard keyboard){
this.screen = screen;
this.body = body;
this.keyboard = keyboard;
}
}
위 소스를 보면 외부 클래스를 생성 시 받아 오지만 객체화를 외부에서 함
그래서 Computer 클래스가 종료된다고 하더라도 screen, body, keyboard의 객체는 여전히 살아 있고,
몸체(Computer)가 죽어도 액세서리(screen, body, keyboard)가 남는 관계라고 함
4-3. 복합 연관(Composition Relationship)
몸통 ◆-> 부분
복합연관이 집합연관과 다른 점은 앞서 말했듯이 몸체 클래스가 죽었을 경우 다른 객체도 함께 죽는 다는 것
public class Computer {
private Monitor screen;
private Body body;
private Keyboard keyboard;
public Computer(){
this.screen = new Monitor();
this.body = new Body();
this.keyboard = new Keyboard();
}
}
이번에는 객체화가 내부에서 이루어짐
즉, 몸체 클래스 안에서 생성되었기 때문에 몸체 클래스가 죽으면, 해당 객체들도 자연히 죽음
- 집합 : 안경은 내 몸 에서 생긴 것이 아니기 때문에 내가 죽더라도 남게 됨
- 복합 : 심장은 내 몸 안에서 생긴 것 이기 때문에 내가 죽으면 같이 죽게 됨
참고
UML 클래스 관계
*관계 - 4가지로 구분 -1. 일반화 -2. 실체화 -3. 의존관계 -4. 연관관계 -1)직접 연관 -2)집합 연관 -3)복합 연관 관계명 설명 관계 Generalization(일반화 관계) 일반적인 것(동물)과 특화된 것(포유류)과의
kyoun.tistory.com
'STUDY > CS' 카테고리의 다른 글
[CS] HTML의 Hyper Text와 Markup에 대해 쉽고 빠르게 알아보자 (1) | 2024.05.23 |
---|---|
[CS] 인코딩과 암호화, Base64는 인코딩일까 암호화일까? (0) | 2024.05.05 |
[CS] '명령형' 프로그래밍 vs '선언적' 프로그래밍 (1) | 2024.02.12 |
[CS 기초] Groovy란? (0) | 2023.11.06 |
[CS 기초] 고차함수 (2) | 2023.11.06 |