본문 바로가기
헝클어진 알고리즘

UML(Unified Modelling Language)

by 배굿맨 2021. 11. 20.

UML은 통합된 모델링 언어로 해석할 수 있다. 기존에 모델링 언어가 여러개 있었을 것 같고 이러한 언어를 통합한 것이다. 그러면 모델링은 또 뭐야?

 

옷을 디자인하는 사람은 옷을 만든 후, 모델에게 입혀서 패션쇼에 선보인다. 자. 이 옷이 이런거야! 

공학자는 레이저다이오드의 내부구조와 이에 따른 레이저 발생을 수학적으로 구현 및 컴퓨터 프로그래밍 하여(모델링) 그 내부구조를 변화시키면서 레이저의 상태 및 그 출력을 예상할 수 있다.

프로그래머는 사용자의 요구사항을 도형을 이용해서 표현(모델링) 한 후,  개발자와 사용자간의 명확한 의사교환에 사용하고, 그 모델을 프로그래밍 개발의 기준점이 되도록 한다. 이 때 사용하는 것이 UML이다.

 

사전적 의미의 모델링은 현실세계의 추상화된 반영이다.

 

UML은 OOP와 밀접한 관계에 있다. UML은 OOP의 성장을 도모함을 목적으로 하기 때문이다. 그러면 잠시 OOP에 대해서 알아보자.

 

OOP(Object Oriented Programming)는 프로그래밍 패러다임이다. 패러다임은 현재 보편적인 큰 생각(사고)이다. 즉, 프로그래밍 할 때 OOP를 이용해서 하자는 것이다. 

 

그럼 OOP의 사전적 의미는? Object 중점으로 프로그래밍 하라는 것이다. 흠. 그럼 Object는 무엇인가? Object는 사람이 생각하는 모든 것이다. 계산기는 사용자의 입력을 받아서 계산을 한 후 그 결과를 보여준다. 즉, 사칙연산을 하는 부분, 입력부, 출력부 모두 Object이다.

 

그러면 OOP 이전의 패러다임은 무었였을까? 명령어들의 순차적인 나열로 보면 된다. 같은 계산기 프로그램을 만들더라도 프로그래머는 입력부에서 키를 받아드리고 이 값을 사칙연산 한 후, 그 최종값을 출력해 주는 모든 명령어를 손수 짜 넣어 주게 된다.

 

그럼 현재는? 윈도우즈에서 GUI를 이용하면, 입력부와 출력부는 별도로 만들필요가 없다. 가져오면 된다. 그럼 프로그래머는 사칙연산만 해주면 된다.

 

다시 UML로 돌아와서 정리하면 UML은 사람이 현실세계에서 추상화한 모든것을 도형으로 나타낸 시각적 모형화 언어이다.

 

코가 길고 몸이 크며 큰 귀를 가진것은 코끼리이다. 왜 코끼리라고 답했을까? 코끼리의 특징이 코끼리를 나타내기 때문이다. 

 

가시화 언어, 명세화 언어, 구축 언어, 문서화 언어는? 하면 UML이다. UML의 특징이다. 

 

가시화 언어 : 소프트웨어의 Object를 시각적인 그래픽 형태로 보여준다. 표기법에 있어서 심볼마다 명확한 정의가 있어서 개발자간에 명확한 의사소통을 할 수 있다.

 

명세화 언어 : 명세화라는 것은 세밀하지면 명확한 모델을 만드는 것이다. SW 개발과정인 분석, 설계, 구현 단계의 각 과정에는 명세화 과정이 포함되는데 이러한 명세 문서를 만드는데 사용된다.

 

구축 언어 : 상기의 명세 문서를 이용하면 프로그램 소스코드로 변환해서 구축하는것이 용이하다.

 

문서화 언어 : 시스템의 아키텍처와 이에 대한 모든 상세 내역을 보여준다. 요구사항 내역을 보여준다. 시스템 테스트 내역을 확인할 수 있다. 그리고 모든 일련의 과정을 문서로 남겨 그 내역을 확인 할 수 있다.

 

UML 요소

 

 

원자를 이해하기 위해서 어떤식으로 접근하는지 보자. 먼저 원자는 Thing이 있다. 원자와 전자. 그리고 원자는 더 작은 Thing이 있다. 양성자와 중성자다.

그리고 이 Thing들은 Relationship을 가진다. 전자는 원자 주위를 돈다. 중성자는 양성자를 묶어준다.

