UML의 유형
1. 클래스 다이어그램
- 개념 : 객체지향 모델링 시, 클래스의 속성 및 연산과 클래스 간 정적인 관계를 표현한 다이어그램
2. 구성요소
클래스 이름, 속성, 연산, 접근 제어자, 관계
클래스(Class)
- 공통의 속성, 연산(메서드), 관계, 의미를 공유하는 객체들의 집합
속성(Attribute)
- 클래스의 구조적 특성에 이름을 붙인 것으로, 특성에 해당하는 인스턴스
연산(Operation)
- 이름, 타입, 매개변수들과 연관된 행위를 호출하는데 요구되는 제약사항들을 명시하는 클래스의 행위적 특징
- 객체에 요청하여 행동에 영향을 줄 수 있는 서비스
접근 제어자(Access Modifier)
- 클래스에 접근할 수 있는 정도를 표현
-, +, #, ~ ( private, public, protected, default )클래스 간의 관계(Relationships)
- 연관 관계, 집합 관계, 복합 관계(포함 관계), 일반화 관계, 의존 관계, 실체화 관계가 있다.
1. 연관(Association) 관계
- 클래스가 서로 개념적으로 연결된 선
- 연관 관계는 2개 이상의 사물이 서로 관련되어 있는 상태를 표현
- 사물 사이를 실선으로 연결하여 표현하며, 방향성은 화살표로 표현
- 서로에게 영향을 주는 양방향 관계의 경우 화살표를 생략하고 실선으로만 연결
1-2. 연관 관계의 다중성
- 1 : 한 객체와 연관, 표시하지 않아도 기본값으로 설정
- 0..1 : 0개 또는 1개의 객체와 연관
- 0..* : 0개 또는 많은 수의 객체가 연관
- * : 0..*과 동일
- 1..* : 1개 이상의 객체와 연관
- 1..12 : 1개에서 12개까지 객체가 연관
- 1..2, 4, 6 : 1개에서 2개까지 또는 4개 또는 6개의 객체가 연관
2. 집합(Aggregation) 관계와 복합(Composition) 관계
- 집합 관계와 복합 관계는 연관 관계에 포함된다.
2-1. 집합(Aggregation) 관계
- 하나의 객체에 여러 개의 독립적인 객체들이 구성되는 관계
- 집합 관계는 하나의 사물이 다른 사물에 포함되어 있는 관계 표현
- 포함되는 쪽(Part : 부분)에서 포함하는 쪽(Whole : 전체)으로 속이 빈 마름모를 연결하여 표현
- ex. 차와 엔진, 바퀴, 운전대
2-2. 복합(Composition) 관계
- 영구적이고, 집합 관계보다 더 강한 관계로 구성
- 포함되는 쪽(Part : 부분)에서 포함하는 쪽(Whole : 전체)으로 속이 채워진 마름모를 연결하여 표현
- 복합 관계는 집합 관계의 특수한 형태, 포함하는 사물의 변화가 포함하는 사물에게 영향을 미치는 관계를 표현
3. 일반화 관계(Generalization)와 의존 관계(Dependency)
3-1. 일반화 관계
- 일반화 관계는 하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지를 표현
- 일반적인 개념을 부모(상위)라고 하고, 구체적인 개념을 자식(하위)라고 함.
- 구체적(하위)인 사물에서 일반적(상위)인 사물쪽으로 속이 빈 화살표를 연결하여 표현
- 일반화 관계는 다른 의미로 상속 관계라고 함.
3-2. 의존 관계
- 하나의 클래스가 또 다른 클래스를 사용하는 관계
- 다른 클래스의 멤버 함수 사용
- 의존 관게는 사물 사이에 서로 연관은 있으나, 필요에 따라 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지하는 관계를 표현
- 하나의 클래스에 있는 멤버 함수의 인자가 변함에 따라 다른 클래스에 영향을 미칠 때의 관계
- 영향을 주는 사물이 영향을 받는 사물 쪽으로 점선 화살표를 연결하여 표현
4. 추상 클래스(Abstract Class), 인터페이스(Interface), 실체화 관계(Realization)
4-1. 추상 클래스 ( Abstract Class )
- 객체 인스턴스를 생성하지 않고, 단지 유사 클래스들의 공통된 특징을 정의하고 하나 이상의 추상 메서드와 일반 필드 및 일반 메서드를 포함하는 클래스
- 동일한 부모를 가지는 클래스를 묶는 개념으로 상속을 받아서 기능을 확장시키는 것이 목적
- 이탤릭체로 클래스명을 표시하며, 스테레오타입을 이용하여 << abstract >>로 표기
4-2. 인터페이스( Interface )
- 기능(Function)을 모아놓은 클래스로, 추상 메서드와 상수만을 포함하는 추상 클래스
- 구현하는 모든 클래스에 대해 특정한 메서드가 반드시 존재하도록 강제하는 역할
- 스테레오 타입을 이용하여 << interface >>로 표기하고, 이탤릭체로 인터페이스 명을 표기
4-3. 실체화 관계 ( Realization )
- 추상 클래스나 인터페이스를 상속받아 자식클래스가 추상 메서드를 구현할 때 사용
- 사물이 할 수 있거나, 해야 하는 기능(행위, 인터페이스)으로 서로를 그룹화할 수 있는 관계를 표현
유스케이스 다이어그램
- 개념
시스템이 제공하고 있는 기능 및 그외 관련된 외부 요소를 사용자의 관점에서 표현하는 다이어그램- 구성요소
유스케이스, 엑터, 시스템, 시나리오, 이벤트의 흐름유스케이스 다이어그램 구성요소
1. 유스케이스(Usecase)
- 시스템이 제공해야 하는 서비스 기능
- 엑터가 시스템을 통해 수행하는 일련의 행위
2. 엑터(Actor)
- 사용자가 시스템에 대해 수행하는 역할
- 시스템과 상호작용하는 사람 또는 사물
- 이벤트 흐름을 시작하게 하는 객체
3. 시스템(System)
- 전체 시스템의 영역을 표현
4. 시나리오(Scenario)
- 발생되는 이벤트의 흐름
5. 이벤트의 흐름
- 사람, 시스템, 하드웨어, 시간의 흐름에 의해 시작
유스케이스 다이어그램의 관계
- 관계는 엑터와 유스케이스, 유스케이스와 유스케이스 사이에서 나타날 수 있다.
- 관계의 종류 : 포함 관계, 확장 관계, 일반화 관계
유스케이스 다이어그램의 관계
- 포함( include ) 관계
- 유스케이스를 수행할 때, 다른 유스케이스가 반드시 수행되는 관계
- 유스케이스 다이어그램에서는 다른 유스케이스가 나타내는 이벤트 흐름을 포함(include)하는 관계를 유스케이스 간에 표현
- 여러 유스케이스에서 공통적으로 발견되는 기능 표현
- 2개 이상의 유스케이스 이벤트 흐름에서 중복적인 부분이 발생하는 경우 유스케이스 간 포함 관계를 설정하여 해결
- << include >>로 표현
- 확장( extend ) 관계
- 포함 관계처럼 여러 유스케이스에 걸쳐 중복적으로 사용되지 않고, 특정 조건에서 한 유스케이스로만 확장되는 관계
- 특정 조건이 만족되는 상황에만 확장 유스케이스의 이벤트 흐름이 수행
- 한 유스케이스에서 추가되거나 확장된 기능 표현
- << extend >>로 표현
- 일반화( Generalization ) 관계
- 추상적인 액터와 좀 더 구체적인 액터 사이에 맺어주는 관계
- 일반화 관계를 액터에 적용하면 유스케이스 다이어그램에서 사용되는 여러 액터들의 의미를 좀 더 명확하게 하고 다이어그램도 보다 간결하게 작성
- 하위 액터나 유스케이스에서 상위 액터, 유스케이스 쪽으로 속이 빈 삼각형 화살표를 실선으로 연결
시퀀스 다이어그램( Sequence Diagram )
- 객체 간 상호작용을 메시지 흐름으로 표현한 다이어그램
- 객체 간의 동적 상호자용을 시간적 개념을 중심으로 모델링하는 과정
- 객체의 오퍼레이션과 속성을 상세히 정의하여야 함.
- 시퀀스 다이어그램 = 유스케이스를 실현(Realization) 한다. ( 유스케이스 다이어그램 : 추상 - 시퀀스 다이어그램 : 구체 )
시퀀스 다이어그램 구성요소
- 액터, 객체, 생명선, 활성화, 메시지
1. 객체
- 객체는 위쪽에 표시되며, 아래로 생명선을 가짐.
- 객체는 사각형 안에 밑줄 친 이름으로 명시
2. 생명선
- 객체로부터 뻗어 나가는 점선
- 실제 시간이 흐름에 따라 객체의 생명주기 동안 발생하는 이벤트를 명시
3. 실행
- 직사각형은 오퍼레이션(함수)이 실행되는 시간을 의미
- 직사각형이 길어질수록 오퍼레이션 수행 시간이 김.
4. 메시지
- 객체 간의 상호작용은 메시지 교환으로 이루어짐.
- 한 객체에서 다른 객체로의 메시지를 전달하여 전달받은 객체의 오퍼레이션을 수행
패키지 다이어그램
- 개념
시스템의 서로 다른 패키지들 사이의 의존 관계를 표현하기 위한 다이어그램- 구성요소
패키지, 의존관계
-> 패키지 : 요소들을 그룹으로 조직하기 위한 요소
-> 의존관계
: 하나의 패키지가 다른 패키지를 사용하는 관계
: 의존성의 성질을 나타내기 위해 스테레오 타입을 붙일 수 있다.
: 스테레오 타입에는 << import >>, << access >> 가 있다.
활동 다이어그램 ( Activity Diagram )
- 시스템이 어떤 기능을 수행하는지를 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서대로 표현하는 다이어그램
- 오퍼레이션이나 처리과정이 수행되는 동안 일어나는 일들을 단계적으로 표현
- 활동 다이어그램은 하나의 유스케이스 안이나, 유스케이스 사이에서 발생하는 복잡한 처리의 흐름을 명확하게 표현 가능
구성요소
- 시작점(Initial Node)
활동의 시작(액션이나 액티비티 시작)을 의미
하나의 다이어그램 안에는 하나의 시작점만 존재
검은색 동그라미로 표현- 전이(Transition)
실행의 흐름을 나타냄
화살표로 표현- 액션(Action) / 액티비티(Activity)
어떠한 일들의 처리와 실행을 의미
액션(Action)은 더 이상 분해할 수 없는 단일 작업,
액티비티(Activity)는 몇 개의 액션으로 분리될 수 있는 작업
모서리가 둥근 사각형으로 표현, 둥근 사각형 안에 액션이나 액티비티 명칭 기술- 종료점(Final Node)
처리의 종료를 의미
하나의 다이어그램 안에는 여러 개의 종료 노드가 있을 수 있음
검은색 동그라미를 포함한 원으로 표현- 조건(판단) 노드( Decision Node )
조건에 따른 제어 흐름의 분리를 표현
마름모로 표현하고 들어오는 제어 흐름은 한 개이고, 나가는 제어 흐름은 여러 개로 표현- 병합 노드(Merge Node)
여러 경로의 흐름이 하나로 합쳐진 것을 표현
마름모로 표현, 들어오는 제어 흐름은 여러 개이고, 나가는 제어 흐름은 한개로 표현- 포크 노드(Fork Node)
평행적으로 수행되는 흐름을 나누는 코드
굵은 가로선으로 표현하고 들어오는 액티비티 흐름은 한 개, 나가는 액티비티 흐름은 여러 개- 조인 노드(Join Node)
Fork Node로 나눠진 흐름을 다시 하나로 합치는 노드
굵은 가로선으로 표현하고 들어오는 액티비티 흐름은 여러 개이고, 나가는 액티비티 흐름은 한 개- 구획면(Swim Lane)
액티비티 수행을 담당하는 주체를 구분하는 면
가로 또는 세로 실선을 그어 구분
상태 다이어그램( State Diagram )
- 하나의 객쳋가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호작용에 따라 상태가 어떻게 변화하는지 표현하는 다이어그램
- 상태 다이어그램은 어떤 이벤트에 의해 객체 자신이 속한 클래스의 상태 변화나 객체 간 상호작용하는 과정에서의 상태 변화를 표현한다.
- 객체는 파악된 상태들 이외의 상태는 가질 수 없고, 특정 순간에는 오직 한 상태로만 존재할 수 있다.
- 객체의 상태란 객체가 갖는 속성값의 변화이다.
커뮤니케이션 다이어그램
- 커뮤니케이션 다이어그램은 시퀀스 다이어그램과 같이 동작에 참여하는 객체들이 주고받는 메시지를 표현하고, 메시지뿐만 아니라 객체 간의 연관까지 표현하는 다이어그램
- 커뮤니케이션 다이어그램은 시스템이나 객체들이 메시지를 주고받으며 시간의 흐름에 따라 상호작용하는 과정을 표현한 다이어그램.
구성요소
- 액터, 객체, 링크, 메시지
액터
- 시스템으로부터 서비스를 요청하는 외부 요소(사람, 외부 시스템)
객체
- 메시지를 주고받은 주체
- 콜론(:)을 기준으로 앞쪽에는 객체명, 뒤쪽에는 클래스명 기술
링크
- 객체들 간의 관계를 표현
- 클래스가 아닌 실제 객체와의 관계를 직접적으로 보여주는 객체들 사이의 링크
- 액터와 객체, 객체 간 실선으로 표현
- 링크에 메시지를 표현
메시지
- 객체가 상호작용을 위해 주고받는 메시지
- 메시지는 상대 객체별로 여러 개의 정의가 이루어지므로, 하나의 동일한 링크에서 여러 개의 메시지가 전달
- 화살표의 방향은 메시지를 받는 쪽으로 향하게 표현
컴포넌트 다이어그램
개념
- 시스템을 구성하는 물리적인 컴포넌트와 그들 사이의 의존 관계를 나타내는 다이어그램
- 코드 컴포넌트 기반의 물리적 구조로 표현된다.
- 실질적 프로그래밍 작업에 사용됨.
구성요소
- 컴포넌트
- 인터페이스
- 의존 관계
컴포넌트
- 탭이 달린 직사각형으로 표현
- 모든 컴포넌트는 반드시 이름이 있어야 함.
- 컴포넌트가 패키지에 포함되어 있다면 컴포넌트의 이름 앞에 패키지 이름을 붙일 수 있으며, 컴포넌트에 꼬리표 값을 달아주거나 컴포넌트 내부의 오퍼레이션을 보여줄 수도 있음.
인터페이스
- 인터페이스를 실체화한다는 의미는 실제로 동작하는 컴포넌트에 인터페이스를 적용한다는 뜻
- 컴포넌트와 인터페이스는 화살표 모양의 점선(의존 관계)로 연결
의존 관계
- 컴포넌트 사이에 의존하는 관계 표현
- 컴포넌트 사이의 의존 관계는 한 컴포넌트에 변경이 발생한 경우, 변경 범위 추적에 유용