Topcit

클래스 다이어그램

Life Log 2024. 11. 9. 19:01
728x90
반응형

1. UML 클래스 다이어그램이란?

객체지향 시스템에서 클래스와 객체 간의 구조를 시각적으로 표현한 도구입니다. 

기본 구성 요소

  • 클래스(Class): 속성(Attributes)과 메서드(Operations)를 가집니다.
  • 클래스 간의 관계: 연관, 집합, 합성, 상속, 의존 관계 등

2. 클래스 다이어그램 작성 단계

2.1 클래스 정의 및 표기법

클래스를 정의할 때는 다음과 같은 표기법을 사용합니다

+-------------------+
|    클래스명       |
+-------------------+
| - 속성명: 데이터타입 |
+-------------------+
| + 생성자명()         |
| + 메서드명(): 반환타입 |
+-------------------+
  • 생성자 함수는 클래스와 동일한 이름으로 작성하며 반환 타입은 명시하지 않습니다. 이는 클래스 인스턴스를 생성하기 위한 초기화 과정으로, 리턴 타입이 없기 때문입니다.

접근 제어자 표기

  • + (Public): 모든 클래스에서 접근 가능
  • - (Private): 해당 클래스 내에서만 접근 가능
  • # (Protected): 해당 클래스와 하위 클래스에서만 접근 가능
  • ~ (Package): 동일 패키지 내에서 접근 가능

예시:

+----------------------+
|    Customer          |
+----------------------+
| - id: Int            |
| - name: String       |
| - email: String      |
+----------------------+
| + Customer(id: Int, name: String, email: String) |
| + register(): Boolean |
+----------------------+

2.2 클래스 간의 관계 표현

  • 연관(Association): 객체 간 일반적인 관계, 실선으로 표현
    • 예: Customer 클래스와 Order 클래스 간의 관계에서, Customer는 여러 개의 Order와 연관될 수 있습니다.
    •  
  • 집합(Aggregation): 전체/부분 관계, 빈 마름모로 표현
    • 예: Library 클래스와 Book 클래스 간의 관계에서, Library는 여러 권의 Book을 포함하지만, Book은 독립적으로 존재할 수 있습니다.
    •  
  • 합성(Composition): 전체가 부분을 소유하는 관계, 채워진 마름모로 표현
    • 예: Car 클래스와 Engine 클래스 간의 관계에서, CarEngine을 반드시 포함하며, Car가 소멸하면 Engine도 함께 소멸합니다.
    • Composition Example
  • 상속(Generalization): 부모/자식 클래스 관계, 빈 화살표로 표현
    • 예: Person 클래스와 Employee 클래스 간의 관계에서, EmployeePerson을 상속받습니다.
    • Generalization Example
  • 의존(Dependency): 일시적인 의존성, 점선 화살표로 표현
    • 예: Service 클래스가 Logger 클래스를 사용하여 로그를 남길 때, ServiceLogger에 의존합니다.
    • Dependency Example

3. UML 클래스 다이어그램 예시

예시: 도서 관리 시스템

Library 클래스와 Book 클래스 간의 관계는 집합 관계(Aggregation)입니다. Library는 여러 권의 Book을 포함하지만, 각 Book은 독립적으로 존재할 수 있습니다.

+----------------------+
|    Book              |
+----------------------+
| - title: String      |
| - author: String     |
| - price: Double      |
+----------------------+
| + Book(title: String, author: String, price: Double) |
| + getDetails(): String |
+----------------------+

+----------------------+
|    Library           |
+----------------------+
| - name: String       |
| - books: List<Book>  |
+----------------------+
| + Library(name: String) |
| + addBook(book: Book): Boolean |
+----------------------+

Library *-- Book

예시의 Java 소스 코드 표현

Book 클래스

public class Book {
    private String title;
    private String author;
    private double price;

    // 생성자
    public Book(String title, String author, double price) {
        this.title = title;
        this.author = author;
        this.price = price;
    }

    // 메서드
    public String getDetails() {
        return "Title: " + title + ", Author: " + author + ", Price: " + price;
    }

    // Getter and Setter methods (선택사항)
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

Library 클래스

import java.util.ArrayList;
import java.util.List;

public class Library {
    private String name;
    private List<Book> books;

    // 생성자
    public Library(String name) {
        this.name = name;
        this.books = new ArrayList<>();
    }

    // 메서드
    public boolean addBook(Book book) {
        return books.add(book);
    }

    public List<Book> listBooks() {
        return books;
    }

    // Getter and Setter methods (선택사항)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4. 클래스 다이어그램 작성 시 유의사항

  1. 접근 제어자 사용: 각 속성과 메서드에 접근 제어자를 명확히 지정하여 클래스 간의 정보 은닉을 지킵니다.
  2. 생성자 표기: 생성자는 클래스명과 동일하게 작성하며, 반환 타입은 명시하지 않습니다.
  3. 일관된 표기법 사용: 전체 다이어그램에서 일관성 유지.
  4. 필수 요소만 포함: 핵심적인 클래스와 관계만 표현하여 가독성을 유지합니다.

5. UML 다이어그램 툴 추천

  • Lucidchart: 웹 기반 협업 도구
  • StarUML: 무료 오픈소스 UML 툴
  • PlantUML: 텍스트 기반 UML 생성 도구
  • Visual Paradigm: 다양한 UML 기능을 제공하는 상용 소프트웨어

UML 클래스 다이어그램은 시스템의 구조를 명확히 표현해 주며, 생성자와 접근 제어자를 포함해 클래스의 인스턴스 생성 및 정보 은닉 방식을 시각적으로 나타내는 데 유용합니다. 이 가이드를 통해 UML 다이어그램을 더 효율적으로 작성해 보세요.

참고사이트

https://brownbears.tistory.com/577

 

728x90
반응형

'Topcit' 카테고리의 다른 글

이진 트리 순회 방법 (예제)  (0) 2024.11.10
이진 트리 순회 방식  (1) 2024.11.10
Java PreparedStatement  (0) 2024.10.28
Java 객체지향 프로그래밍 특징  (0) 2024.10.28
SQL DCL 요약  (0) 2024.10.28