=Unified Modeling Language
시스템을 모델로 표현해주는 대표적인 모델링 언어
- 구조 다이어그램
(클래스 다이어그램, 객체 다이어그램, 복합체 구조 다이어그램, 배치 다이어그램 등)- 행위 다이어그램
(활동 다이어그램, 상태 머신 다이어그램 등)
- 다른 사람들과 협업에 사용된다.
- 전체 시스템의 구조와 클래스의 의존성을 파악할 수 있다.
- 유지보수를 위한 백엔드 문서로 사용된다.
- class의 이름, 속성, 메서드가 필요하다.
- 속성과 메서드는 생략 가능하다.
- (StarUML을 이용하여 class diagram을 표현했다.)
관계 UML표기 Generalization(일반화) Association(연관) Directed Association(직접 연관) Aggregation(집합) Composition(합성)
- 부모 클래스와 자식 클래스 간의 상속관계이다.
- method overriding을 이용할 수 있다.
- 실선에 비어있는 삼각형 모양으로 표현한다.
✔example
class Member { private String id; private String pwd; public void print() { System.out.println("Member"); } } class Employee extends Member{ private String employee_name; private String email; public void print() { System.out.println("Employee"); } } class Admin extends Member{ private String admin_name; private String email; public void print() { System.out.println("Admin"); } } public class Generalization { public static void main(String[] args) { Member mem = new Member(); Employee e = new Employee(); Admin a = new Admin(); mem.print(); //"Member"가 출력된다. e.print(); //overriding되어 "Employee"이 출력된다. a.print(); //overriding되어 "Admin"이 출력된다. } }
- 다른 객체의 참조를 가지는 필드이다.
- 일반적인 경우 실선으로 표현한다.
- 화살표가 없으면 서로 참조할 수 있다.
- 연관 관계를 숫자로 표현할 수 있다.
- 1 : 1개
- * : n개
- n...m : n부터 m까지
✔example
import java.util.List; class School{ private List<Person> studentList; public void addStudent(Person person){ studentList.add(person); } } class Person{ private School school; public void setSchool(School school){ this.school = school; school.addStudent(this); } }
- 다른 객체의 참조를 가지는 필드이다.
- 실선으로 연결한 후 끝에 화살표로 표현한다.
- 화살표가 있으므로 방향성이 존재한다.
✔example
class Subject{ private String name; private String grade; public void print() { System.out.println("Subject"); } } class Student{ private String name; private int age; private Subject subject; public void print() { subject = new Subject(); subject.print(); } } public class DirectedAssociation { public static void main(String[] args) { Student s = new Student(); s.print(); } }
- Association의 특수한 관계이다.
- 한 객체가 다른 객체를 포함한다.
- '부분'을 나타내는 객체를 다른 객체와 공유할 수 있다.
- 전체 객체가 메모리에서 사라져도 부분 객체는 유지된다.
- '전체'를 가리키는 부분에 빈 마름모로 표현한다.
✔example
class Toy{ private String name; private Car car; private Block block; public Toy(Car c, Block b){ this.car = c; this.block = b; } } class Car{ private String type; } class Block{ private String shape; }
- Association의 특수한 관계이다.
- Aggregation과 비슷하지만 개념적으로 좀 더 강한 집합이다.
- 부분 객체가 전체 객체에 속하는 관계이다.
- '부분'을 나타내는 객체는 다른 객체와 공유 불가능하다.
- 전체 객체가 없어지면 부분 객체도 없어진다.
- '전체'를 가리키는 부분에 채워진 마름모로 표현한다.
✔example
class Toy{ private String name; private Car car; private Block block; public Toy(){ this.car = new Car(); this.block = new Block(); } } class Car{ private String type; } class Block{ private String shape; }