공부정리

클래스 다이어그램이란?

에드박 2021. 9. 22. 05:01

언젠가 한번 쯤 클래스 다이어그램에 대해 정리하면서 보는 법, 그리는 법을 학습하고 싶었습니다.

우테코 미션 진행 중 클래스 다이어그램이 나와서 이번 기회에 한번 해봅니다!


UML 이란?

통합 모델링 언어(UML, Unified Modeling Language) 입니다.

소프트웨어에서 사용되는 표준화된 범용 모델링 언어입니다.

소프트 웨어 집약 시스템의 시각적 모델을 만들기 위한 도안 표기법을 포함합니다.

객체 지향 프로그래밍 소프트웨어 집약 시스템을 개발할 때 명세화, 시각화, 문서화할 때 사용합니다.

 

간단하게 말해서 소프트웨어 시스템을 시각적으로 표현했다고 할 수 있습니다.

 

언어이지만 기본적으로 생각하는 문자형 언어가 아닌 기호와 도식을 이용하여 표현합니다.

UML 다이어그램의 종류

  • 구조 다이어그램(Structure Diagram)
    • 클래스 다이어그램
    • 객체 다이어그램
    • 복합체 구조 다이어그램
    • 배치 다이어그램
    • 컴포넌트 다이어그램
    • 패키지 다이어그램
  • 행위 다이어그램(Behavior Diagram)
    • 활동 다이어그램
    • 상태 머신 다이어그램
    • 유즈 케이스 다이어그램
    • 상호작용 다이어그램

 

UML의 특징

  • 가시화 언어 : 소프트웨어의 개념 모델을 시각적인 그래픽 형태로 작성합니다.
  • 명세화 언어 : 소프트웨어 개발과정인 분석, 설계, 구현 단계의 각 과정에서 필요한 모델을 명세화 할 수 있는 언어입니다.
  • 구축 언어 : UML로 명세화된 설계모델을 Java, C++ VB 등 다양한 언어의 소스코드로 변환하여 구축할 수 있습니다.
  • 문서화 언어 : 시스템 아키텍처와 이에 대한 모든 상세 내역에 대한 문서화를 다루며, 요구사항을 표현하고 시스템을 테스트하는 언어도 제공합니다. 일현의 과정을 문서로 남겨 계속 유지 보수합니다.

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

시스템의 클래스, 클래스의 속성, 동작 방식, 객체 간 관계를 표시하여 시스템의 구조를 보여주는 정적 구조 다이어그램입니다.

 

클래스 다이어그램의 표현

  • 클리스 이름, 상태(또는 속성), 클래스가 가지는 책임(행위)

 

접근 제어자 표현

+ , -, #, ~ 4가지로 접근 제어자를 표현합니다.

이미지 참조 : https://gmlwjd9405.github.io/2018/07/04/class-diagram.html

 

클래스 다이어그램은 꼭 완벽하게 나타낼 필요가 없습니다.

요구사항을 분석하는 단계에서 간단하게 그릴 수도 있고 설계 단계에서 명확하게 그릴 수 있습니다.

이미지 참조 : https://gmlwjd9405.github.io/2018/07/04/class-diagram.html

관계 표현

이미지 출처 : https://gmlwjd9405.github.io/2018/07/04/class-diagram.html

1. 연관 관계

  • 클래스와 클래스가 관계를 가지고 해당 관계에서 클래스 객체는 어떤 역할을 수행합니다.
  • 연관 관계 이름, 역할 이름, 방향성 등을 표현할 수 있습니다.

 화살표

  • 단방향 연관관계
  • 한 클래스에서 다른 클래스는 알고있지만 반대는 알지 못하는 관계

실선

  • 양방향 연관관계
  • 두 클래스가 서로를 알고있는 관계

다중성의 표현방법

  • 아무런 표시가 없다면 일대일 관계 입니다.

 

 

2. 일반화 관계

객체지향 개념에서 상속 관계를 의미합니다.

 

3. 집합 관계

3-1. 집약관계

  • 한 객체가 다른 객체를 포함하는 것을 의미합니다.
  • 포함된 객체와 라이프 사이클이 독립적입니다.
public class Barista {
	private CoffeeMachine coffeeMachine;
    
    public Barista(CoffeeMachine coffeeMachine) {
    	this.coffeeMachine = coffeeMachine;
    }
}

3-2 합성관계

  • 부분 객체가 전체 객체에 속하는 관계
  • 포함된 객체는 전체 객체의 라이프 사이클에 의존적입니다. 즉, 전체 객체가 사라지면 포함된 객체도 함께 사라집니다.
public class Barista {
	private CoffeeMachine coffeeMachine;
    
    public Barista() {
    	this.coffeeMachine = new CoffeeMachine();
    }
}

 

4. 의존 관계

  • 일반적으로 한 클래스가 다른 클래스를 사용하는 경우를 의미합니다.
  • 위 설명만 보면 1번의 연관 관계와 같아보이지만 약간의 차이가 있습니다.
  • 연관 관계는 계속해서 함께하는 객체인 반면에 의존 관계는 사용되는 동안만 관계를 맺습니다.

4-1. 연관 관계

public class Barista {
	private CoffeeMachine coffeeMachine;
    
    public Barista() {
    	this.coffeeMachine = new CoffeeMachine();
    }
    
    public Coffee makeCoffee() {
    	coffeeMachine.makeCoffee();
    }
}

 

4-2. 의존 관계

public class Barista {
	
    public Coffee makeCoffee(CoffeeMachine coffeeMachine) {
    	coffeeMachine.makeCoffee();
    }
}

5. 실체화 관계

  • 객체지향에서 '인터페이스를 구현했다' 라고 표현하는 관계입니다.
  • 인터페이스는 클래스 이름 위에 <<interface>> 를 명시합니다.

 


다이어그램을 그릴 수 있는 유용한 사이트

 


참고자료

-https://gmlwjd9405.github.io/2018/07/04/class-diagram.html

-https://en.wikipedia.org/wiki/Class_diagram

-https://www.lucidchart.com/pages/uml-class-diagram

-https://en.wikipedia.org/wiki/Unified_Modeling_Language