본문 바로가기
공부

정보처리기사 실기 - 행위패턴(디자인패턴)

by beria 2023. 8. 8.
반응형

 

정보처리기사 실기 디자인 패턴 중 행위패턴에 대해 알아볼게요.

 

정보처리기사 실기 - 공부하기

 

3. 행위패턴

객체간의 기능을 분배, 알고리즘을 수행하는 패턴


 

(1) 책임연쇄(Chain of Responsibility) : 수행가능한 핸들러로 요청을 넘김

요청을 처리하는 다양한 핸들러들이 연결되어 있고, 각 핸들러가 요청을 처리하거나 다음 핸들러로 넘길 수 있는 디자인 패턴입니다.

 

예시

일반적으로 회사에서 일자리 지원을 받을 때는 한 명의 담당자만 책임지고 처리합니다. 예를 들어, 이력서를 제출할 때 채용 담당자가 먼저 검토하고, 그 다음에 인사팀에서 처리를 하게 됩니다.
Chain of Responsibility 패턴을 적용하면 여러 담당자들을 연결하여 요청 처리를 다양한 단계로 나눌 수 있습니다. 즉, 채용 담당자가 이력서를 받아서 처리할 수 없으면, 해당 요청을 인사팀으로 넘기고, 인사팀에서도 처리하지 못하면 팀장으로 넘길 수 있습니다. 이렇게 핸들러들이 연결되어 있기 때문에 어떤 담당자가 요청을 처리하느냐에 따라 다양한 결과가 발생할 수 있습니다.


이와 같이 Chain of Responsibility 패턴은 여러 핸들러들을 연결하여 요청을 처리하고, 어떤 핸들러가 처리할 수 없으면 다음 핸들러로 넘기는 구조를 가지고 있습니다. 

 

 

 

 

(2) 커맨드(Command) : 요청을 객체로 캡슐화하여 처리, 취소, 재실행함

커맨드 패턴은 요청을 객체로 캡슐화하여 다양한 요청을 처리하고, 실행 취소 또는 다시 실행할 수 있도록 하는 디자인 패턴입니다.

 

예시
레스토랑에서는 주문을 받는 서비스가 있습니다. 각 주문은 다양한 요리들로 이루어져 있으며, 요리들을 주문한 순서대로 조리해야 합니다. 이때 커맨드 패턴을 활용하면 주문을 처리하는 구조를 간단하게 설계할 수 있습니다.

 

1. 주문(Command) 객체: 각 주문은 요리(Cooking) 객체로 캡슐화됩니다. 예를 들어, "스테이크 주문"은 SteakCookingCommand로 캡슐화되고, "파스타 주문"은 PastaCookingCommand로 캡슐화됩니다.
2. 조리사(Handler) 객체: 조리사들은 각 요리를 처리하는 역할을 합니다. 조리사들은 커맨드 객체들을 순서대로 실행하고, 주문을 완료합니다.

이렇게 커맨드 패턴을 활용하면 주문을 처리하는 과정을 유연하게 설계할 수 있습니다. 새로운 요리가 추가되어도 해당 요리에 대한 커맨드 객체만 추가하면 되며, 조리사들은 새로운 주문을 쉽게 처리할 수 있습니다. 또한, 주문이 완료된 순서를 추적하거나 주문을 취소하는 등의 기능도 추가하기 쉬워집니다. 

 

 

 

 

(3)인터프리터(Interpreter) : 언어나 표현식의 문법을 클래스로 표현, 해석, 실행

인터프리터 패턴은 언어나 표현식의 문법을 클래스로 표현하여 해당 언어나 표현식을 해석하고 실행하는 디자인 패턴입니다.

 

예시

인터프리터 패턴을 적용하면, 음악 악보를 구조화하고 해석할 수 있습니다. 각 악보 요소가 추상 구문 트리로 표현되어, 해석기가 해당 구문 트리를 해석하여 음악을 연주하거나 출력합니다. 이러한 인터프리터 패턴은 음악 악보와 같이 복잡한 구조를 가지고 있는 문법을 해석하고 실행하는데 유용하며, 다양한 음악을 다룰 수 있습니다.

 

 

 

 

