UML
UML이란
- Unified Modeling Language
객체지향 설계 표기법의 표준 - 여러 방법론에서 사용하던 표기법을 하나로 통합(부치, 럼바, 야콥스) -> IEEE 표준
- OMG(Object Management Group, 객체지향기술 표준화 기관)
모델 = 실제의 단순화
모델링 = 실제 업무의 추상화
추상화 = 이해하기 쉽게 단순화 -> 복잡한 시스템을 모두 나타내는 것이 아님
UML 특징
- UML은 의사소통을 위한 도구
- 프로젝트 완료될 때 UML도 완성됭됨
- 설계 능력을 높여주는 것 아님 (or 구현 능력 올려주는 것이 아님)
UML 쓰임새
- 타 조직과의 의사소통 -> 문서를 통한 정확한 의사소통
- 같은 조직 내 오해방지 -> 획일화된 목표
- 기획 산출물이 완료되었다는 증거
UML 다이어그램
- Strucutre Diagram (정적)
- 시간에 상관없는 정적인 구조
- Class DIagram
: 객체들 관계, 속성, 동작 들을 표현
> 클래스 이름은 대문조로 시작
> 매서드와 필드는 소문자로 시작
> 매서드 이름은 동사로 시작
- Behavior Diagram (동적)
- 시간에 따라 변경이 일어나는 것을 표현
- Use Case Diagram
- Activity Diagram
- State Machine Diagram
- Sequence Diagram
Class Diagram
개요
Class Diagram 관계
Relation | 특징 | UML 표시 | 코드 구현 | 비고 |
Realization | 구현 (Interface 활용) |
interface Machine { void work(); } class Robot implements Machine { @override public void work() { } } |
대공사 | |
Generalization | 공통 추출 -> 분류 (상속 활용) |
class Machine { int ID; } class Robot extends Machine { public void work() { ID = 10; } } |
상속=동일 | |
Dependency | 외부 클래스 임시 사용 (참조 유지 안함) |
[Local] class Person { public void eat() { Coffee c = new Latte(); // Local에서 // c.drink(); } } ~~interface 생략~~ class Latte implements Coffee { @Override public void made() { System.out.println("Late"); } } [Parameter] class Person { public void eat(Coffee c) { // Parameter // c.made(); c.drink(); } } ~~생략~~ [Factory] class Person { // Factory 별도 존재// private Coffee makeCoffee(String cN) { if (cN == "Latte") return new Latte(); if (cN == "Ameri") return new Ameri(); return null; } public void eat(String cName) { Coffee c = makeCoffee(cName); c.made(); c.drink(); } } ~~생략~~ |
결합도↓↓ | |
Association | 참조 유지 Has a | public class Main { public static void main(String[] args) { ArrayList<Student> st = new ArrayList<>(); Teacher t = new Teacher(); st.add(new Student(t)); st.add(new Student(t)); st.add(new Student(t)); for (int i =0 ; i <stu.size(); i++) { stu.get(i).yes(); } } } class Teacher { } class Student { Teacher myT; public Student(Teacher t) { myT = t; } public void yes() { System.out.println("YES"); } } |
결합도↓ Broadcast용이X (구현 at Client) |
|
Aggregation | 참조 유지 Has a (배열 사용) |
public class Main { public static void main(String[] args) { Teacher t = new Teacher(); t.addStudent(new Student()); t.addStudent(new Student()); t.addStudent(new Student()); t.call(); } } class Teacher { ArrayList<Student> std = new ArrayList<>(); public void addStudent(Student st) { std.add(st); } public void call() { for(int i = 0; i < std.size(); i++) { std.get(i).yes(); } } } class Student { public void yes() {System.out.println("YES"); } } |
결합도↑ Broadcase 용이 |
|
Composition | 강한 Has a 관계 | class Batman { private Manteau m = new Manteau(); } |
결합도↑↑ |
- 결합도 = 의존성
: 변경 시 영향을 미치는 정도
Use Case Diagram
개요
- 요구사항 파악하는 용도 -> 요구사항을 개념화
- 어떤 것이 필요한지만 기술
(철저히 고객 입장에서 등장 해야할 시스템 & 기능 명시)
구성요소
- Actor
> 시스템 외부 관련자 (사람이 아닌 시스템일 수도 있음)
> 시스템 이름 X. 역할을 표기해야 함 - 관계
> 0 : 반드시 있다, 0 : 없을 수도 있다 - Subject
> 구축해야 할 시스템 영역 - Usecase
> 사용자 입장에서 바라본 시스템 기능
> 동사로 표시 (ex. Checkout, Manage Users 등)
Relationship
- 연관관계 (Association)
> Usecase와 Actor 관계에 상호작용이 있음을 표시
> 실선 표기 - 포함관계 (Include)
> 의존성, 반드시 실행됨을 표시
> 점선 화살표에 <<include>> 표시 - 확장관계 (Extend)
> 특정 상황에서만 실행됨을 표시 (옵션, 선택가능)
> 점선 화살표에 <<extend>> 표시, 화살표 방향은
> 화살표 방향은 반대 - 일반화관계 (Generalization)
> 상속관계 표시 (부모와 자식 Usecase 표시)
> 분류와 파생
> 실선에 막힌삼각형
Sequence Diagram
개요
- 여러 객체들의 상호작용을 나타냄
- 위 -> 아래로 읽어 나감 (시간 순서)
구성요소
- : Object
: Class Diagram과 같은 포멧 사용
: 표기예) [Instance] : [객체] - opt (옵션)
: Actor가 해당 항목을 수행할 수도 안할 수도 있음 - loop (반복)
- X (소멸된 객체 표기)
- ref : Interaction Use (자세한 설명은 생략한다!!)
Activity Diagram
개요
- Flow Chart와 매우 유사
- 하나의 Activity를 도식화한 Diagram
구성요소
- Action
: 하나의 Action은 하나의 Action으로 지목 가능 (분기 불가) - 분기문 (guard condition)
: if문, 대괄호 안에 조건
: 종복 항목 제거 시 분기문 추가하여 정리 - fort = 병렬도 수행 (Thread)
join = Thread 들이 모두 종료될 때까지 대기 - merge : 여러 루트 중 하나만 들어와도 통과
State Machine Diagram
개요
- 이벤트 발생시 상태의 변화를 표시
구성요소
- State 형태
> entry (시작 Activity), do (주요 Activity), exit (종료 Activity) - Transition
> 전환할 수 있는 경로 - Trigger Event
> Trigger [Guard] / behavir-expression
> Trigger = 전환을 발생시키는 이벤트 지정
> Guard Condition = 발생 추가 조건
> Behavior-expression = 트리거 후 수행하는 Activity
'Software Architect' 카테고리의 다른 글
[Design Pattern] Singleton Pattern (0) | 2022.03.24 |
---|---|
[Design Pattern] Builder Pattern (0) | 2022.03.24 |
[Design Pattern] Factory Method Pattern (0) | 2022.03.24 |
[Design Pattern] GoF Design Pattern 개요 (0) | 2022.03.24 |
[OOAD] 캡슐화, 상속, 다형성, Interface 등 (0) | 2022.03.21 |