UML 배워보기 시리즈 #1 UML과 다이어그램의 종류

Seolang2·2023년 1월 30일
0

UML Diagram

목록 보기
1/3
post-thumbnail

서론

컴퓨터 공학을 배웠다면 아마 대부분은 한 번쯤 UML 다이어그램을 듣거나 보셨을 겁니다.

UML 다이어그램은 개발 과정에서 프로그램을 문서화 하는데 중요한 역할을 하지만, 자세히 배운 분들이 아니라면 과제나 프로젝트에서 "대충 이렇게 구현해라~" 하는 정도로만 인식하셨을 겁니다.

[1. 과제에서 자주 보던 다이어그램들]

이에 이번 시리즈를 통해 UML 다이어그램의 종류들과 기호, 다이어그램의 해석 방법에 대해 소개하고자 합니다.

UML이란?

UML은 Unified Modeling Language(통합 모델링 언어)의 약자로 1997년, OMG(Object Management Group) 표준화 기구에서 모델을 만드는 표준 언어로 채택되었습니다.

UML은 객체 지향 소프트웨어를 개발할 때 시스템과 산출물을 명세화, 시각화, 문서화할 때 사용합니다. 산업의 표준으로 선정되어 직접 설계/개발하지 않아도 UML에 대해 이해하고 있다면 표준화 된 문서를 통해 시스템을 어느 정도 이해할 수 있습니다.

[2. UML 다이어그램의 종류]

UML 다이어그램은 모델의 구조와 동작 메커니즘을 다이어그램을 통해 사람이 시각적으로 이해 할 수 있도록 나타냅니다. 그리고 이를 표현하는 여러 다이어그램의 종류가 정의되어 있습니다.

다이어그램은 크게 시스템의 구성 요소와 구조 등을 표현하는 Structure Diagram, 동작의 변화와 상호작용 등을 나타내는 Behavior Diagram 2가지로 구분하며, 이에 다시 각각 7가지의 하위 다이어그램이 존재합니다.

이들 중 자주 사용하는 7 가지는 다음과 같습니다.

  • Class
  • Component
  • Deployment
  • Use Case
  • Activity
  • Sequence
  • Collaboration

위 7 가지 다이어그램의 내용은 향후 시리즈를 통해 보다 자세히 다뤄보겠습니다.

UML 다이어그램의 사용

UML은 개발을 진행하며 다음과 같은 상황에서 프로그램을 나타내기 위해 사용할 수 있습니다.

  • 다른 사람들과의 의사소통 또는 설계 논의
  • 전체 시스템의 구조 및 클래스의 의존성 파악
  • 유지보수를 위한 설계의 백엔드 문서

그렇다면 구체적으로 어떤 식으로 다이어그램을 사용하는지 간단한 예제를 통해 보도록 합시다.

예를 들어 동물, 오리, 물고기를 나타내는 프로그램을 개발하려고 하며, 여러분은 팀원들에게 이 프로그램이 어떤 클래스를 가지고 각각의 클래스는 어떤 역할을 하는지 설명해야 합니다.

먼저 글로 된 문서로 설명을 하자면 아래와 같이 적을 수 있습니다.

  • Animal 클래스를 정의한다
    • 나이를 나타내는 Int 타입 age와 성별을 나타내는 String 타입 gender 인스턴스를 가진다
    • 포유류인지 출력하는 메소드 void isMammal()를 정의한다
    • 매개변수로 String 타입을 받아 동물을 소개하는 void introduce(String) 함수를 정의한다
  • Duck 클래스를 정의한다
    • Duck 클래스는 Animal 클래스를 상속받는다
    • 부리색을 나타내는 String 타입의 beakColor 인스턴스를 “yellow”값을 기본으로 가진다
    • 헤엄치기 메소드 void swim()과, 꽥 하고 우는 메소드 void quak()을 정의한다
  • Fish 클래스를 정의한다
    • Fish 클래스는 Animal 클래스를 상속받는다
    • 피트 단위의 크기를 나타내는 Int 타입 sizeInFt 인스턴스를 가진다
    • 헤엄치기 메소드 void swim()를 가진다.

