개발지식/이것저것

UML다이어그램

뜨거운 개발자 2022. 12. 19. 20:30

시작하며

안녕하세요 42서울 카뎃 7기 조신입니다. 오늘은 코드를 짜기 전에 많은 개발자들이 사용하는 다이어그램 그리곤 하는데요. 그에 대한 표준에 대한 이해를 위한 글을 작성해보고자 합니다.

UML의 이해

모델이란

현실을 단순화(기사화)를 통해서 개발할 시스템에 대한 계획이나 구상에 대한 내용을 나타낸 것이다.

모델링 방법론

모델링을 하는 방법은 크게 3가지로 나뉘는데

  1. OMT : 시스템이 요구하는 객체를 완벽하게 기술하는 방법으로 객체 모델링 동적 모델링 기능 모델링의 종류가 있다.
    1. 객체 모델링 : 시스템에서 필요한 객체를 찾아서 객체의 속성과 객체들 사이의 관계를 통해 모델링 하는 방법이다.
    1. 동적 모델링 : 객체 모델링에서 나타나는데 객체들의 행위와 상태를 포함하고 라이프사이클의 정보를 보여준다.
    1. 기능 모델링 : 각 객체의 변화로 인해서 각 객체들의 상태가 다른 상태로 전이 됐을 때 수행되는 동작들을 기술하는 모델링이다.
  1. 부치 방법론 : 시스템은 몇개의 view로 분석된다.
    1. 모델다이어그램으로 나타낸다.
    1. 분석보다는 설계에 중점이 있어서 객체지향방법론에 대한 광범위한 이론적 배경을 제시한다.
  1. OOSE : Usecase를 강조한다.
    1. Usecase는 외부 액터와 상호작용하는 시스템의 요구사항을 정의한다.
    1. 시스템 테스트와 검증하는 단계에서 사용된다.
    1. 대규모 시스템 개발에 이점이 많다.
UML 모델링 특징

UML은 객체지향 설계를 위한 표준 언어입니다. 소프트웨어 시스템의 산출물을 가시화 명세화 구축 문서화 하는데 사용됩니다.

  • 가시화 : 소프트웨어 개념을 시각적으로 보이게 하며 표준이 정해져 있어 개발자들간의 소통이 원활합니다.
    • 소프트웨어의 개념 모델을 시각적인 그래픽 형태로 표기하고, 표기법에 사용하는 심벌에 명확한 정의를 부여하는 것 입니다. 이것을 통해 개발자들은 원활한 소통을 할 수 있습니다.
  • 명세화 : 소프트웨어 개발을 위해서 단계별로 필요한 모델들을 완전히 표시하는 역활을 합니다.
    • 정확하고, 명백하며, 완전한 모델을 만드는 것을 말합니다. UML은 소프트웨어 개발을 위한 분석, 설계, 구현 각 단계에서 필요한 모델을 정확하고 완전하게 명세하는 역할을 합니다.
  • 구축 : UML을 그린걸 바탕으로 코드를 생성하거나 코드를 다시 UML로 바꿀 수 있습니다.,
    • 다양한 프로그래밍 언어로 표현하는 것 입니다. 또한 이미 구축되어 있는 소스코드를 UML로 역변환하여 분석하는 역공학(Reverse Engineering)도 있습니다.
  • 문서화 : 요구사항들을 잘 표현하며 테스트를 할 수 있는 역활을 합니다.
    • 요구사항을 표현하고 시스템을 테스트하는 언어도 제공합니다.

모델링 요소와 다이어그램

모델링 요소란

  • 추상적 객체지향 모델링언어
  • 다이어그램으로 표현되며 형식적 완결성을 갖추고 있음.
  • 개발과정이나 개발언어에 독립적이다.
  • 확장성이 우수하고 사용자 정의가 자유롭다.
  • 90년대 많은 방법론들의 경쟁속에 표준이 됐다.

