본문 바로가기

Web Development/정보처리기사

유스케이스 다이어그램, UML, 디자인패턴

유스케이스 다이어그램

*구성요소

시스템, 액터, 유스케이스, 관계

*관계

1)연관 관계(Association)
  -실선

2)포함 관계(Include)
: 포함하는 유스케이스를 실행하기 위해 반드시 실행되어야 함
  -점선으로 연결하고 <<include>> 라고 표기

3)확장관계(Extend)
: 확장 대상 유스케이스를 수행할 때 특정 조건을 만족하면 실행되어야 함
  -점선으로 연결하고 <<extend>> 라고 표기

4)일반화관계(Generalization)
: 유사한 유스케이스/액터를 모아 추상화한 유스케이스/액터와 그룹을 만듦
  -끝부분이 삼각형인 화살표 실선



 

UML

 

*특징

가시화 언어, 구축 언어, 명세 언어, 문서화 언어(가구명문)

 

*구성요소

사물, 관계, 다이어그램(사관다)

 

*사물

구조사물, 행동사물, 그룹사물, 주해사물

 

*관계

1)연관 관계(Association) : 클래스가 서로 개념적으로 연관된 관계
  -실선으로 표시, 방향은 화살표

2)의존 관계(Dependency) : 하나의 클래스가 또 다른 클래스를 사용하는 관계
-서로 연관은 있으나 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지
-점선으로 표시, 방향은 화살표

3)일반화 관계(Generalization) : 하나의 사물이 다른 사물에 비해 더 일반적인지 구체적인지를 표현하는 관계
-상속 관계
-자식 -> 부모 쪽으로 속이 빈 화살표

4)실체화 관계(Realization) : 추상 클래스나 인터페이스를 상속받아 자식 클래스가 추상 메서드를 구현하는 관계
-속이 빈 화살표 + <<abstraction>>/<<interface>>

5)집약/집합 관계(Aggregation) : 하나의 객체에 여러 개의 독립적인 객체들이 구성되는 관계
-포함하는 쪽으로 속이 빈 마름모

6)합성 관계(Composition) : 집합 관계의 특수한 형태로, 포함하는 사물의 변화가 포함되는 사물에게 영향을 미치는 관계
-포함하는 쪽으로 속이 꽉 찬 마름모

 

*다이어그램

1)구조 다이어그램/정적 다이어그램

-클래스 다이어그램
 : 클래스 사이의 관계를 표현하는 UML을 이용한 정적 모델링의 대표 다이어그램

-객체 다이어그램
 : 클래스에 속한 사물(객체)들, 즉 인스턴스(Instance)를 특정 시점의 객체와 객체 사이의 관계로 표현

-컴포넌트 다이어그램
 : 실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스를 표현

-배치 다이어그램
 : 컴포넌트 사이의 종속성을 표현하고, 결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현

-복합체 구조 다이어그램
 : 클래스나 컴포넌트가 복합 구조를 갖는 경우 그 내부 구조를 표현

-패키지 다이어그램
 : 유스케이스나 클래스 등의 모델 요소들을 그룹화한 패키지들의 관계를 표현


(클객 컴배 복패)

 

2)행위 다이어그램/동적 다이어그램

-유스케이스 다이어그램

: 시스템이 제공하고 있는 기능과 그와 관련된 외부 요소들을 사용자의 입장에서 표현하는 다이어그램


-시퀀스 다이어그램

: 객체 간 동적 상호작용을 시간적 개념으로 메세지 흐름을 이용해서 표현하는 다이어그램 (특정 행위를 중심으로 이 행위가 다른 객체와 어떻게 상호작용 하는지 표현)


-커뮤니케이션 다이어그램

: 객체들이 주고받는 메세지와 객체 간의 연관을 표현하는 다이어그램


-상태 다이어그램

: 하나의 객체가 자신이 속한 클래스의 상태변화 혹은 다른 객체간의 상호작용에 따라 상태가 변하는 것을 표현하는 다이어그램


-활동 다이어그램

: 시스템이 어떤 기능을 수행하는지 처리의 흐름을 순서로 표현한 다이어그램(일련의 activity들로 어떤 프로세스를 표현)


-타이밍 다이어그램

: 객체 상태 변화와 시간 제약을 명시적으로 표현하는 다이어그램


