지식창고

클래스다이어그램 관계

코딩클로스 2021. 3. 28. 02:43

클래스 다이어그램이란?

시스템을 구성하는 클래스들 사이의 관계를 표현해주는 그림 도식입니다.

 

 

1.의존 관계(dependency)

표시 : 점선 화살표

설명 : 연관 관계와 같이 한 클래스가 다른 클래스에서 제공하는 기능을 사용할 때 나타냅니다. 연관 관계와 차이점은 두 클래스의 관계가 한 메서드를 실행하는 동안과 같은, 매우 짧은 시간만 유지된다는 점

 

의존은 A클래스에서 B클래스의 객체를 함수의 파라미터&리턴값에 사용하거나 메소드 변수로 사용할 경우 해당된다

 

    public class A
    {

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

    public class B{

    }
지역변수로 사용하거나, 파라미터로 사용하는 등 멤버변수로 갖지 않고 사용하는 관계

class A의 메서드가 class B의 메서드를 호출하거나, class B를 메서드의 인자로 받는 등 사용하는 경우

 

2. 연관 관계(Association)

표시 : 실선이나 화살표

설명 : 클래스들이 개념상 서로 연결됐음을 나타낸다. 보통은 한 클래스가 다른 클래스에서 제공하는 기능을 사용하는 상황일 때 표시한다.

 

매개변수로 쓰이지만, A의 인스턴스가 생성될 때 필수적인 요소가 아닌 경우이다.

만약 F가 A의 생성자에 포함되어 쓰인다면 합성이나 집약에 속한다.

 

의존 Dependency와 다르게 멤버변수로 가지고 사용하는 관계이다.

public class A 
{
    F f;
    public A() {}
    public void Assosiation(F para) 
    {
        f=para;
    }
}

public class F 
{

}
class A가 class B를 멤버 변수로 가지고 있고, 사용하는 경우

 

3.1 집합관계 - 합성 (composition)

표시 : 속이 찬 다이아몬드

설명 : 클래스들 사이의 전체 또는 부분 같은 관계를 나타냅니다. 전체 객체의 라이프타임과 부분 객체의 라이프 타임이 의존적입니다. 즉 전체 객체가 사라지면 부분 객체도 함께 사라진다. (라이프 타임 의존적)

 

A가 D를 멤버 변수로 가지는 동시에 A와 D의 라이프사이클이 같을 때,

즉, A의 생성자에서 D를 생성할 경우 합성 관계이다.

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

public class A 
{
        D d;
        public A() 
        {
            d = new D();
            System.out.println("Composition");
        }
    }

    public class D 
    {
    
    }
Association(연관)의 한 종류이며 전체와 부분의 관계를 가지는 클래스에 적용된다.

멤버변수로 가지고 있고, Aggregation(집약)과 달리 직접 new를 하는 관계

Class A가 Class B를 멤버변수로 가지고 있는 경우

Class A가 전체개념이고, Class B가 부분의 개념이다.

Class A가 직접 Class B를 new해서 생성한다.

 

 

 

3.2 집합관계 - 집약 (aggregation)

표시 : 속이 빈 다이아몬드

설명 : 클래스들 사이의 전체 또는 부분 같은 관계를 나타냅니다. 전체 객체의 라이프타임과 부분 객체의 라이프 타임은 독립적이다.

즉 전제 객체가 사라져도 부분 객체는 남아있다. (라이프 타임 독립적)

 

A가 E를 멤버변수로 가지지만, A와 E의 라이프사이클이 다른 경우 집약 관계이다.

합성 관계와 다른것이 라이프사이클이다. 중점적으로 라이프 싸이클을 봐야함

합성 관계에서 D클래스는 A의 생성자에서 인스턴스를 직접 생성하지만, E클래스는 기존에 존재하던 인스턴스가 A의 생성자에 파라미터로 들어온다.

즉 ,D의 인스턴스는 A의 생성과 동시에 생성되서 소멸도 함께할 운명이지만, E의 인스턴스는 A라는 클래스의 인스턴스와 상관없이 독립적으로 존재한다.

 

public class A 
{
        E e;
        public A(E para) 
        {
            e=para;
            System.out.println("Aggregation");
        }
}
 
public class E 
{


}
Association의 한 종류이며 전체와 부분의 관계를 가지는 클래스에 적용된다.

멤버변수로 가지고 있지만, new를 직접하지 않는 관계

class A가 class B를 멤버변수로 가지고 있는 경우

class A가 전체개념이고, class B가 부분의 개념이다.

하지만 class A가 직접 class B를 new 하지않는다.

 

4. 일반화 관계(generalization)

표시 : 속이 빈 화살표

설명 : 객체지향 개념에서 상속관계라고 말합니다. 한 클래스가 다른 클래스를 포함하는 상위 개념일 때 이를 IS-A 관계라고 하며 UML에서는 일반화관계로 모델링합니다.

 

한 클래스가 다른 클래스를 포함하는 상위 개념일 때 두 클래스 사이에는 일반화 관계가 존재합니다. 이를 객체지향 개념에선 상속관계라고 합니다,

public class C extends A
{

}
class A가 부모클래스 또는 Super Class
Class B가 자식클래스 또는 Sub Class

5.실체화 관계(realization)

표시 : 빈 삼각형과 점선

설명 : 책임들의 집합인 인터페이스와 이 책임들을 실제로 실현한 클래스들 사이의 관계를 나타냄.

interface A 
{
        public void Realization();
}

public class G implements A
{
   public void Realization()
   {
    System.out.println("Realization!");
    }
}

 

Dependency의 한 종류이고, 인터페이스를 구현하는 관계
interfac A가 있고, class B가 interface A를 구현한 경우