(4)반복자(Iterator) : 동일자료형의 여러 객체 순차적 접근, 처리

이터레이터 패턴은 컬렉션의 요소들을 순차적으로 접근하고 처리하기 위한 디자인 패턴입니다.

 

예시
음악 플레이어에는 여러 곡들이 저장되어 있습니다. 이터레이터 패턴을 사용하면 음악 재생 목록의 곡들을 순차적으로 접근하여 관리할 수 있고 반복적인 작업을 간편하고 효율적으로 처리할 수 있습니다.

 

 

 

 

(5) 중재자(Mediator) : 객체간 상호작용 중재

다수의 객체 간 상호작용을 중재하여 복잡한 관계를 간단하게 만드는 디자인 패턴입니다.

 

예시

프로젝트 팀 내에서 중재자 역할을 하는 팀 리더를 두어 팀원들의 상호작용을 중개합니다. 팀원들은 중재자를 통해 정보를 주고받고, 문제가 발생하거나 결정을 내려야 할 때 중재자를 통해 의사소통합니다. 이렇게 함으로써 팀 내의 복잡한 관계를 단순화하고, 업무 수행에 필요한 정보를 효율적으로 전달하여 업무 진행을 원활하게 할 수 있습니다.

 

 

 

 

(6) 메멘토(Memento) : 객체의 상태를 저장하고 복원

객체의 상태를 저장하고 복원하는데 사용되는 디자인 패턴입니다.

 

예시

여러 개의 시간 여행 기계를 두어, 각각 다른 상태를 저장하고 복원할 수 있게 됩니다. 기계를 사용하여 특정 시점의 상태를 저장(Memento 생성)하고, 원하는 시점으로 돌아가서 저장한 상태를 복원(Restore from Memento)하여 그 시점의 상태를 되살릴 수 있습니다. 이렇게 함으로써 각각 다른 상태를 저장하고 다양한 시점으로 이동할 수 있게 됩니다.

 

 

 

 

(7) 옵저버(Observer) : 하나의 객체의 상태가 변경되면 해당 객체에 의존하는 다른 객체들이 자동으로 업데이트

객체 간의 일대다 의존 관계를 구현하여, 하나의 객체의 상태가 변경되면 해당 객체에 의존하는 다른 객체들이 자동으로 업데이트되는 패턴입니다.

 

예시
유튜버가 새로운 동영상을 업로드하면, 구독자들은 유튜버의 옵저버가 되어 자동으로 알림을 받습니다. 유튜버는 구독자들의 목록을 직접 관리할 필요 없이, 옵저버 패턴을 통해 업데이트를 통보하면 됩니다. 이렇게 하면 유튜버와 구독자들 간의 상호작용이 단순하고 효율적으로 이루어집니다.

 

 

 

 

(8) 상태(State) : 객체가 내부 상태에 따라 동작이 변경

객체가 내부 상태에 따라 동작이 변경되고 쉽게 유지 보수 및 확장할 수 있도록 하는 디자인 패턴입니다.

 

예시
커피 자판기의 각 상태를 상태 클래스로 추상화합니다. 예를 들어, 동전 투입 상태와 음료 선택 상태를 구체적으로 구현한 클래스를 만듭니다. 자판기 객체는 현재 상태를 유지하고, 상태에 따라 해당 상태 클래스의 메서드를 호출합니다. 이렇게 하면 자판기의 상태 변경 로직이 상태 클래스 내부에 캡슐화되며, 새로운 상태를 추가하거나 상태 전환 로직을 변경하기 쉬워집니다.

 

 

 

(9) 전략(Strategy) : 동일한 작업을 다양한 방법으로 수행

동일한 작업을 다양한 방법으로 수행하고자 할 때 사용되는 디자인 패턴입니다.


예시
여행을 준비할 때, 우리는 다양한 수단과 방법으로 여행지까지 이동하고, 숙소를 예약하며, 여행 일정을 짜는 등의 작업을 수행합니다. 이때 스트래티지 패턴을 활용하면, 각각의 작업을 독립적인 전략으로 정의하고 필요에 따라 선택하여 사용할 수 있습니다.