다이어그램

  • 다이어그램은 통신 전달 돼야할 정보를 개념화 해서 표현한다.
  • 각각의 다이어그램은 서로 연관된 작은 부분에 집중되어 표현된다.
  • 보통 전체 시스템을 표현하기 위해서는 여러 다이어그램이 필요하다.
UML의 구성요소

UML의 구성요소는 크게 3가지로 나눠서 설명을 할수가 있습니다. (사물, 관계, 다이어그램)

  • 모델링 요소 (사물)
    • 구조적 : 시간에 따라 변하지 않는 구성요소
    • 행위적 : 행위와 과정 표현 (오늘 볼 껀 Use case이다)
    • 조직적 :
    • 방향과 관계 : 객체간의 상호작용
우선 사물에 대해서 먼저 이야기 해보겠습니다.
  1. 구조사물(Structural) : 시스템의 구조를 표한하는 사물입니다(클래스, 인터페이스, 통신, 유스케이스, 노드 등)
  1. 행동사물(Behavioral) : 시스템의 행위를 표현하는 사물입니다.(교류, 상태 머신)
  1. 그룹사물 (Grouping) : 시스템의 개념을 그룹화 하는 사물(패키지)
  1. 주해사물(Annotation) : 시스템에 부가적으로 개념을 설명하는 사물 (노트, 주석)
  • Annotation

    자바에서 사용될 때의 어노테이션은 코드 사이에 주석처럼 쓰여서 특별한 의미, 기능을 수행하도록 하는 기술이다. 실제로 어노테이션은 사전적으로는 주석이라는 의미이다.

다음으로는 관계에 대해서 이야기 해보겠습니다
  • 의존 관계(Dependency) :
    • 두 사물 간의 의미적 관계로, 한 사물의 명세서가 바뀌면 그것을 사용하는 다른 사물에게 영향을 끼치는 것을 말합니다.
    • 예시) TV와 리모컨의 관계가 있습니다.
  • 연관 관계(Association Relationship) :
    • 두 사물 간의 구조적 관계로, 어느 한 사물 객체가 다른 사물 객체와 연결되어 있음을 말합니다.
    • 연관을 표현할 때는 이름과 역할 그리고 다중성을 표기합니다.
    • ('has-a')관계라고도 합니다.
    • 예시) 자동차와 부품들의 관계가 있습니다.
  • 일반화 관계(Generalization Relationship) :
    • 일반화된 사물과 좀 더 특수화된 사물 사이의 관계를 말합니다. ('is-a')관계라고도 합니다.
    • 예시) 부모 클래스로서의 자동차와 자식클래스로서의 택시, 버스, 트럭 등
  • 실체화 관계(Realization Relationship) :
    • 한 객체가 다른 객체에 의해 오퍼레이션을 수행하도록 지정하는 것 입니다.
    • 예시) TV의 행동중 일부가 리모컨의 행동을 실체화 함
    • 클래스(TV)와 인터페이스(리모컨)가 가지는 관계가 실체화 관계
마지막으로 다이어그램은 두가지로 나눌 수 있습니다.

구조 다이어그램 : 정적 모델링을 위한 다이어그램 행위 다이어그램 : 동적 모델링을 위한 다이어그램

UML 모델링의 이해(★★★)

네 가지 측면

  • 정적 측면 : 모델링 대상 범위에서 객체의 구조와 관계를 나타냄
  • 동적 측면 : 이벤트가 발생함에 따라 객체의 상태 변화를 나타냄
  • 기능적 측면 : 사용자의 측면에서 본 시스템의 행동을 나타냄
  • 물리적 측면 : 시스템 실행을 위해 필요한 컴퓨터와 기억 매체의 공간적인 배치 기술

 

다이어그램의 종류

UML 다이어그램 계층도는 크게 구조와 행위로 나눠진다.

정적 모델링 도구(★★★★★)

정적 모델링구조의 종류로는 클래스 다이어그램, 오브젝트 다이어그램, 컴포넌트 다이어그램, 배치 다이어그램이 있습니다.

UML의 구조 다이어그램에 해당하며 시스템에 지속적이고 정적인 측면을 모델링하는 특징이 있다.