(유시커 상활타)

 

디자인 패턴

 

*디자인 패턴의 3가지 종류

생성, 구조, 행위

 

*생성 패턴(5개)

1)Factory Method(팩토리 메서드)
: 객체 생성을 위한 인터페이스를 따로 정의, 객체를 생성하는 일을 서브클래스가 담당하도록 하는 패턴

2)Singleton(싱글톤)
: 지정한 클래스의 인스턴스가 반드시 한 개만 존재하도록 하는 패턴

3)Abstract Factory(추상 팩토리)
: 구체적인 클래스를 지정하지 않고 관련성을 갖는 객체들의 집합을 생성하거나 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴

4)Builder(빌더)
: 복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리해 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴

5)Prototype(프로토타입)
: 원본이 되는 인스턴스를 사용하여 생성할 객체의 종류를 명시하고 견본을 복사해서 새로운 객체를 생성하는 패턴

 

*구조 패턴(7개)

1)Adapter(어댑터)
: 기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 만드는 패턴

2)Bridge(브릿지)
: 기능의 클래스 계층과 구현의 클래스 계층을 연결하고 구현부에서 추상 계층을 분리하여 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 디자인 패턴

3)Composite(컴포지트)
: 객체들의 관계를 트리 구조를 구성하여 부분-전체 계층으로 표현하는 패턴

4)Decorator(데코레이터)
: 기존에 구현되어 있는 클래스에 필요한 기능을 추가해나가는 설계 패턴

5)Facade(퍼싸드)
: 복잡한 시스템에 대해 단순한 인터페이스를 제공함으로써 사용자의 시스템 간 또는 다른 시스템과의 결합도를 낮추어 시스템 구조에 대한 파악을 용이하게 하는 패턴

6)Fly weight(플라이웨이트)
: 다수의 객체로 생성될 경우 모두가 갖는 본질적인 요소를 클래스화하여 공유함으로써 메모리를 절약하고 클래스의 경량화를 목적으로 하는 디자인 패턴

7)Proxy(프록시)
: 실제 객체에 대한 대리 객체로 실제 객체에 대한 접근 이전에 필요한 행동을 취할 수 있게 해주는 패턴

 

*행위 패턴(11개)

1)Command(커맨드)

: 하나의 추상 클래스에 메서드를 만들어 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행되며, 요청 자체를 객체화(캡슐화)하는 패턴


2)Observer(옵저버)

: 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 내용이 갱신되는 패턴. 일대다의 의존성을 가지고 상호작용하는 객체 사이에서는 가능한 느슨하게 결합하는 디자인 패턴.


3)Templete Method(템플릿 메서드)

: 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴


4)Mediator(중재자)

: 객체지향 설계에서 객체의 수가 너무 많아져 통신이 복잡해지면 느슨한 결합을 해칠 수 있기 때문에 중간에서 이를 통제하고 지시할 수 있는 역할을 하는 패턴


5)Interpreter(인터프리터)

: 언어의 다양한 해석, 구체적으로 구문을 나누고 그 분리된 구문의 해석을 맡는 클래스를 각각 작성해 여러 형태의 언어 구문을 해석할 수 있게 만드는 패턴


6)Iterator(이터레이터)

: 내부 구조를 노출하지 않고 복합 객체의 원소를 순차적으로 접근 가능하게 하는 행위 패턴


7)State(상태)

: 객체 상태를 캡슐화해서 클래스화함으로써 그것을 참조하게 하는 패턴


8)Visitor(비지터)

: 각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스를 만들어놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴


9)Strategy(전략)

: 알고리즘 군을 정의하고 같은 알고리즘을 각각 하나의 클래스로 캡슐화한 후 필요할 때 서로 교환해서 사용할 수 있게 하는 패턴


10)Memento(메멘토)

: 클래스 설계 관점에서 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴. Undo 기능을 개발할 때 사용.


11)Chain of Responsibility

: 정적으로 어떤 기능에 대한 처리의 연결이 하드코딩되어 있을 때 기능 처리의 연결 변경이 불가능한데, 이를 동적으로 연결된 경우에 따라 다르게 처리될 수 있도록 연결한 디자인 패턴. 한 요청을 2개 이상의 객체에서 처리