반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

오늘부터 공부한다

디자인 패턴 본문

소프트웨어 공학

디자인 패턴

1000hg 2019. 10. 15. 20:44
반응형

디자인 패턴이란?

 

소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 발생했을 때 재사용할 수 있는 해결책이다.

 

 

디자인 패턴의 장점

1) 개발자(설계자) 간의 원활한 의사소통

: 여러 디자인 패턴의 특성을 잘 알고 있어 문제해결 시 어떤 디자인 패턴을 사용하면 좋을지 해결책을 논의할 수 있다. 

 

2) 소프트웨어 구조 파악 용이

: 디자인 패턴의 특성을 잘 알고 있기에 어떤 디자인 패턴이 설계할 때 사용되었는지 알면 소프트웨어 전체구조를 쉽게 파악 가능하다

 

3) 재사용을 통한 개발 시간 단축

: 이미 만들어 놓은 디자인 패턴을 사용하므로 개발시간을 단축시킬 수 있다.

 

4) 설계 변경 요청에 대한 유연한 대처

: 사용자의 지속적인 추가 요청, 환경 변화 등의 설계 변경 요청에 쉽고 빠르게 대처 가능하다

 

 

디자인 패턴의 단점

1) 객체지향 설계/ 구현 위주

: 디자인 패턴은 객체지향 설계/구현에 많이 사용되는데, C언어를 주로 사용하는 구조적 설계/구현에서도 사용할 수 있지만 너무 복잡해서 큰 도움이 되지 않는다.

 

2) 초기 투자 비용 부담

: 디자인 패턴을 적용 및 설계하면 디자인 패턴을 사용하지 않은 경우보다 초기에 시간과 노력이 많이 든다.

 

 

대표적인 디자인패턴 8가지

Singleton Pattern

- 각 클래스가 하나의 인스턴스만 갖도록 하는 디자인패턴이다.

- 생성자의 접근제어자를 private로 정의하며, 하나의 인스턴스를 반환하는 getInstance() 메소드를 사용한다.

 

Strategy Pattern

- 객체가 수행할 수 있는 행위들을 미리 만들어 두고, 동적으로 행위의 변경이 필요한 경우 행위를 직접 수정하는 대신 전략을 바꾸는 것으로 구현하는 디자인패턴이다.

- 행위를 추상화하여 인스턴스로 정의한 뒤에, 구체적인 행위를 구현 클래스로 작성하며, 필요에 따라 각 행위 클래스를 주입하여 사용한다.

 

Decorator Pattern

- 객체에 추가해야 할 기능이 많은 경우에 각 기능을 클래스로 만들어 두고 필요에 따라 조립하여 사용하는 디자인패턴이다.

 

Proxy Pattern

- 객체에 대한 직접적인 접근을 제어하기 위해, 대리자 역할을 하는 클래스를 구성하는 디자인패턴이다.

- 프록시 클래스는 객체를 요청하기 전에 권한 처리나, 객체 생성에 시간이 걸리는 작업의 백그라운드 처리 등을 수행할 수 있다.

 

Template Method Pattern

- 유사하지만 부분적으로 다른 작업을 수행하는 비슷한 클래스를 여러개 만들어야 하는 경우에, 상위 클래스에서 처리 흐름을 제어하고 하위 클래스에서 처리의 내용을 구체화하도록 구성하는 디자인패턴이다.

 

Template Callback Pattern

- 전략 패턴에 익명 클래스를 가미하여 사용하는 디자인패턴이다. 전략 패턴의 컨텍스트를 템플릿, 익명 클래스로부터 생성되는 객체를 콜백이라 한다.

- 전략 패턴의 기본적인 구조에서 변경이 필요한 메소드 단위로 익명객체를 생성하여 전달하는 방식이다.

 

Factory Method Pattern

- 조건에 따라 다른 객체를 생성해야 하는 경우, 객체의 생성을 팩토리 클래스에 위임하는 디자인패턴이다.

- 객체간 결합도를 낮추고, 유지보수가 용이하게 한다.

 

Adapter Pattern

- 어떤 클래스의 인터페이스를 다른 인터페이스로 변환하여, 호환되지 않는 인터페이스들을 함께 사용할 수 있게 하는 디자인패턴이다.

 

 

 

반응형

'소프트웨어 공학' 카테고리의 다른 글

시큐어 코딩(Secure Coding)  (0) 2019.10.16
QA와 QC  (0) 2019.10.16
(OS)교착상태 (Deadlock)  (0) 2019.10.15
블록체인(Block Chain)  (0) 2019.10.14
클라이드 컴퓨팅 (Cloud Computing)이란?  (0) 2019.10.14