클래스 다이어그램 (Class Diagrams)

객체지향 모델링에서 가장 많이 사용하는 개념입니다. 클래스는 객체지향 프로그램에서 속성과 행위(Method)를 가지는 하나의 객체 단위입니다. 즉 클래스의 구성요소는 이름 속성 메서드입니다.

시스템의 클래스를 표현: 추상화와 분류(classification)의 결과입니다. • 클래스 간의 상호 관계를 표시하며 • 클래스의 메소드/행위(operations, methods) 및 속성(attributes, properties)을 표시해서 보여줍니다. • 도메인 모델의 형태로 도메인 개념 탐색개념/분석 모델 형태의 요구사항 분석객체 지향 또는 객체 기반 소프트웨어의 세부 설계 묘사

  • 클래스 다이어그램 예시
오브젝트 다이어그램(Object Diagrams)

실제 클래스로부터 생성된 개체간의 관계를 표현한다.

오브젝트는 클래스의 인스턴스입니다. (즉 추상적인 개념인 클래스를 구체화한 형태입니다)

각각의 인스턴스를 다뤄야할 때 오브젝트 다이어그램을 씁니다.

오브젝트 다이어그램은 특정시점의 오브젝트들의 구조적인 상태를 표현합니다.

  • 오브젝트 다이어그램 예시
컴포넌트 다이어그램(Component Diagrams)

소프트웨어 구성요소들 사이의 인터페이스들과 관계를 표현한다.

연관성이 높은 기능과 관련된 데이터를 하나로 묶어 처리하도록 만들어진 단위입니다.

모든 컴포넌트는 반드시 다른 컴포넌트와 통신 할 수 있는 인터페이스가 정의되어 있으며, 컴포넌트의 인터페이스의 구현은 컴포넌트를 구성하는 내부에 캡슐화 되어있다.

인터페이스에 의해서 기능이 정의된, 독립적으로 개발, 배포, 조립 가능한 시스템의 구성단위입니다.

  • 컴포넌트 다이어그램의 예시
패키지 다이어그램(Package diagram)

복잡한 클래스를 묶어 패키지에 담고 패키지들 사이의 관계를 표현한 다이어그램이다.

정점은 클래스의 묶음인 패키지, 방향이 있는 간선은 패키지의 의존관계

복잡한 클래스를 묶어 서브시스템으로 조직화 하는 데 사용됨

  • 패키지 다이어그램 예시
배치 다이어그램(Deployment Diagrams)

소프트웨어 배포와 관련된 계획을 표현한다.

노드를 입체적으로 표현하고, 그 사이를 의존 화살표와 접속 관계를 나타내는 실선으로 연결해 이들 간의 통신 관계를 나타낸 것입니다. 이를 다르게 설명하면 네트워크, 하드웨어 또는 소프트웨어들을 실행 파일 수준 컴포넌트들과 함께 표현한 것 입니다.

  • 배치 다이어그램의 예시

 

intereation Diagrams

 

동적 모델링 도구(★★★)

동적 모델링 도구는 행위 다이어그램(Behavior Diagram)중 인터랙션 다이어그램(Interaction Diagrams)에 속해있습니다.

시간의 흐름에 따라서 유동적으로 변화하는 객체의 상태나 행위, 객체 간의 상호작용 등을 표현합니다.

유즈케이스 다이어그램(Usecase Diagram)
  • 액터의 관점에서 본 시스템의 기본적인 행동을 기술한 것 입니다.
  • 개념 레벨의 유스케이스는 이용자의 요구를 기술하는 수단입니다.
  • 필요한 usecase(기능요구)가 모두 적혀있는지 확인합니다.
  • Use case Diagram 예시

 

순차 다이어그램(Sequence Diagram)

객체 간의 동적 상호작용을 시간의 흐름에 따라 나타낸 것입니다.

특징으로는 객체의 메서드와 속성을 상세하게 정의한 것이다.