마지막 Thing과 Relationship을 Diagram(도형)으로 표현해준다. 전자는 원자 주위에 돌지만 에너지 준위가 낮은 곳부터 채워지며 파울리의 배타 원리가 적용된다. (너무 재밌게 본 동영상이라 https://www.youtube.com/watch?v=B7aIWMgAPoM 링크를 건다.)

 

마찬가지로 UML을 알고싶다면, UML의 요소를 알면 된다.

 

Thing

주어, 동사, 문장(도서)과 주석이 있다.

 

Structural Things(구조 사물) : 주어와 목적어가 될 수 있는 것들로 보면 된다. Class, Use Case, Component, Node

Behavioral Things(행동 사물) : 동사가 될 수 있는 것들. 시간과 공간에 따른 행위 요소를 표현.

Grouping Things(그룹 사물) : 요소들을 묶어서 표현, Package, 라이브러리, 네임스페이스

Annotation Things(주해 사물) : 부가설명, 주석, 메모

 

Relationship

구성요소들간의 연관성을 표현한다.

 

  • Association Relationship(연관 관계)

연관성을 나타낸다. 

 

화살표가 한 개 있을 때, Unidirectional 연관이며, 자신의 클래스가 다른 상대방의 인스턴스를 가리킨다.

화살표가 없거나 모두 있을때는 Bidirectional 연관이며, 서로간에 상대방의 인스턴스를 가리킨다.

사람은 집을 소유한다. 집은 집설계도에서 나온 하나의 인스턴스이다. 사람이 집에 가서 잔다고 생각하자.

학교에는 많은 선생님과 많은 학생들로 구성되어 있다. 

 

  • Dependency Relationship(의존 관계)

점선화살표이다.

하나의 사물과 다른 사물이 소유관계는 아니나, 사물의 변화가 다른 사물에게 영향을 미친다.

세금부과는 세금법에 의존한다. (화살표 방향이 맞는지는 더 공부해야 할 것 같다...)

 

  • Generalization Relationship(일반화 관계)

하나의 사물이 다른 사물에 대하여 일반적인지 구체적인지를 표현한다. 점선에 텅빈 삼각형 화살표를 가진다.

 

  • Aggregation Relationship(집합 관계)

연관 관계 중, 전체 집합의 부분 집합을 의미한다. 속이 빈 다이아몬드 실선 화살표를 사용한다.

 

타이어는 자동차의 부속품이나 별도로 존재 할 수 있다. 

 

  • Composition Relationship(포함 관계)

집합 관계 중, 포함하는 쪽과 포함받는 쪽은 같은 생명주기를 같는다. 속이 꽉찬 다아아몬드 실선 화살표를 사용한다.

 

자물쇠가 없다면 키도 소용없다.

 

  • Realization Relationship(실제화 관계)

사물이 할 수 있거나 해야 하는 기능(행위, 인터페이스)으로 서로를 그룹화 할 수 있는 관계이다. 사물에서 기능쪽으로 속이 빈 삼각형 점선 화살표를 그린다.

 

Diagram

 

구성요소를 표현하기 위한 구조 다이어그램과 행위를 표현하기 위한 행위 다이어그램으로 나눌 수 있다. (속성과 메소드)

 

구조 다이어그램

  • 클래스 다이어그램 (Class Diagram) : 클래스 명세와 클래스 간의 관계를 표현
  • 객체 다이어그램 (Object Diagram) : 인스턴스 간의 연관 관계를 표현
  • 컴포넌트 다이어그램 (Component Diagram) : 파일과 데이터베이스, 프로세스와 스레드 등의 소프트웨어 구조를 표현
  • 배치 다이어그램 (Deployment Diagram) : 하드웨어와 네트워크 등 시스템의 물리 구조를 표현
  • 복합 구조 다이어그램 (Composite Structure Diagram) : 전체-부분 구조를 가진 클래스를 실행할 때의 구조를 표현
  • 패키지 다이어그램 (Package Diagram) : 패키지 간의 연관 관계를 표현

 

행위 다이어그램

  • 유스케이스 다이어그램 (UseCase Diagram) : 시스템이 제공하는 기능과 이용자의 관계를 표현
  • 액티비티 다이어그램 (Activity Diagram) : 일련의 처리에 있어 제어의 흐름을 표현
  • 시퀀스(순차) 다이어그램 (Sequence Diagram) : 인스턴스 간의 상호 작용을 시계열로 표현
  • 커뮤니케이션 다이어그램 (Communication Diagram) : 인스턴스 간의 상호 작용을 구조 중심으로 표현
  • 상호작용 개요 다이어그램 (Interaction Overview Diagram) : 조건에 따라 다르게 동작하는 시퀀스 다이어그램을 액티비티 다이어그램안에 포함하여 표현
  • 타이밍 다이어그램 (Timing Diagram) : 인스턴스 간의 상태 전이와 상호 작용을 시간 제약으로 표현
  • 상태 머신 다이어그램 (State Machine Diagram) : 인스턴스의 상태 변화를 표현

참조

https://velog.io/@hanblueblue/UML-UML-%EA%B8%B0%EC%B4%88#uml%EC%9D%B4%EB%9E%80

 

[UML] UML 기초

UML기초 개념 및 UseCase Diagram 작성하기

velog.io

https://onecellboy.tistory.com/343?category=599122 

 

[UML] Class Diagram 클래스 다이어그램

동영상 강좌보고 2년전에 정리했던 자료인데 노트를 이제야 발견했다... Class Diagram 개요 - 시스템의 논리적인 구조(클래스)를 표현한다. - 객체지향 개발에서 가장 공통적으로 많이 사용된다. - c

onecellboy.tistory.com

 

'헝클어진 알고리즘' 카테고리의 다른 글

C 포인터  (2) 2023.02.02
빅오 표기법(Big-O notation)  (0) 2023.01.31
함수의 파라미터와 아규먼트의 차이  (0) 2021.09.24
음수의 보수표현  (2) 2021.09.08
정보처리기사 최종 합격  (0) 2020.09.04