예를 들어,
- 이동 수단(비행기, 기차, 자동차 등)을 선택하는 전략
- 숙소 예약 방법(호텔, 에어비앤비, 게스트하우스 등)을 선택하는 전략
- 여행 일정을 계획하는 전략

이와 같이 스트래티지 패턴을 사용하면, 각 작업들은 독립적으로 정의되고, 필요에 따라 유연하게 조합하여 사용할 수 있습니다. 또한, 새로운 이동 수단이나 숙소 예약 방법 등이 추가되어도 해당 전략만 추가하면 되므로 코드의 변경을 최소화할 수 있습니다.

 

 

 

 

(10) 템플릿 메소드(Template Method) : 알고리즘의 구조를 정의하고, 일부 단계를 서브클래스에서 구현

알고리즘의 구조를 정의하고, 일부 단계를 서브클래스에서 구현하도록 하는 디자인 패턴입니다.

예시
요리 레시피는 특정 요리를 만드는 절차를 정의하고, 각 단계의 구체적인 내용은 요리 종류별로 다르게 구현합니다. 이때 템플릿 메소드 패턴을 활용하면 공통된 요리 절차를 추상화하여 서브클래스에서 구체적인 재료와 조리 방법을 오버라이드할 수 있습니다.

 

예를 들어, 스파게티와 카레라는 두 요리가 있을 때,
- 요리의 전체 과정(알고리즘)을 정의하는 템플릿 메소드: "요리하기"
- 스파게티의 재료와 조리 방법을 구현하는 서브클래스 메소드: "스파게티 만들기"
- 카레의 재료와 조리 방법을 구현하는 서브클래스 메소드: "카레 만들기"

이렇게 하면 스파게티와 카레를 만드는 절차는 동일하지만, 구체적인 재료와 조리 방법은 각각 다르게 적용할 수 있습니다. 템플릿 메소드 패턴을 사용하면 요리 레시피와 같이 공통된 절차가 있지만 구체적인 단계가 서브클래스에 의해 달라지는 상황에서 유용하게 활용할 수 있습니다.

 

 

 

 

(11) 방문자(Visitor) : 객체의 구조와 독립적인 연산을 분리하여 새로운 연산을 추가하거나 변경

객체의 구조와 독립적인 연산을 분리하여 새로운 연산을 추가하거나 변경할 수 있도록 하는 디자인 패턴입니다.

예시
온라인 쇼핑몰에는 다양한 상품들이 있습니다. 이때 방문자 패턴을 활용하면, 각 상품들을 구조화하여 특정 작업(연산)을 추가하거나 변경할 수 있습니다.

예를 들어,
- 상품들의 구조를 표현하는 객체 구조: 상품 클래스들과 이들을 방문하는 방문자 클래스들로 구성됩니다.
- 각 상품들의 정보를 출력하는 작업(연산): 방문자 클래스들의 메서드로 구현됩니다.

이와 같이 방문자 패턴을 사용하면, 상품들의 구조와 정보 출력을 분리하여 유연하고 쉽게 새로운 작업을 추가하거나 변경할 수 있습니다. 즉, 새로운 방문자 클래스를 만들어 새로운 작업을 수행하면 됩니다.

 

 

 

 

정보처리기사 실기 - 디자인패턴 : 생성패턴

정보처리기사 실기시험에서 디자인패턴 문제는 자주 출제되고 있어요. 기사 실기시험은 공부할 내용이 방대하고 비전공자인 저에겐 익숙하지 않은 내용들이 많아 암기가 쉽지 않네요. 이번엔

beria.tistory.com

 

정보처리기사 실시 - 디자인패턴 : 구조패턴

정보처리기사 실기 디자인 패턴 중 구조패턴에 대해 알아볼게요. 2. 구조패턴 클래스 or 객체 조합으로 대규모 구조를 만드는 패턴 (1) 어댑터(Adapter) : 인터페이스 연결하여 함께 동작 어댑터 패

beria.tistory.com

 

반응형