객체의 책임(Responsibility) : 순차 다이어그램의 객체는 다른 객체가 의뢰하는 일을 처리하는 과정입니다.

또한 순차 다이어그램은 유스케이스를 실현합니다.

  • sequence diagram의 예시
통신 다이어그램(Communication Diagram)

순차 다이어그램이 메시지에 대한 시간적 순서를 나타낸 것이라면, 통신 다이어그램은 객체들 사이에 주고받는 메시지를 표현한 것 입니다. 객체 와 객체 사이를 연결하는 링크 그리고 그 링크 사이에 오가는 메시지 로 구성됩니다.

  • 통신 다이어그램 예시
상태 다이어그램(Statechart Diagram or State machine)

객체의 상태가 이벤트 발생 혹은 시간의 경과에 의해 어떻게 변화하는지를 나타내는 것입니다.

특정 객체가 생성하여 소멸할 때까지 라이프사이클을 모델화 한 것 입니다.

  • 표현하는 방법은 객체가 가질 수 있는 상태를 모서리가 둥근 사각형으로 나타내고 전이(상태의 변화)를 나타내는 화살표와 화살표 위에 이벤트와 조건 등을 표시합니다.
  • 상태 다이어그램 예시
활동 다이어그램(Activity diagram)

소프트웨어에서 제어 흐름을 표현하기 위한 다이어그램이다.

순서도와 매우 모양이 비슷한 형태입니다. 전통적으로 사용하던 순서도를 객체지향 스타일로 개선시킨 형태입니다,.

  • 활동 다이어그램 예시

     

 

UML 모델링 절차

A. 분석과정(analysis)

  • 실세계(real world) 객체들이 표현됨
  • 실세계 도메인 개념을 있는 그대로 다룬다.
  • 클래스는 객체의 집합이며 클래스에는 속성과 작업이 포함됩니다.
  • 클래스의 목적/의도는 담당 임무에 따라 정의된다
  • 관계는 클래스(객체)간의 링크 집합입니다.

B. 사양 결정과정

  • 실세계와 소프트웨어 객체가 혼재되어 표현
  • 실세계의 일들이 자동화 되는 경계들이 표현된다.
  • 구현되어야 할 시스템에 대해 기술된다.
  • 캡슐화 과정을 겪는다.
  • 클래스는 소프트웨어 개체에 대한 추상화 경계 및 캡슐화를 정의합니다.

C. 구현과정(implementation)

  • 소프트웨어 객체들을 주로 다룬다.
  • 모델은 개발도니 솔루션에 개념을 집중한다.
  • 모델은 실제 개발되는 소프트웨서 시스템을 설명합니다.

실제 구현에 사용할 클래스들을 명확히 정의 하고 관계를 표시합니다!

다이어그램을 활용한 모델링 절차

  1. 초기 클래스 다이어그램 작성
  1. 유스케이스 다이어그램 작성
  1. 클래스 다이어그램 변경
  1. 순차 다이어그램과 통신 다이어그램 작성
  1. 인터페이스를 식별(클래스 다이어그램 변경)
  1. 활동 다이어그램과 상태 다이어그램을 작성
  1. 컴포넌트 다이어그램 및 배치 다이어그램 작성

 

 

UML 클래스 관계
  1. 일반화(Generation) : 일반적인 것(동물)과 특화된 것(포유류)와의 관계 — 상속관계
  1. 실체화(Realization) : 인터페이스와 그것을 구현한 것과의 관계 — 구현관계
  1. 의존관계(Dependency) : 어떤 클래스가 다른 클래스를 참조하는 관계 — 참조 관계
  1. 연관관계 (Association) :
    1. 직접연관- 화살표 방향에 따라 참조를 나타냄
    1. 집합연관 : whole(몸통)과 part(액세서리)의 관계(몸통이 죽어도 부분은 살아담는다.)
    1. 복합연관 : whole(몸통)과 part(신체일부분)의 관계 (몸통이 죽으면 부분도 같이 죽는다.

Uploaded by

N2T
728x90