만약 여러분의 동료가 자바 수업을 성실히 들었고, 어느 정도 실습을 해보았다면 위 설명을 보고 프로그램을 작성할 수 있을 것입니다. 하지만 클래스, 인스턴스, 매개변수가 생길 때, 클래스끼리 상속을 하거나 구현을 한다면 이에 대한 설명을 매번 추가해야 헤 글이 점점 길어질 것입니다.

💡 Duck 클래스는 Animal 클래스를 상속받는다. 이때 꽥 하고 우는 소리를 출력하는 quak() 메소드를 가지고 이는 매개변수는 없고 리턴 타입은 void이고…

매일 계속되는 야근에 지친 동료는 긴 글을 읽는 것이 달갑지 않으며, 여러분의 말이 길어질수록 점점 집중력이 흐려집니다. 이에 여러분은 Class Diagram으로 구상한 프로그램을 그려 동료에게 보여주기로 합니다.

[3. Class Diagram]

이제 여러분의 동료는 한눈에 여러분이 어떤 프로그램을 만들고 싶은지 알 수 있습니다.

💡 Duck과 Fish는 Animal 클래스를 상속받고, Duck 클래스는 swim()과 quak()를 가지고 있구나!

동료는 Duck 클래스의 swim()라는 메소드명과 옆의 void라는 단어만 보고도 이 메소드가 어떤 리턴 타입을 가지는지, 어떤 동작을 할지 예상할 수 있었습니다.

그리고 동료는 그 자리에서 다이어그램을 그대로 코드로 옮겨 프로그램을 완성해 보았습니다.

// Animal 클래스 정의
public class Animal {
	public int age;  // 나이
	public String gender;  // 성별

	// 포유류인지 출력
	public void isMammal() {
		...
	}

	// 동물 내용을 소개
	public void introduce(String) {
		...
	}
}
// Duck 클래스 정의
public class Duck extends Animal {
	public String beakColor = "yellow"; // 노란색이 기본값인 부리색
	
	// 수영하기
	public void swim() {
		...
	}

	// 꽥 하고 울기
	public void quak() {
		...
	}
}
// Fish 클래스 정의
public class Fish extends Animal {
	public int sizeInFt; // 물고기 사이즈

	// 수영하기
	public void swim() {
		...
	}
}

마무리

이번에는 간단한 예제로 UML 다이어그램이 어떻게 생겼는지, 어떤 식으로 사용할 수 있을지 간단히 알아보았습니다.

이번 예제에서는 3가지의 작은 클래스를 예로 들었지만, 만약 클래스의 개수가 10개, 20개가 된다면 글로 설명 해야 하는 분량은 어마어마할 것 입니다.

또한 문서를 표준화 된 양식을 사용하여 작성하지 않았을 때, 작성 양식에 따라 작성한 문서를 사용자, 개발자, 설계자 모두가 이해하긴 어려울 것입니다. 또한 문서 작성 양식을 만들고, 적응하고 이해하는 데 시간이 소모되기 때문에 표준화 된 양식을 사용하는 것이 바람직합니다.

UML에 따라 작성한 문서는 표준 양식에 의해 작성된 문서이기 때문에, 참여 인원들이 이해하기 편하며, 효율적으로 의사소통 할 수 있습니다. 또한 한번에 이해하기 힘든 복잡한 시스템을 시각적으로 모델링 하여 구조를 보다 알아보기 쉽습니다.

다음 포스팅에서는 Class Diagram의 각 요소와 화살표들이 어떤 의미인지 자세히 알아보도록 하겠습니다.

출처

  1. https://www.lucidchart.com/pages/uml-use-case-diagram
    https://www.diagrams.net/blog/uml-class-diagrams
  2. https://www.nextree.co.kr/p6753/
  3. https://boardmix.com/kr/skills/class-diagram/
    https://devjaewoo.tistory.com/14
profile
개발자 전직 일대기

0개의 댓글

Powered by GraphCDN, the GraphQL CDN