본문 바로가기
Design Pattern

[디자인 패턴] 총 정리 (1) - 클래스 다이어그램(Class Diagram)이란?

by 노력남자 2022. 1. 23.
반응형

디자인 패턴을 공부하기 전 반드시 공부하고 가야하는 클래스 다이어그램입니다.

 

클래스 다이어그램의 구성 요소에 대해 알아보겠습니다.

 

클래스 다이어그램이란?

 

클래스 다이어그램은 UML(Unified Modeling Language)의 다이어그램 중 1개로 위키에 정리된 클래스 다이어그램 설명을 보면 아래와 같습니다.

 

클래스 다이어그램은 객체 지향 모델링의 주요 빌딩 블록이다. 응용 프로그램 구조의 일반적인 개념적 모델링, 또 모델의 프로그래밍 코드로의 세세한 모델링 변환을 위해 사용된다. 클래스 다이어그램은 데이터 모델링용으로도 사용이 가능하다. - 위키

 

클래스간 관계를 나타내기 위한 다이어그램이라고 이해주시면 됩니다.

 

클래스 다이어그램의 구성 요소

 

Field (필드)

 

변수는 접근 제한자, 변수 명, 변수 타입, static, final을 표기할 수 있습니다.

 

접근 제한자

 

- : private

+ : public

# : protected

 

static

 

static은 밑줄로 표시

final

 

final은 {readyOnly}로 표시

 

Method (메소드)

 

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

 

 

abstract

 

abstract는 {abstract}로 표시

 

Class (클래스)

 

클래스는 클래스 명, 필드, 메소드로 이루어져 있습니다.

 

 

abstract

 

abstract 클래스는 클래스 명 위에 <<abstract>>를 써서 표기

 

 

Interface (인터페이스)

 

인터페이스는 스테레오 타입(Stereo Type)으로 나타낼 수 있습니다.

(스테레오 타입엔 <<interface>>, <<enumeration>>, <<utility>> 등이 있습니다.)

 

클래스 명위에 <<interface>>를 명시해서 인터페이스라는 걸 표시할 수 있습니다.

 

 

Relationship (관계)

 

클래스 간 관계를 표시할 때 사용하는 표기 방법에 대해 알아보겠습니다.

 

 

Generalization (일반화)

 

상속(extends) 관계를 나타낼 때 사용

 

 

public abstract class Animal {
    String name;

    abstract String sound();
}

public class Dog extends Animal {

    @Override
    String sound() {
        return "왈왈";
    }
}

class Cat extends Animal {

    @Override
    String sound() {
        return "야옹";
    }
}

 

Realization (실체화)

 

구현(implements) 관계를 나타낼 때 사용

 

 

public interface Dictionary {
    String find(String keyword);
}

public class KoreanDictionary implements Dictionary {
    
    @Override
    public String find(String keyword) {
        // 국어 사전 검색
    }
}

public class EnglishDictionary implements Dictionary {
    
    @Override
    public String find(String keyword) {
        // 영어 사전 검색
    }
}

 

Dendency (의존)

 

가장 많이 사용하는 관계입니다. 다른 클래스 참조를 나타낼 때 사용

 

 

public class AnimalSoundDictionary {

    public String find(String keyword) {
        Animal animal = findAnimal(keyword);

        return animal.sound();
    }

    private Animal findAnimal(String keyword) {
        // Animal 찾는 로직
    }
}

public abstract class Animal {
    String name;

    abstract String sound();
}

 

Association(연관), Directed Association(직접 연관)

 

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

 

Association과 Directed Association의 차이는 방향성입니다.

 

화살표가 없는 쪽이 참조 쪽

화살표가 있는 쪽이 참조를 당하는 쪽

 

 

public class Library {
    private List<Dictionary> dictionaries;
}

 

Aggregation (집합, 집합연관)

 

Composition (합성, 복합연관)

 

위 두개는 추후 정리하겠습니다.

 

디자인 패턴이 아니여도 개발하는 분들은 여기까지 꼭 기본으로 숙지를 하셔야합니다.

 

그럼 다음부터는 디자인 패턴의 종류에 대해 알아보겠습니다.

반응형

댓글