[C++][OOP] Class - UML diagram, relationship

 

복잡한 프로그램을 위한 UML 클래스 다이어그램

들어가며

객체 지향 프로그래밍에서 클래스는 코드의 기본적인 구성 요소이다. 프로그램의 규모가 커지고 클래스 간의 관계가 복잡해짐에 따라, 전체적인 구조를 한눈에 파악하고 관리하는 것이 중요해진다. 이를 위해 UML 클래스 다이어그램이 유용하게 사용된다. UML 클래스 다이어그램은 시스템의 클래스, 속성, 연산 및 관계를 시각적으로 표현하는 표준적인 방법이다.

UML 클래스 다이어그램의 개념

UML(Unified Modeling Language) 클래스 다이어그램은 객체 지향 시스템을 모델링하는 데 사용되는 그래픽 표기법이다. 클래스 다이어그램은 시스템의 정적 구조를 보여주며, 클래스, 인터페이스, 협업 및 관계와 같은 요소를 포함한다.

UML 클래스 다이어그램 그리기 규칙

UML 클래스 다이어그램은 다음과 같은 규칙에 따라 그려진다.

  1. 클래스: 클래스는 사각형으로 표시되며, 클래스 이름, 속성 및 연산을 포함한다.
  2. 속성: 속성은 클래스 내부에 나열되며, 속성 이름과 데이터 유형을 포함한다.
  3. 연산: 연산은 클래스 내부에 나열되며, 연산 이름, 매개변수 및 반환 유형을 포함한다.
  4. 관계: 클래스 간의 관계는 다양한 유형의 선과 기호를 사용하여 표시된다.
how to draw UML Diagram

* 속성과 연산에서 가장 앞에 있는 +, - 기호는 public(+), private(-)를 의미한다

클래스 간의 관계 표현

UML 클래스 다이어그램은 다음과 같은 관계를 표현할 수 있다.

  • 연관 (Association): 두 클래스 간의 일반적인 관계를 나타낸다.
  • 상속 (Inheritance): 한 클래스가 다른 클래스의 속성과 연산을 상속받는 관계를 나타낸다.
  • 구현 (Realization): 한 클래스가 인터페이스를 구현하는 관계를 나타낸다.
  • 의존 (Dependency): 한 클래스가 다른 클래스에 의존하는 관계를 나타낸다.
  • 집합 (Aggregation): 한 클래스가 다른 클래스의 부분을 포함하는 관계를 나타낸다.
  • 합성 (Composition): 한 클래스가 다른 클래스의 생명 주기를 제어하는 강력한 집합 관계를 나타낸다.
relationship between classes

예제: Lecture, Student, Teacher 클래스

다음은 Lecture, Student, Teacher 클래스 간의 관계를 보여주는 UML 클래스 다이어그램 예시이다.

Association relationship(Lecture, Student, Teacher)

위 다이어그램에서 Lecture 클래스는 Student 클래스와 Teacher 클래스에 대한 포인터를 멤버 변수로 가지고 있다. 이는 Lecture 클래스가 Student 클래스와 Teacher 클래스의 객체를 참조할 수 있음을 의미한다.

main.cpp 코드 예제

다음은 위 UML 클래스 다이어그램을 C++ 코드로 구현한 예시이다.

C++
#include <iostream>
#include "Student.h"
#include "Teacher.h"
#include "Lecture.h"

using namespace std;

int main() {
  Student s1(201911999, "Alice");
  Teacher t1(111111111, "Tom");
  Lecture l1(222222222, "OOP");

  cout << s1.GetName() << endl; // Alice
  cout << t1.GetName() << endl; // Tom
  cout << l1.GetName() << endl; // OOP
  return 0;
}

위 코드는 Student, Teacher, Lecture 클래스의 객체를 생성하고, 각 객체의 GetName() 메서드를 호출하여 이름을 출력한다.

마치며

UML 클래스 다이어그램은 복잡한 프로그램의 구조를 시각적으로 표현하는 데 유용한 도구이다. 클래스 다이어그램을 통해 클래스 간의 관계를 명확하게 파악하고, 코드를 효율적으로 관리할 수 있다.


추천글 :

[C++][OOP] Array & Pointer
(https://hyeonb.blogspot.com/2024/09/coop-array-pointer.html)

[C++][OOP] Class - definition, struct, constructor, destructor
(https://hyeonb.blogspot.com/2024/10/coop-class-definition-struct.html)

hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2