본문 바로가기

Software Architect

[OOAD] UML & 주요 diagram

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