별의 공부 블로그 🧑🏻‍💻
728x90
728x170

UML(Unifed Modeling Language)

UML(Unified Modeling Language)

  • 객체 간의 관계를 표현하는 데 사용됨.
  • 시스템 시각화나 사양의 설계를 문서화할 때 사용하는 표현 방법

 

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

  • 클래스의 관계를 표시하는 다이어그램

클래스와 인터페이스

  • 클래스 인터페이스는 영역이 3개로 나뉜 사각형으로 표시한다.
    • 가장 위 영역 : 클래스나 인터페이스의 이름
      • 추상 클래스, 인터페이스 : 이텔릭체
      • 인터페이스<<interface>> 라고 적는다.
    • 중간 영역 : 클래스나 인터페이스의 필드
      • 클래스 필드(static 필드) 이름에는 밑줄을 긋는다.
    • 가장 아래 영역 : 클래스나 인터페이스의 메서드
      • 클래스 메서드(static 메서드) 이름에는 밑줄을 긋는다.
      • 추상 메서드(abstract 메서드)는 이름을 이텔릭체로 표시한다.
  • 정리
이탤릭체 : 추상 클래스, 인터페이스, 추상 메서드
밑줄 : 클래스 필드, 클래스 메서드
  • 세 영역 각각은 필요에 따라 생략 가능하다.
    • 실제 프로그램에 선언된 필드나 메서드라도 클래스 다이어그램에서 생략하기도 한다.
      • 클래스 다이어그램은 클래스 사이의 구조를 표현하는 용도지, 프로그램 자체를 복원하는 용도가 아니기 때문

 

◆ 화살표

  • 화살표의 종류 차이도 있지만, 프로그래밍에서 중요한건 화살표의 방향이다.
    • 각 클래스는 화살표가 가리키는 클래스나 인터페이스에 의존하기 때문
  • 어떤 화살표든, 화살표 시작점에 있는 클래스는 화살표 끝에 있는 클래스나 인터페이스가 없으면 컴파일을 할 수 없다.
    • 반대로, 오른쪽 클래스나 인터페이스는 왼쪽 클래스가 없어도 컴파일 된다.
  • 부품으로 재사용 가능한 모음은 의존 관계로 정해지므로, 화살표가 가리키는 방향은 매우 중요하다.

화살표 설명
- 상위 클래스를 가리키는 화살표
- '사용한다'를 뜻하는 화살표
- 필드에 들어 있지 않아도 메서드 매개변수나 임시 변수 등으로 사용할 가능성이 있는 객체를 가리킴.
- 인터페이스를 가리키는 화살표
- '알고 있다' 를 뜻하는 화살표
- 프로그램에서 집합을 뜻하는 화살표와 같지만, '포함한다'를 강조하기보다는 필드에 들어 있음을 강조할 때 사용
- 집합을 나타내는 화살표
- 필드 등으로 객체를 '포함'하는 경우 사용

 

클래스 다이어그램의 예

그림 1 : 클래스 다이어그램의 예

인터페이스 1개(Executable)와 클래스 3개(ParentClass, ChildClass, Something)로 이루어진 클래스 다이어그램

 

코드 1 : 클래스 다이어그램에 대응하는 자바 프로그램
interface Executable {
    abstract void execute();
}

abstract class ParentClass {
    Something _field1;
    static int FIELD2;
    
    abstract void method1();
    void method2() {
        ...
    }
    static void method3() {
        ...
    }
}

class ChildClass extends ParentClass implements Executable {
    void method1() {
		...
    }
    void execute() {
        ...
    }
}

class Something {
    int _value;
    ...
}

 

시퀀스 다이어그램(Sequence Diagram)

  • 프로그램 동작 순서를 표현하는 다이어그램

 

코드 : 시퀀스 다이어그램 예시용 자바 프로그램
class Client {
    Server _server = new Server();
    ...
    void work() {
        _server.open();
        _server.print("Hello");
        _server.close();
    }
}

class Server {
    Device _device;
    void open() {
        _device = new Device();
        ...
    }

    void print(String s) {
        _device.write(s);
    }

    void close() {
        ...
    }
}

class Device {
    void write(String s) {
        ...
    }
}
그림 2 : 시퀀스 다이어그램의 예

  • :Client, :Server, :DeviceClient 클래스, Server 클래스, Device 클래스인스턴스를 나타낸다.
  • 시퀀스 다이어그램에서 위에서 아래 방향시간 흐름이고, 가로 방향 화살표는 인스턴스 사이의 상호 작용을 표현한다.
화살표 설명
메서드 호출
메서드에서 돌아오는 것

 

주석과 역할

  • 클래스 다이어그램이나 시퀀스 다이어그램에는 노트 모양주석을 추가할 수 있다.

 

  • 클래스 다이어그램에서 클래스 역할을 강조하고 싶을 때는, 태그를 사용한다.
    • UML에 규정된 서식은 아니다.
    • 이는 특히 디자인 패턴에서 클래스의 역할을 표기할 때 편리하다.

NullLabel 클래스가 널 객체 역할임을 나타낸다.

 


  • 이 페이지에서는 집합 관계필드 이름도 클래스를 표시하는 사각형 안에 작성하였지만(그림1의 _field1 필드), UML에서는 일반적으로 집합 관계 필드 이름을 사각형 안에 작성하지 않는다.
    • 집합 관계화살표로 표현 가능하다.
728x90
그리드형(광고전용)
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