본문 바로가기
Programing General/UML Diagram

Class Diagram 그리는법

by Gnaseel 2019. 11. 18.
728x90
반응형

Class Diagram이란

  • 소프트웨어 공학에서 클래스 다이어그램(class diagram)은 통합 모델링 언어(UML)에서 시스템의 클래스, 클래스의 속성, 동작 방식, 객체 간 관계를 표시함으로써 시스템의 구조를 기술하는 정적 구조 다이어그램의 일종이다.
    클래스 다이어그램은 객체 지향 모델링의 주요 빌딩 블록이다. 응용 프로그램 구조의 일반적인 개념적 모델링, 또 모델의 프로그래밍 코드로의 세세한 모델링 변환을 위해 사용된다. 클래스 다이어그램은 데이터 모델링용으로도 사용이 가능하다 by위키백과

어렵게 생각 할 필요가 전혀 없다. 평소에 맨날 하던 코딩, 이젠 코딩 전에 클래스를 설계하고 시작한다고 생각하면 편하다.

구성요소

클래스

클래스 사진

클래스는 클래스 다이어그램을 이루는 가장 기본적인 단위이다.

세부 구성

  • 상단 : 클래스의 이름을 작성한다.
  • 중단 : 클래스의 멤버변수를 작성한다.
  • 하단 : 클래스의 메소드를 작성한다.

분석단계에서는 이름만으로도 충분하지만, 설계 단계일경우 멤버 변수와 메소드에는 접근 제어자를 표시해줘야하고, 경우에 따라 파라미터도 표시해야한다.

관계

사실상 가장 어려운 부분이다. 클래스 다이어그램에는 많은 관계가 있어 햇갈리기 쉽지만, 코드를 예시로 들면 간편하게 이해할 수 있다. 자 시작해보자

의존

이름 사진
dependency 연관사진
    public class A{

        public void dependency(B para) {
            B b = para;
            System.out.println("dependency");
        }
    }

    public class B{

    }

의존은 A클래스에서 B클래스의 객체를 함수의 파라미터&리턴값에 사용하거나 메소드 변수로 사용할 경우 해당된다.
만약 멤버변수로 쓰인다면 최소 집약 또는 합성이다.

일반화

이름 사진
Generalization 연관사진
public class C extends A{

    }

A는 C를 일반화한다.
간단하게 상속이다.

합성

이름 사진
Composition 연관사진
    public class A {
        D d;
        public A() {
            d = new D();
            System.out.println("Composition");
        }
    }

    public class D {
    }

A가 D를 멤버 변수로 가지는 동시에, A와 D의 라이프사이클이 같을 때.
즉, A의 생성자에서 D를 생성할 경우 합성 관계이다.

더 엄밀히 말하자면 A객체가 사라질 때, D 객체가 사라져야 한다.

집약

이름 사진
Aggregation 연관사진
public class A {
        E e;
        public A(E para) {
            e=para;
            System.out.println("Aggregation");
        }
    }
public class E {

    }

A가 E를 멤버 변수로 가지지만, A와 E의 라이프사이클이 다른 경우 집약 관계이다.
합성 관계와 햇갈린다면 위로 올라가서 다시한번 확인해보자.
중점적으로 봐야하는건 라이프사이클이다.
D클래스는 A의 생성자에서 인스턴스를 직접 생성하지만, E클래스는 기존에 존재하던 인스턴스가 A의 생성자에 파라미터로 들어온다.
즉, D의 인스턴스는 A의 생성과 동시에 생성되서 소멸도 함께할 운명이지만,
E의 인스턴스는 A라는 클래스의 인스턴스가 어떤 상태던지 독립적으로 존재한다.

연관

이름 사진
Assosiation 연관사진
public class A {
    F f;
    public A() {
    }
    public void Assosiation(F para) {
        f=para;
    }
}
public class F {

}

심플하다. 매개변수로 쓰이지만, A의 인스턴스가 생성될 때 필수적인 요소가 아닌 경우이다.
물론 F가 A의 생성자에 포함되어 쓰인다면 합성이나 집약에 속한다.

실체화

이름 사진
Realization 연관사진
interface A {
        public void Realization();
    }
    public class G implements A{
        public void Realization() {
            System.out.println("Realization!");
        }
    }

이것도 심플하다. 인터페이스 구현하는게 실체화다.
여담으로 실제화가 아니라 실체화다.
난 좀 햇갈렸다.

반응형