본문 바로가기
카테고리 없음

[정보처리기사 실기]GOF 디자인 패턴 총정리!

by hotcoding 2024. 9. 24.
반응형

 

안녕하세요. 고냉이블로그입니다. 오늘은 정보처리기사 실기 공부 요약 겸 오랜만에 포스팅을 하려고 합니다.

GOF 디자인 패턴이란?

 

소프트웨어 개발의 세계에서 효율성과 유지보수성은 항상 중요한 화두입니다. 이러한 목표를 달성하기 위해 개발자들은 다양한 기법과 패턴을 활용하는데, 그 중에서도 'GOF 디자인 패턴'은 특별한 위치를 차지하고 있습니다.

 

GOF(Gang of Four)란 에리히 감마(Erich Gamma), 리차드 헬름(Richard Helm), 랄프 존슨(Ralph Johnson), 존 블리시디스(John Vlissides) 네 명의 컴퓨터 과학자를 지칭합니다. 이들이 1994년에 출판한 '디자인 패턴: 재사용 가능한 객체지향 소프트웨어의 요소'라는 책에서 소개된 23가지 디자인 패턴이 바로 GOF 디자인 패턴의 시작입니다.

 

이 패턴들은 소프트웨어 설계 시 자주 발생하는 문제들에 대한 검증된 해결책을 제공합니다. 크게 생성(Creational), 구조(Structural), 행위(Behavioral) 세 가지 카테고리로 나뉘며, 각각의 패턴은 특정 상황에서 코드의 구조와 객체 간의 상호작용을 개선하는 데 도움을 줍니다.

오늘은 이 중에서 객체의 생성과 관련된 '생성 패턴(Creational Patterns)'에 대해 자세히 알아보고자 합니다. 생성 패턴은 객체 생성 메커니즘을 유연하게 만들어 주어, 상황에 따라 적절한 객체를 생성할 수 있도록 도와줍니다.

 

먼저, 생성 패턴의 종류와 각각의 특징을 간단히 살펴본 후, 실제 코드 예제와 함께 더 깊이 있게 알아보도록 하겠습니다.

 

 

GOF 디자인 패턴(생성)

 

1. Builder:

- 복잡한 객체를 단계적으로 생성

- 생성과 표현을 분리하여 같은 생성 과정에서 다른 표현 결과를 만들 수 있음

Director -> Builder -> Product

(복잡한 객체 생성 과정을 단계별로 제어)

 

2. Prototype:

- 기존 객체를 복제하여 새로운 객체 생성

- 생성할 객체의 원형을 제공하는 인스턴스에서 생성할 객체들의 타입이 결정됨

Client -> Prototype interface <- Concrete Prototype

(기존 객체복제하여 새 객체 생성)

 

3. Factory Method:

- 객체 생성을 서브클래스에 위임

- 상위 클래스에서는 인터페이스만 정의하고, 하위 클래스에서 인스턴스 생성 방법을 결정

Creator <- Concrete Creator || Product <- Concrete Product

(객체 생성을 서브클래스에 위임)

 

4. Abstract Factory:

- 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스 제공

- 동일한 주제의 다른 팩토리를 묶음

Concrete Factory || Abstract Product <- Concrete Product

(관련 객체들의 family 생성)

 

5. Singleton:

- 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 함

- 생성된 객체를 어디에서든지 참조할 수 있도록 함

- 한 클래스에 한 객체만 존재하도록 제한

static instance getInstance()

(클래스의 인스턴스가 하나만 생성되도록 보장)

 

GOF 디자인 패턴(구조)
 

1. Bridge (다리): 추상화와 구현을 분리하여 독립적으로 변경하고 확장할 수 있게 합니다.

*추상화: 복잡한 현실 세계의 객체를 단순화하여 필요한 특성만 추출하는 과정

 

리모컨과 전자기기로 예시:

 

- 리모컨(추상화)과 전자기기(구현)를 독립적으로 확장할 수 있습니다.

- 새로운 리모컨 타입(예: 음성인식 리모컨)을 추가하거나, 새로운 전자기기(예: 에어컨)를 추가해도 기존 코드를 변경할 필요가 없습니다.

- 리모컨은 Device 인터페이스를 통해 어떤 전자기기와도 작동할 수 있습니다.

 

이 예시에서 '추상화'는 리모컨의 기본 기능을 정의하는 부분이며, 실제 전자기기의 동작과는 분리되어 있습니다.

 

2. Decorator (장식자): 객체에 동적으로 새로운 책임(메서드)을 추가할 수 있게 합니다.(오버라이드)

 

3. Facade (외관): 복잡한 시스템에 대해 단순화된 인터페이스를 제공합니다.

 

4. Flyweight (플라이웨이트, 경량): 많은 객체를 효율적으로 공유(비용)하여 메모리 사용을 최소화합니다.

 

5. Proxy (대리자): 다른 객체에 대한 접근을 제어하기 위한 대리 객체를 제공합니다.

 

6. Composite (복합체): 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현합니다.

 

7. Adapter (적응자): 호환되지 않는(다른) 인터페이스를 가진 클래스들을 함께 동작할 수 있게 합니다.

 

GOF 디자인 패턴(행위)

 

1. Mediator (중재자): 객체 간의 복잡한 상호작용을 캡슐화하여 결합도를 낮춥니다.

 

2. Interpreter (해석자): 언어의 문법이나 표현을 평가하는 방법을 정의합니다.

 

3. Iterator(반복자): 컬렉션의 내부 구조를 노출시키지 않고 순차적으로 접근할 수 있는 방법을 제공합니다.

 

4. Template Method(템플릿메서드): 알고리즘의 구조(상위클래스)를 정의하고 일부 단계를 서브클래스에서 구현할 수 있게 합니다.

 

5. Observer(관찰자): 객체 상태 변화를 다른 객체에 자동으로 알리고 업데이트하는 방식을 정의합니다.

 

6. State(상태): 객체의 내부 상태에 따라 행동을 변경할 수 있게 합니다.

 

7. Visitor(방문자): 객체 구조를 변경하지 않고 새로운 동작을 추가할 수 있게 합니다.

  • 알고리즘(연산)과 객체 구조를 분리합니다.
  • 기존 객체 구조를 변경하지 않고 새로운 동작을 추가할 수 있습니다.
  • 객체의 클래스를 수정하지 않고도 새로운 연산을 추가할 수 있습니다.

 

8. Command(명령): 요청을 객체로 캡슐화하여 매개변수화하고 취소 가능한 동작을 구현합니다.

 

9. Strategy(전략): 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있게 합니다.

 

10. Memento(메멘토): 객체의 내부 상태를 저장하고 나중에 복원할 수 있게 합니다.

 

11. Chain of Responsibility(책임연쇄): 요청을 처리할 수 있는 기회를 하나 이상의 객체에게 부여합니다.

 



#정보처리기사

#정보처리기사실기

#GOF디자인패턴

#디자인패턴총정리

#객체지향설계

#소프트웨어아키텍처

#코딩테스트준비

#자바프로그래밍

#소프트웨어개발방법론

#IT자격증공부

반응형

댓글