UML Diagram
정의
UML Diagram이란?
Unified Modeling Language 통합 모델링 언어를 사용하여 시스템 상호작용, 업무흐름, 시스템구조, 컴포넌트 관계 등을 그린 도면
분류
구조 다이어그램(Structure Diagram)
구조 다이어그램이란?
각 요소들의 정적은 면을 보기 위한 다이어그램 시스템 개념, 관계 등의 측면에서 표현
행위 다이어그램(Behavior Diagram)
행위 다이어그램이란?
요소들의 동적인 면을 보기 위한 다이어그램 시퀀셜한 표현을 위한 다이어그램
종류
Diagram 명 | 용도 |
---|---|
Activity Diagram | 업무의 흐름을 모델링하거나 객체의 생명주기를 표현 |
Class Diagram | 시스템의 구조적인 모습 묘사 |
Collaboration Diagram | 객체와 객체가 주고받는 메시지 중심으로 묘사 |
Component Diagram | 소프트웨어 구조를 묘사 |
Deployment Diagram | 기업환경의 구성과 컴포넌트들 간의 관계 묘사 |
Sequence Diagram | 객체 간의 메시지 전달을 시간적 흐름에서 분석함 |
Use Case Diagram | 요구사항 분석 과정에서 시스템 외부와 상호작용을 묘사 |
Class Diagram
Class Relationship
- 게임을 예시로 각 관계에 대해 이해해보자
일반화(Generalization)
- 부모클래스와 자식클래스간 상속 관계를 나타냄
- 부모는 자식을 일반화(Generalize), 자식을 부모를 구체화(Specialize)
- 속이 빈 화살표로 표현
- 위 예시에서 Weapon과 Item 의 관계에 해당한다.
public abstract class Item {
String name;
public String getInfo(){
return name;
}
}
public class Weapon extends Item {
String name = "weapon";
String type = "Sword";
@Override
public String getInfo(){
return "name : " + name + ", type : " + type;
}
}
실체화(Realization)
- interface의 기능을 실제로 구현
- 점선에 속이 빈 화살표로 표현
- 위 예시에서 Attackable, Damagable 과 Monster의 관계에 해당한다.
public interface Attackable {
public void attack();
}
public interface Damagable {
public void Damanage(DamangeInfo damangeInfo);
}
public class Monster implements Attackable, Damagable {
Status status;
public Monster() {
status = new Status(100, 100);
}
@Override
public void attack() {
System.out.print("때린다!!");
}
@Override
public void Damanage(DamangeInfo damangeInfo) {
status.setHp(status.getHp() - damangeInfo.damage);
}
}
의존(Dependency)
- 일시적이고 느슨한 참조 관계
- 멤버변수로 다른 객체를 사용할 때
- 점선 화살표로 표현
- 위 예시에서 Damabable, Monster와 DamageInfo의 관계에 해당한다.
public class DamangeInfo {
public int damage;
public String type;
}
public interface Damagable {
public void Damanage(DamangeInfo damangeInfo);
}
public class Monster implements Attackable, Damagable {
Status status;
public Monster() {
status = new Status(100, 100);
}
@Override
public void attack() {
System.out.print("때린다!!");
}
@Override
public void Damanage(DamangeInfo damangeInfo) {
status.setHp(status.getHp() - damangeInfo.damage);
}
}
집약(Aggregation)
- 한 객체가 다른 객체를 포함하는 더 큰 개념
- 두 객체는 독립적이며, 라이프사이클이 독립적
- 속이 빈 다이아몬드 실선으로 표현
- 뒤 예시에서 MonsterAdministrator와 Monster의 관계에 해당한다.
public class Monster implements Attackable, Damagable {
Status status;
public Monster() {
status = new Status(100, 100);
}
@Override
public void attack() {
System.out.print("때린다!!");
}
@Override
public void Damanage(DamangeInfo damangeInfo) {
status.setHp(status.getHp() - damangeInfo.damage);
}
}
public class MonsterAdministrator {
private List<Monster> monsterList;
}
연관(Association)
- 일반적으로 두 객체 간에 어떤 형태의 관계가 있는지만 표시
- 라이프사이클이 독립적
- 실선으로 표현
- 위 예시에서 GameManager와 MonsterAdministrator의 관계에 해당
public class MonsterAdministrator {
private List<Monster> monsterList;
}
public class GameManager {
MonsterAdministrator monsterAdministrator;
}
합성(Composition)
- 집약(Aggregation) 이나 연관(Association) 보다 더 강력한 결합 관계
- 한 객체가 다른 객체를 포함하며, 라이프사이클 공유
- 속이 찬 다이아몬드 실선으로 표현
- 위 예시에서 Status와 Monster의 관계에 해당한다.
public class Status {
int hp;
int mp;
public Status(int hp, int mp) {
this.hp = hp;
this.mp = mp;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getMp() {
return mp;
}
public void setMp(int mp) {
this.mp = mp;
}
}
public class Monster implements Attackable, Damagable {
Status status;
public Monster() {
status = new Status(100, 100);
}
@Override
public void attack() {
System.out.print("때린다!!");
}
@Override
public void Damanage(DamangeInfo damangeInfo) {
status.setHp(status.getHp() - damangeInfo.damage);
}
}
댓글남기기