
1. 생성패턴 (5)
Abstract Factory
|
여러 개의 연관된 서브 클래스를 특정 그룹으로 묶어 한 번에 수행할 수 있도록 만든 패턴
생성 군들을 하나에 모아놓고 팩토리 중에서 선택하게 하는 패턴 같은 종류의 객체들을 일관된 방식으로 생성하는 경우에 유용한 패턴 같은 종류의 여러 개의 객체를 생성할 수 있는 클래스를 생성하는 것 |
Factory Method
|
객체를 만들어내는 공장을 만드는 패턴
어떤 인스턴스를 생성할지는 서브클래스에서 정의하도록 하는 패턴 서브클래스가 인스턴스를 결정하도록 책임을 위임하는 패턴 객체를 만들어내는 부분을 서브 클래스에 위임하는 패턴 하나의 메소드가 여러 종류의 객체를 생성하는 것 |
Builder
|
객체의 생성에 있어서 복잡한 과정들을 분리하여 단계적으로 생성하는 것에 초점을 둔 패턴
생산 단계를 캡슐화 하여 구축 공정을 동일하게 이용하도록 하는 패턴 많은 인수를 가진 복잡한 객체를 생성할 때 다른 객체의 도움으로 생성하는 패턴 데이터의 순서에 상관없이 객체를 만들어 내는 패턴 생성자 초기화 문제 때문에 만들어진 패턴 |
Prototype
|
성능 향상을 위해 중복 객체를 생성하는 패턴, 객체를 생성할 때 비용을 줄이기 위해 사용
Prototype을 생성해 놓고, 나중에 복제해서 객체를 생성, new를 사용하지 않음 생성하는 객체가 동일하고 객체의 값이나 크기가 변하게 될 때 사용하는 패턴 |
Singleton
|
한 클래스에 한 객체만 존재하도록 제한, 오직 하나의 인스턴스만을 가지도록 하는 패턴
낭비되는 동일한 인스턴스가 여러 개 존재하여 성능 저하가 되지 않도록 하는 패턴 new를 한 번만 실행할 수 있도록 제한해야 함 유일한 맴버 변수가 되기 위해서는 static(정적)으로 선언, private로 접근을 제한해야 함 |
2. 구조패턴 (7)
Adaptor
|
인터페이스가 호환되지 않는 클래스들을 함께 동작할 수 있도록 하는 패턴
국내 가전제품을 외국에서 사용한다고 할 때, 동일한 전압을 사용하지 않는다면 변환 코드가 필요한데,이런 변환 코드를 Adaptor 구조 패턴이라고 볼 수 있음 |
Bridge
|
기능 부분과 구현 부분을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴
하나의 클래스 계층에 복잡하게 존재하는 기능 클래스와 구현 클래스를 분리하여, 두 개의 클래스를 연결하여 사용하는 결합도를 낮춘 패턴 extends는 견고한 연결이고, bridge는 느슨한 연결 상속은 클래스를 확장하기 위해 편리하지만 클래스 간의 연결을 강하게 고정시킴 기능 클래스 계층 : 상위 클래스에 있는 기능에 새로운 기능을 추가하기 위해서 상위 클래스를 extends로 상속 받아 기능을 추가 구현 클래스 계층 : 추상 클래스나 인터페이스를 상위 클래스로 두고 implements로 상속 받아, 상속 받은 하위 클래스에서 구체적으로 구현 |
Composite
|
단일 객체와 복합 객체를 클라이언트에서 동일하게 취급하거나 다룰 수 있는 패턴
복합 객체와 단일 객체의 처리 방법이 다르지 않을 경우에 전체와 부분 관계로 정의할 수 있음 트리 구조 형태를 다룰 때 유용, Directory-File 구조 형태가 대표적인 예 |
Decorator
|
기존 객체의 메서드의 소스를 변경하지 않고 새로운 행동을 추가하거나 오버라이딩 할 수 있음
객체에 독립적인 기능을 계속해서 추가, 확장할 때 사용하는 패턴 객체에 부가적인 기능을 동적으로 추가할 때 사용하는 패턴 |
Facade
|
복잡한 시스템을 구조화하여 쉽게 사용할 수 있도록 하는 패턴
하나의 인터페이스를 통해 느슨한 결합을 제공, 서브 시스템의 복잡한 구조 의식하지 않아도 됨 복잡한 내부 구조를 거대한 클래스로 만들어 편리한 인터페이스 제공 고수준의 인터페이스를 사용하므로 서브시스템을 쉽게 사용할 수 있음 단순화된 하나의 인터페이스만 사용하므로 클래스 간의 의존관계가 줄어들고 복잡성이 낮아짐 메소드를 단순화하여 라이브러리를 쉽게 사용하고 이해할 수 있게 함 클라이언트와 복잡한 서브시스템 사이에 Facade가 존재하게 됨 |
Flyweight
|
대량의 유사한 작은 객체들을 공유해서 비용 절감, 메모리를 가볍게 유지시키는데 유용한 패턴
자주 사용하는 동일한 데이터나 코드를 중복 생성하지 않도록 외부 자료 구조에 관리하는 풀(저장소)을 만들어 필요할 때마다 불러 사용할 수 있도록 함 여러 개의 '가상 인스턴스'를 제공하여 메모리 절감, '클래스의 경량화' |
Proxy
|
대리 객체를 통해 다른 객체로의 접근을 통제하고, 원래 객체의 작업을 대신 수행하도록 함
복잡한 작업과 단순한 작업을 나누어서 처리할 수 있는 패턴 원래의 기능을 수행하면서 부가적인 기능을 수행할 때 유용한 패턴 |
3. 행위패턴 (11)
Chain of
Responsibility |
하나의 문제가 발생했을 경우 그 문제의 처리를 담당하는 여러 개의 처리기를 두고 순서대로 처리하는 패턴
객체를 연결 리스트와 같이 연결한 후 현재 요구를 수행하지 못하는 객체라면 다음 객체에 넘기며 책임을 넘기는 형태의 패턴 후보 객체들을 모두 알 필요 없이 자신과 연결된 후보 객체만 알면 됨 어떤 요구에 대해 처리해주는 객체의 위치를 파악하기 힘든 경우에 유용 결합을 느슨하게 하기 위해 고안되었으며, 가장 좋은 프로그래밍 사례로 꼽힘 *Strategy 패턴 : 하나의 노드에서 특정 알고리즘을 선별하여 사용하고, Visitor 패턴 : 자신의 알고리즘이 노드에서 노드로 옮겨지면서 적용하지만, 이패턴 : 하나의 메시지가 다양한 노드에 존재하는 알고리즘의 적용을 거치게 함 |
Command
|
여러 기능을 실행할 수 있도록 재사용성이 높은 클래스를 설계하는 패턴
서비스를 호출할 때 융통성을 높이려고 사용 매개변수를 사용하여 여러 가지 다른 요구 사항을 처리할 수 있음 요청을 객체의 형태로 캡슐화하여 나중에 이용할 수 있도록 요청에 필요한 정보를 저장 |
Interpreter
|
간단한 언어의 문법을 정의하고 해석하는데 사용하는 패턴
SQL 구분 분석, 기호 처리 등에서 사용 다양한 인수(매개변수)를 활용하여 여러 가지 명령 처리 Text 문장을 해석하도록 지시하는 표현 인터페이스를 구현 |
Iterator
|
반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 하는 패턴
표현 방법을 자세하게 나타내지 않고 객체의 자료들을 순차적으로 접근하는데 유용 내부 구현을 노출시키지 않고 집약된(집합) 객체에 접근하고 싶은 경우에 적용 집합 객체에 대해 다양한 탐색 경로를 사용할 수 있고 서로 다른 집합 객체 구조에 대해서도 동일한 방법으로 접근할 수 있음 검색 기능을 자료구조와 분리시켜 객체로 만듦 |
Mediator
|
여러 개의 객체 간의 통신 복잡성을 줄이기 위해 사용되는 패턴
복잡한 상호작용을 하기 위한 복잡한 관계를 단순화시킬 수 있음 서로 다른 클래스 간의 모든 통신을 처리하고, 약한 결합(결합도 감소)으로 코드를 쉽게 유지 관리 할 수 있는 중재자 클래스 제공 |
Memento
|
객체의 상태를 저장해 두었다가 복원해야 될 경우에 사용하는 패턴
캡슐화 원칙을 지키면서 객체의 내부 상태를 파악하고 객체의 상태를 저장해둔 상태로 다시 복구할 수 있게 함 |
Observer
|
의존적이고 종속된 다른 객체들의 변화를 통지 받고 자동으로 갱신해주는 패턴
어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보 상태 변경 시 다른 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용 |
State
|
규칙에 따라 객체의 상태를 변화시키면서 객체가 할 수 있는 행위를 바꾸는 패턴
특정 메소드가 객체의 상태애 따라 다른 기능을 수행 객체의 상태에 따라 동일한 루틴에서 다른 행동을 할 수 있는 패턴 |
Template
Method |
작업의 일부분을 캡슐화 해 전체 일을 수행하는 구조는 그대로 유지하면서 특정 부분을 바꿈
알고리즘을 메소드로 정의, 하위 클래스에서 알고리즘 구조의 변경 없이 알고리즘 재정의 공통적인 작업 흐름은 추상클래스에서 정의, 나머지 구현들은 각각의 서브클래스에서 담당 전체적으로는 동일하면서 부분적으로는 다른 메소드의 코드 중복을 최소화 할 때 유용 |
Strategy
|
클래스별로 캡슐화 되어 있는 객체들을 교체할 수 있도록 함으로써 같은 작업을 다른 알고리즘으로 사용할 수 있도록 하는 패턴
다형성을 이용하여 특정 객체에 종속되지 않도록 하고, 다른 부분을 분리하여 캡슐화 함 상황에 맞게 행위를 변경하고 싶을 때 유용 |
Visitor
|
멤버 변수와 멤버 메소드를 다른 클래스로 분리하여 서로 간에 호출하게 하는 패턴
기존 객체의 구조를 수정하지 않고 새로운 기능(메소드)을 자유롭게 추가할 수 있음 알고리즘을 자료 구조에서 분리하여 클래스의 구조를 변경하지 않으면서 새로운 기능을 추가할 때 유용 분리된 알고리즘은 자료 구조를 방문하여 문제를 해결 |
'지식' 카테고리의 다른 글
[정처기] UML 다이어그램 총 정리 (0) | 2025.04.10 |
---|---|
[정처기] OSI 7 Layer 총 정리 (0) | 2025.04.03 |
[시험] 비전공자 정보처리기사 필기 3주 합격 후기 (0) | 2025.02.21 |
[깃허브] .DS_Store 파일이 도대체 뭘까? 삭제 방법까지 (3) | 2024.12.26 |
스프링 빈 스코프 prototype와 singleton의 차이 (0) | 2024.10.14 |