본문 바로가기

.NET C#/유용한 지식

클래스 다이어그램 이해

조금 더 나은 객체지향 개발자가 되기 위하여,

클래스 다이어그램에 대하여 공부한 내용을 공유해보고자 합니다.

 


클래스 표현

 

클래스는 다음과 같이 표현합니다.

 

 

위 표현을 더 익숙한 형태로 표현하면,

속성 → 멤버변수

연산 → 매서드

로 이해할 수 있습니다.

 

만약 간단한 형태의 자동차 클래스를 표현한다면 이런 모습입니다.

 

 

 

클래스 속성과 연산 앞에 붙는 +, - 표시는 접근 제어자를 의미합니다.

 

표시

접근 제어자

+

public

-

private

#

protected

~

internal

접근 제어자 별 의미는 이전 글에서 설명한 적 있습니다.

https://synk.tistory.com/7

 

만약 프로그램 개발에 클래스 다이어그램을 작성하기로 한 경우,

분석단계를 거친 후 실제 설계 단계로 넘어가게 됩니다.

분석단계에서는 속성들의 형이나 매서드 등의 반환형, 매개변수등은 고려하지 않습니다.

해당 항목은 실제 설계 단계에서 확정할 수 있습니다.

 


관계

 

관계

표시

내용

연관

실선 또는 화살표

개념적으로 연결되어있음

일반적으로 한 클래스의 기능을 다른 클래스가 사용하며 이 관계가 지속적으로 유지되는 관계

단방향일 경우 화살표를 사용하고, 양방향일 경우 실선을 사용함

의존

점선 화살표

연관과 유사한 관계에서, 클래스간 관계가 매우 짧은 시간만 유지되는 관계

일반화

속이 빈 화살표

상속 관계

집약

속이 빈 다이아몬드

전체와 부분의 관계에서, 전체 객체가 메모리에서 사라져도 부분 객체는 사라지지 않는 관계

합성

속이 찬 다이아몬드

전체와 부분의 관계에서, 전체 객체가 메모리에서 사라지면 부분 객체도 사라지는 관계

실체화

속이 빈 점선 화살표

인터페이스 관계

 

1. 연관과 의존 관계

 

 1) 연관관계

  - 오랜시간 관계가 유지될 객체 관계

 

 예시> 소유자와 자동차의 관계

 

public class Person
{
    private Car owns;
    
    public Car OwnCar
    {
        get { return this.owns; }
        set { this.owns = value; }
    }
}

 

 2) 의존관계

  - 짧은시간만 관계가 유지될 객체 관계

 

  예시> 자동차와 주유기의 관계

 

public class Car
{
    public void FillFuel(GasTank g)
    {
        g.GetFuel(amount);
    }
}

 

2. 일반화 관계

 

 - 자식과 부모의 상속관계

 - 자식에서 부모로 화살표를 향함

 - 추상 클래스 일 경우, <<abstract>>로 표시

 

  예시> 추상화 클래스 가전제품과 실제 구현 클래스인 냉장고와 에어컨

 

 

3. 집약과 합성 관계

 

 1) 집약 관계

  - 부분과 전체의 관계

  - 부분에서 전체로 다이아몬드가 향함

  - 전체 객체가 메모리에서 사라져도 부분 객체는 메모리에 유지됨

 

  예시>

 

public class Car
{
    private Engine e;
    private Transmission t;
    
    public Car(Engine e, Transmission t)
    {
        this.e = e;
        this.t = t;
    }
}

 

 2) 합성 관계

  - 부분과 전체의 관계

  - 부분에서 전체로 다이아몬드가 향함

  - 전체 객체가 메모리에서 사라지면 부분 객체도 메모리에서 사라짐

 

  예시>

 

public class Car
{
    private Engine e;
    private Transmission t;
    
    public Car()
    {
        this.e = new Engine();
        this.t = new Transmission();
    }
}

 

4. 실체화 관계

 

  - 약속의 개념인 인터페이스와 구현의 개념인 클래스의 관계

  - 인터페이스의 경우 <<interface>>로 표시