티스토리 뷰

UML이란?

UML(Unified Modeling Language)은 프로그램의 구조와 행위를 시각적으로 표현하기 위한 표준화된 모델링 언어입니다. 복잡한 소프트웨어 시스템의 설계를 다이어그램으로 표현함으로써, 개발자와 이해관계자 간의 의사소통을 용이하게 합니다.

 

UML 사용 이유

  • 모델 검증: UML을 사용하면 구현 전에 시스템 모델을 검증할 수 있고, 잠재적인 문제를 사전에 발견하고 수정할 수 있습니다.
  • 비용 절감: 코드를 작성하고 테스트하는 것보다 UML 모델을 사용하여 시스템을 설계하고 검증하는 것이 비용이 적게 듭니다.
  • 테스트 및 검증: 시스템이 실제로 요구사항을 만족하는지 테스트하고 검증하기 위해 사용됩니다.

UML 다이어그램 종류

 

구조 다이어그램 클래스 다이어그램
객체 다이어그램
복합체 구조 다이어그램
배치 다이어그램
컴포넌트 다이어그램
패키지 다이어그램
행위 다이어그램 활동 다이어그램
상태 머신 다이어그램
유즈 케이스 다이어그램
인터랙션 다이어그램 시퀀스 다이어그램
상호작용 개요 다이어그램
통신 다이어그램
타이밍 다이어그램

UML 작성 순서

  1. 유스케이스 다이어그램: 시스템의 기능적 요구사항을 사용자의 관점에서 표현합니다.
  2. 클래스 다이어그램: 시스템의 구조를 클래스와 그 관계로 표현합니다.
  3. 시퀀스 다이어그램: 객체 간의 상호작용과 시간 흐름을 시각화합니다.

클래스 다이어그램

클래스 정보

  • 클래스: 이름, 필드(데이터 멤버), 메소드(함수)로 구성됩니다.
  • Abstract 클래스: 클래스 이름 위에 <<abstract>> 표기로 추상 클래스를 나타냅니다.
  • Interface: <<interface>> 스테레오 타입으로 인터페이스를 표시합니다.

 

필드

 

  • 접근 제한자: -는 private, +는 public, #은 protected를 의미합니다.
  • Static: 필드나 메소드가 static일 경우, 밑줄로 표시합니다.
  • Final: {readOnly}로 표기하여 final 속성을 나타냅니다.

 

메소드

메소드는 인자를 표기하는 거 이외에는 변수와 표기법이 동일합니다.

 

abstract는 {abstract}로 표시

 

관계

 

 

1. is-a 관계 : 일반화 vs 실체화

화살표의 끝은 상속받는 클래스, 추상클래스입니다.
일반화와 실체화 차이점?

일반화는 상속을 이용해 'is a kind of' 관계이지만, 
실체화는 인터페이스를 이용해 'can do this' 관계이다.

 

일반화: extends 관계

 

 

 

실체화: implements 관계

 

 

 

2. has-a관계 : 집합 관계 vs 합성 관계

화살표의 끝은 전체 클래스 
집합 관계와 합성 관계의 차이점?

집합 관계는 부분 객체가 전체 객체의 생명 주기에 의존하지 않지만,
합성 관계는 부분 객체가 전체 객체의 생명 주기에 의존한다.

 

집합(Aggregation) 관계

  • 한 객체가 다른 객체를 포함하는 것으로, ‘부분’을 나타내는 객체를 다른 객체와 공유할 수 있습니다.
  • ‘전체’를 가리키는 클래스 방향에 빈 마름모로 표시합니다.
  • 전체 객체가 사라진다 해도 부분 객체는 사라지지 않습니다.

public class Computer {
     private MainBoard mb;
     private CPU c;
     // 생성자
     public Computer(MainBoard mb, CPU c) {
         this.mb = mb;
         this.c = c;
         //Computer과 MainBoard, CPU의 라이프사이클은 독립적
     }
}

 

 

합성(composition) 관계

  • 부분 객체가 전체 객체에 속하는 관계로, ‘부분’을 나타내는 객체를 다른 객체와 공유할 수 없습니다.
  • ‘전체’를 가리키는 클래스 방향에 채워진 마름모로 표시합니다.
  • 전체 객체가 없어지면 부분 객체도 없어집니다.

public class Computer {
     private MainBoard mb;
     private CPU c;
     // 생성자
     public Computer() {
         this.mb = new MainBoard();
         this.c = new CPU();
         //MainBoard, CPU의 라이프사이클은 Copmuter에 의존적
     }
}

 

3. 참조 : 연관 관계 vs 의존 관계

화살표의 끝은 참조당하는 클래스
연관관계와 의존관계의 차이점?

연관관계는 오랜 시간 동안 같이할 객체와의 관계며,
의존 관계는 짧은 시간 동안 이용하는 관계다.

 

Association(연관)

다른 클래스를 필드로 사용할 때 사용합니다.

단방향 연관관계와 양방향 연관관계의 차이점?

화살표가 없으면 양방향 연관관계이고, 화살표가 있으면 단방향 연관관계이다.
양방향 연관관계는 서로의 존재를 안다는 의미고,
단방향 연관관계는 한 쪽은 알지만 다른 쪽은 상대방의 존재를 모른다는 의미이다.

class Person {
    private Phone phone;

    public Person(Phone phone) {
        this.phone = phone;
    }

       public void sendMessage() {
        String to = "민수";
        String message = "뭐해?";

        this.phone.sendMessage(to, message) // 핸드폰의 문자 전송 기능 사용
    }
}

// 핸드폰
class Phone {
    public void sendMessage(String to, String message) {
        // 문자 메시지 전송 기능...
    }
}

 

 

Dendency (의존)

다른 클래스 참조를 나타낼 때 사용됩니다.

 

class Person {
    public void sendMessage(Phone phone) {
        String to = "민수";
        String message = "공부해";

        phone.sendMessage(to, message)
    }
}

'CS > OOP' 카테고리의 다른 글

추상 클래스와 인터페이스의 차이점  (0) 2024.04.17
객체 지향 원리 적용  (2) 2023.03.03
좋은 객체 지향 설계의 5가지 원칙-SOLID  (0) 2023.02.22