class diagram 정의 및 작성법

코딩 고양이·2024년 10월 6일

class diagram 개념

class diagram?

  • UML중 하나로 소프트웨어 설계를 위해 사용
    (UML : 도메인을 모델로 표현해주는 대표적 모델링 언어)
  • 정적 다이어그램에 해당
  • 클래스 구성 요소 및 클래스 간의 관계 표현을 위해 사용
  • 의존 관계가 명확히 보임

구성 요소

1. 클래스

  • 동일 속성 및 행위를 수행하는 객체 집합
  • 붕어빵틀
  • 변화의 기본 단위

2. 관계

전체 객체 : 다른 객체의 기능을 사용하는 객체
부분 객체 : 전체 객체에게 사용되는 객체

3. 접근자

    • : pulbic
    • 모든 클래스에 접근 가능한 메서드 / 속성

    언제 사용?

    • 크랠스 외부에서 해당 메서드나 속성에 접근해야 할 때
    • API와 같이 외부에서 호출할 수 있도록 공개된 메서드 / 속성일때

    일반적 이용 사례

    • 인터페이스 : 외부에서 사용하는 모든 기능을 메서드 정의
    • 사용자 입력 : 외부로부터 데이터를 받거나 기반한 동작을 할 때

    대표 이용 예시

    • 공개 API
      외부에서 사용할 모든 기능에 대해 공용 메서드를 제공
      ex) 로그인 시스템의 login() 메서드는 반드시 public

      class User {
          public String name;
      
          public void login() {
              System.out.println(name + " logged in.");
          }
      }
      
      User user = new User();
      user.name = "Alice";
      user.login(); // "Alice logged in."
      
      	```
    • Getter/Setter
      외부에서 객체의 속성을 간접적으로 변경 / 조회 가능
      get 및 set 메서드를 public으로 설정

          public String getName() {
          return name;
      }
      
      public void setName(String name) {
          this.name = name;
      }
      
    • : private
    • 해당 클래스 내부에서만 접근 가능한 메서드 / 속성
    • 외부 클래스나 상속받은 자식 클래스에서는 접근 가능

    언제 사용?

    • 내부 구현 : 외부에서 접근 / 수정할 필요가 없을때
    • 데이터 보호가 필요할때
    • 데이터를 간접적으로 조작하는 메서드 제공
      => 중요 데이터를 외부에서 직접 수정하는것을 방지

    일반적 이용 사례

    • 데이터 보호 : 중요정보 수정을 못하도록 할때
      => 비밀번호, 계좌 정보...

    • 메서드 숨김 : 외부에서 사용하지 않는 내부 로직 감출때

    대표적 이용 예시

    • 데이터 보호
      은행 계좌의 잔액을 private으로 설정
      => 외부에서 직접 변경할 수 없도록
      => deposit() 같은 메서드로만 간접 접근 허용

       class BankAccount {
           private double balance; // 외부 접근 불가
      
           public void deposit(double amount) {
               if (amount > 0) {
                   balance += amount;
               }
           }
      
           public double getBalance() {
               return balance; // 안전한 방식으로 접근 가능
           }
       }
      
       BankAccount account = new BankAccount();
       account.deposit(500); // 가능
       // account.balance = 1000;
       // Error : private 변수에 직접 접근 불가
       System.out.println(account.getBalance()); // 500
      
    • 비밀번호 검증
      비밀번호 검증 메서드 / 속성은 외부에 노출되지 않도록 private으로 설정

      private String password;
      
      private boolean validatePassword(String inputPassword) {
          return this.password.equals(inputPassword);
      }
      
  1. protected

    • 클래스 내부와 상속받는 자식 클래스에 접근 가능
    • 외부 클래스에서는 접근 불가

    언제 사용?

    • 자식 클래스에서 메서드 / 속성을 재사용 혹은 확장
      => 클래스 외부에서는 감춤

    • 상위 클래스 정의 동작을 하위 클래스에서 변경 허용
      => 클래스 설계시 상속 구조를 고려해 사용

    일반적 이용 사례

    • 상속에서 재사용 : 부모 클래스의 메서드나 속성 재사용
    • 메서드 확장 : 자식 클래스에서 동작을 일부 수정 / 추가
  2. 3줄 설명

Public : 외부에서 사용해야 하는 모든 메서드와 속성

Private : 외부에 숨겨야 하는 중요한 정보와 내부 구현

Protected : 상속 구조에서 자식 클래스에게만 공유하고 싶은 메서드나 속성

4. 연결

diagram 작성 순서

  1. 시스템 역할 / 주요 기능 간단히 정리

    • 이 시스템에서 사용자는 어떤걸 할 수 있을까?
      ex) to-do list => 저장 / 수정 / 상태변경 / 삭제 ...
  2. 객체 찾기 => 명사 찾기 => er-diagram 속 entity

    • ex) 사용자 => to-do list에 접근
      to-do => 사용자가 관리하는 작업
  3. 속성 정의 => 어떤 데이터? => 변수 => er-diagram 속 attribute

    • 어떤 데이터를 포함하지?
      ex) 사용자 => userId, userName과 같은 데이터 저장함
  4. 동작 정의 => 메서드 => 동사 => er-daigram 속 relationship

    • 이 객체가 어떤 행동을 하지?
      ex) user => login, logout, changePassword ...
  5. 관계 설정하기

    • 서로 어떤 관계를 가지지?

    • 연관 관계
      ex) 사용자 -> 여러개의 To-Do 보유 가능

    • 집합 관계
      독립적으로 존재 가능 but 포함됨
      ex) Theme <- Sample To-Do 포함되어있음

    • 합성 관계
      집합과는 다르게 서로 의존적인 관계
      ex) 집 - 방

    • 상속 관계
      한 클래스가 다른 클래스의 속성 ; 메서드 상속
      ex) 사용자 -> 관리자 사용자의 특성을 상속받아 권한 추가

  1. 접근 제어자 설정

    • Public (+): 외부에서 접근 가능
    • Private (-): 클래스 내부에서만 접근 가능
    • Protected (#): 자식 클래스에서 접근 가능
  2. 클래스 다이어그램 생성

    • 클래스명
    • 속성 목록
    • 메서드 목록
profile
Hello, World!

0개의 댓글