본문 바로가기
Programming

UML - Class Diagram

by 느리게 걷는 즐거움 2024. 6. 21.
반응형

UML - ClassDiagram

UML(Unified Modeling Language)은 소프트웨어 시스템을 설계하고 문서화하는 데 사용되는 표준화된 모델링 언어입니다. UML은 다양한 다이어그램을 제공하여 시스템의 구조와 행동을 시각적으로 표현할 수 있습니다. 

PlantUML은 텍스트 기반의 UML(Unified Modeling Language) 도구로, UML 다이어그램을 쉽게 작성하고 시각화할 수 있도록 도와줍니다. PlantUML은 텍스트 파일에 다이어그램을 정의하고, 이를 다양한 포맷(PNG, SVG, LaTeX 등)으로 렌더링할 수 있습니다.

UML의 기본 개념

UML은 복잡한 소프트웨어 시스템을 시각적으로 모델링하는 도구입니다. UML을 사용하면 시스템의 구성 요소와 그들 간의 관계를 명확하게 표현할 수 있어, 시스템 설계 및 이해를 돕습니다. UML은 객체 지향 프로그래밍 언어(Java, C++, Python 등)와 함께 자주 사용되며, 시스템 개발 과정에서 요구사항 분석, 설계, 구현, 테스트 단계에 걸쳐 유용하게 사용됩니다.

UML의 주요 다이어그램

UML은 시스템의 다양한 측면을 표현하기 위해 여러 종류의 다이어그램을 제공합니다. 주요 다이어그램은 다음과 같습니다.

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

클래스 다이어그램은 시스템의 구조를 나타내며, 클래스와 그들 간의 관계를 표현합니다. 클래스는 속성과 메서드를 가지며, 클래스 다이어그램은 클래스 간의 상속, 연관, 집합 관계 등을 시각화합니다. 클래스 다이어그램은 여러 구성 요소로 이루어져 있습니다. 주요 구성 요소는 다음과 같습니다.

클래스 다이어그램 설계 시 고려 사항

명확한 클래스 정의: 클래스의 역할과 책임을 명확하게 정의합니다.

적절한 관계 설정: 클래스 간의 관계를 적절하게 설정하여 시스템의 구조를 명확히 합니다.

캡슐화: 속성과 메서드의 가시성을 적절히 설정하여 데이터 은닉을 실현합니다.

다이어그램의 단순화: 너무 복잡한 다이어그램을 피하고, 주요 요소에 집중합니다.

재사용성: 상속을 통해 코드의 재사용성을 높입니다.

클래스 (Class)

클래스는 객체를 생성하기 위한 청사진(템플릿)입니다. 클래스는 세 가지 부분으로 구성됩니다.

클래스 이름 클래스의 이름을 나타냅니다.
속성 클래스가 가지는 데이터 멤버(필드, 변수)를 나타냅니다.
메서드 클래스가 수행할 수 있는 기능(함수, 메서드)을 나타냅니다.

PlantUML에서 클래스의 속성은 아래의 표와 같이 표현됩니다.

Public +
Private -
Protected #
static {static} member
abstract {abstract}  member
interface interface
package package A {

}
namespace namespace A {

}

다중도(Multiplicity)는 연관 관계에서 각 클래스 사이의 객체 수를 나타내는 방법입니다. 다중도는 한 클래스의 인스턴스가 다른 클래스의 인스턴스와 어떤 관계를 가지는지를 명확히 정의합니다.

1 (One) 정확히 하나의 인스턴스를 의미합니다.
0..1 (Zero or One) 하나 이상의 인스턴스가 있을 수도 있고, 없을 수도 있습니다.
0..* (Zero or Many) 여러 개의 인스턴스가 있을 수 있고, 하나도 없을 수도 있습니다.
1..* (One or Many) 적어도 하나의 인스턴스가 있어야 하며, 여러 개의 인스턴스가 있을 수 있습니다.

PlantUML을 사용하여 클래스 간의 다양한 연관 관계를 시각화할 수 있습니다. 클래스 다이어그램에서 사용되는 주요 연관 관계는 연관(Association), 집합(Aggregation), 복합(Composition), 상속(Inheritance), 의존(Dependency)입니다. 각 연관 관계는 특정한 기호와 표기법으로 표시됩니다. 각 관계를 PlantUML로 설명합니다.

 

연관 관계 (Association)

 

연관 관계는 두 클래스 간의 기본적인 관계를 나타냅니다. 단순한 연관을 의미하며 객체는 서로 독립적으로 존재할 수 있습니다. 일반적인 연관 관계는 "--" 실선으로 표시됩니다. 

@startuml
class Person {
  +name: String
  -age: int
  #nickname: String
}

class Car {
  -model: String
  -color: String
}

Person "1" -- "1..*" Car: owns
@enduml

이 예제에서는 Person 클래스와 Car 클래스 간의 1:다(1..*) 연관 관계를 나타내며, Person이 여러 대의 Car를 소유하고 있음을 의미합니다.

집합 관계 (Aggregation)

집합 관계는 전체와 부분 간의 느슨한 관계를 나타냅니다. 전체는 부분을 포함하고 부분은 독립적으로 존재할 수 있습니다. "o--" 빈 마름모로 표시됩니다.

부분 객체는 전체 객체의 일부로 포함되지만, 전체 객체와는 독립적인 생명 주기를 가집니다. 즉, 전체 객체가 삭제되더라도 부분 객체는 독립적으로 존재할 수 있습니다.

@startuml
class Team {
  -name: String
}

class Player {
  -name: String
  -position: String
}

Team o-- Player: includes
@enduml

 

복합 관계 (Composition)

복합 관계는 전체와 부분 간의 강한 관계를 나타냅니다. 전체가 사라지면 부분도 사라집니다. "*--" 채워진 마름모로 표시됩니다.

@startuml
class House {
  -address: String
}

class Room {
  -name: String
}

House *-- Room: contains
@enduml

이 예제에서는 House 클래스와 Room 클래스 간의 복합 관계를 나타냅니다. House가 사라지면 Room도 사라집니다.

 

상속 관계 (Inheritance)

상속 관계는 한 클래스가 다른 클래스를 확장하는 관계를 나타냅니다. 빈 삼각형 화살표로 표시됩니다.

@startuml
class Vehicle {
  -make: String
  -year: int
}

class Car {
  -model: String
  -color: String
}

Vehicle <|-- Car
@enduml

이 예제에서는 Vehicle 클래스가 Car 클래스의 부모 클래스임을 나타냅니다.

 

 

반응형

'Programming' 카테고리의 다른 글

AJS: Atlassian JavaScript Library  (0) 2024.06.21
UML - ER Diagram  (0) 2024.06.21
SQL 명령어  (0) 2024.06.20
리눅스 명령어 (E)  (0) 2024.06.20
리눅스 기본명령어 (D)  (0) 2024.06.20