다이어그램은 사물과 관계를 도형으로 표현한 것입니다. 여러 관점에서 시스템을 가시화한 뷰(View)를 제공함으로써 의사소통에 도움을 줍니다. 개발자 간 혹은 개발자와 비개발자 간의 소통을 위해서 효율적으로 사용됩니다. 이런 다이어긂에는 크게 2가지가 있는데요. 정적 모델링에서는 주로 구조적 다이어그램을 사용하고 동적 모델링에서는 주로 행위 다이어그램을 사용합니다.
정적 모델링
정적 모델링은 사용자가 요구한 기능을 구현하는데 필요한 자료들의 논리적인 구조를 '개발자 관점에서' 표현한 것입니다. 시스템에 의해 처리되거나 생성될 객체들 사이에 어떤 관련이 있는지를 구조적인 관점(View)에서 표현한 것입니다. 정적 모델링은 객체(Object)들을 클래스(Class)로 추상화하여 표현합니다. UML을 이용한 정적 모델링의 대표적인 것이 클래스 다이어그램입니다.
위의 정적 모델링의 클래스 다이어그램에서 + 와 - 표시가 있는데요. + 는 Public 을 의미하고 - 는 Private 을 의미합니다.
구조적(Structual) 다이어그램
클래스 다이어그램 Class Diagram : 클래스와 클래스가 가지는 속성, 클래스 사이의 관계를 표현합니다.
객체 다이어그램 Object Diagram : 클래스에 속한 사물(객체)들, 즉 인스턴스(Instance)를 특정 시점의 객체와 객체 사이의 관계로 표현합니다. 럼바우(Rumbaugh) 객체지향 분석 기법에서 객체 모델링에 활용합니다.
컴포넌트 다이어그램 Component Diagram : 모듈화된 자원을 보고 컴포넌트라고 하는데요. 예를들어 엑셀 프로그램 내에서 함수들이 있는데, 함수 이름을 찾는 것이 아니라 종류 별로 우선 찾습니다. 숫자 함수, 문자 함수 등이 있는데요. 이렇게 종류별로 묶어서 지원해주는 것은 Component 라고 합니다. 프로그래밍에서도 필요한 코드들을 가져다가 조립을 하는데, 그럴 때 필요한 것들을 종류별로 묶어서 제공되는 것을 컴포넌트라고 합니다. 컴포넌트 다이어그램은 구현 단계에서 사용되게 됩니다. 실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스를 표현합니다.
배치 다이어그램 Deployment Diagram : 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현합니다. 구현 단계에서 사용됩니다.
복합체 구조 다이어그램 Composite Structure Diagram : 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현합니다.
패키지 다이어그램 Package Diagram : 유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계를 표현합니다.
클래스 다이어그램 Class Diagram
클래스 다이어그램은 정적 모델링에서 사용하는 구조적 다이어그램 중 하나로 클래스와 클래스가 가지는 속성, 클래스 사이의 관계를 표현한 것을 의미합니다. 시스템을 구성하는 요소에 대해 이해할 수 있는 구조적 다이어그램이라고 이해할 수 있습니다. 시스템 구성 요소들을 문서화하는데 주로 사용됩니다.
클래스 다이어그램은 위와 같은 구성요소를 갖습니다.
예를들어 위와 같은 것이 대표적인 정적 모델링 - 구조 다이어그램 - 클래스 다이어그램입니다. 위의 그림을 하나씩 살펴보겠습니다. 야구선수 클래스만 클래스명, 속성, 메서드가 표현되어 있습니다. 리그와 팀의 관계를 보면 리그는 한 개가 있고, 팀은 10개가 있는 것을 볼 수 있습니다. 리그와 경기장의 관계를 보면, 리그는 한 개 이상의 경기장에서 경기가 진행된다는 것을 알 수 있습니다. 팀과 경기의 관계를 보면 팀은 2개개 경기는 한 번 이상의 경기를 진행한다는 것을 알 수 있습니다. 팀과 야구선수의 관계를 보면 팀은 한 개이고, 야구선수에는 1명 이상이라는 것을 알 수 있습니다. 주전선수와 후보선수는 일반화관계로 야구선수와 연결되어 있는 것을 볼 수 있습니다. 또한 야구선수 내부에 { } 중괄호로 묶여 있는 부분이 있는 것을 확인할 수 있는데요. 클래스의 제약조건을 직접 기술할 때 중괄호로 표현할 수 있습니다. 또한 연봉조정이라는 메서드에는 제약조건이 따로 걸려 있는 것을 확인할 수 있습니다. 위의 그림에서 클래스 다이어그램을 완벽하게 표현한 것은 야구선수 밖에 없고 나머지는 생략한 것을 볼 수 있습니다. 이렇게 작성된 것들을 클래스 다이어그램이라고 하며, 작성된 클래스 다이어그램을 보고 코드를 작성할 수 있게 됩니다. 이렇듯, 클래스 다이어그램은 개발자 입장에서 작성하는 것입니다.
연관 클래스
연관 클래스는 연관 관계에 있는 두 클래스에 추가적으로 표현해야 할 속성이나 오퍼레이션이 있는 경우 생성하는 클래스입니다. 두 클래스의 연관 관계를 나타내는 선의 가운데로부터 점선을 연관 클래스로 이어서 표시합니다. 연관 클래스의 이름은 연관 관계의 이름을 이용해 지정합니다.
예를들어, 팀 클래스와 경기 클래스가 있을 때, 팀이 경기에 참여하는 상황에서 참여횟수와 참여결과 속성을 어디에 두어야 할까요? 먼저 '팀' 클래스에 참여횟수와 참여결과 속성을 둔다면 팀이 어느 경기에 참여한 것인지 모호해집니다. 또한 '경기' 클래스에 참여횟수와 참여결과 속성을 둔다면 어느 팀이 참여한 것인지 모호해집니다. 이런 경우 '팀'이나 '경기' 클래스의 속성이 아닌 '참여하다'라는 연관 관계에 대한 연관 클래스를 만들어 '참여횟수'와 '참여결과' 속성을 연관 클래스의 속성으로 다루면 됩니다.
동적 모델링
동적 모델링은 시스템의 내부 구성 요소들의 상태 변화 과정과 과정에서 발생하는 상호 작용을 표현한 것입니다. 시스템 내부 구성 요소들 간에 이루어지는 동작이라는 관점(View)에서 표현합니다. 시스템이 실행될 때 구성 요소들 간의 메시지 호출, 즉 오퍼레이션을 통한 상호 작용에 초점을 둡니다.
동적 모델링에는 시퀀스 다이어그램, 커뮤니케이션 다이어그램, 상태 다이어그램 등이 있습니다.
행위 다이어그램 Behavioral Diagram
유스케이스 다이어그램 Use Case Diagram : 사용자의 요구를 분석하는 것으로, 기능 모델링 작업에 사용합니다. 사용자(Actor)와 사용 사례(Use Case)로 구성됩니다.
시퀀스 다이어그램 Sequence Diagram : 상호 작용하는 시스템이나 객체들이 주고받는 메시지를 표현합니다.
커뮤니케이션 다이어그램 Communication Diagram : 동작에 참여하는 객체들이 주고받는 메시지와 객체들간의 연관관계를 표현합니다.
상태 다이어그램 State Diagram : 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지를 표현합니다. 럼바우 Rumbaugh 객체지향 분석 기법에서 동적 모델리에 활용됩니다.
활동 다이어그램 Activity Diagram : 시스템이 어떤 기능을 수행하는지 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현합ㄴ디ㅏ.
상호작용 개요 다이어그램 Interaction Overview Diagram : 상호작용 다이어그램 간의 제어 흐름을 표현합니다.
타이밍 다이어그램 Timing Diagram : 객체 상태 변화와 시간 제약을 명시적으로 표현합니다.
시퀀스 다이어그램 Sequence Diagram
동적 모델링 - 행위 다이어그램 - 시퀀스 다이어그램은 시스템이나 객체들이 메시지를 주고받으며 상호 작용하는 과정을 그림으로 표현한 것입니다. 시스템이나 객체들의 상호 작용 과정에서 주고받는 메시지를 표현합니다. 각 동작에 참여하는 시스템이나 객체들의 수행 기간을 확인할 수 있습니다. 클래스 내부에 있는 객체들을 기본단위로 하여 그들의 상호 작용을 표현합니다.
시퀀스 다이어그램의 구성요소는 위와 같습니다.
액터 Actor : 액터는 시스템으로부터 서비스를 요청하는 외부 요소로, 사람이나 외부 시스템을 의미합니다.
객체 Object : 객체는 메시지를 주고받는 주체들을 의미합니다. 객체는 사각형을 이용해서 표현합니다.
생명선 Lifeline : 예를들어, 하나의 객체가 로그인을 했을 때 주문을 할 때까지 로그인 화면이 보이는 것이 아니라, 로그인에 성공을 하면 로그인 화면은 사라집니다. 이런 화면이 언제부터 언제까지 메모리 안에 존재하는지를 나타내는 것이 생명선입니다. 객체들의 바로 아래에 점선을 그어서 표시를 합니다.
실행 상자 Active Box(활성 상자 라고도 합니다) : 실행 상자는 객체가 메시지를 주고받으며 구동되고 있음을 표현합니다.
메시지 Message : 메시지는 객체가 상호 작용을 위해 주고받는 메시지를 의미합니다. 이름 그대로입니다. 화살표를 사용합니다. 실선은 요청 메시지를 의미하고, 점선 화살표는 반환 메시지를 표현합니다.
객체 소멸 : 객체 소멸은 X 표식을 활용하여, 해당 객체가 메모리에 더 이상 존재하지 않음을 표현한 것입니다.
프레임 Frame : 프레임은 다이어그램의 전체 또는 일부를 묶어서 표현한 것을 의미합니다.
시퀀스 다이어그램의 예시를 보면 위와 같습니다. 회원이라는 액터 오른쪽으로 객체들이 있습니다. 로그인 화면은 로그인이 완료되면 소멸되는 표식이 되어 있는 것을 볼 수 있고, 로그인 화면이라는 객체는 X를 만날 때까지 실행상태인 것을 활성 상자를 통해 알아볼 수 있습니다.
스테레오 타입 (Stereotype)
스테레오 타입은 UML에서 표현하는 기본 기능 외에 추가적인 기능을 표현하는 것이다. 길러멧(Guilemet)이라고 부르는 겹화살괄호 (<< >>) 사이에 표현할 형태를 기술 한다.