23가지 패턴 (Java)

yun yun·2021년 8월 13일
0

디자인 패턴이란?

  • 소프트웨어 디자인의 일반적인 문제에 대해 시도(try)되고, 테스트(test)된 해결책의 툴킷.
  • Don't reinvent the wheel => 자주 발생하는 문제들을 해결하기 위해 만들어진 23가지 패턴이 있으니, 23가지를 커스텀하여 해결하라는 의미

다지인 패턴을 배워야 하는 이유?

  • 객체 지향 설계 원칙을 사용하여 모든 종류의 문제를 해결하는 방법을 배울 수 있다.
  • 디자인 패턴을 이용하여, 팀원들과 보다 효율적인 의사소통을 할 수 있다.

패턴의 분류

분류명주된내용패턴의 종류
생성패턴- 객체 생성에 관련된 패턴
-기존 코드의 유연성과 재사용을 증가시키는 객체 생성 메커니즘을 제공
-추상팩토리(Abstract Factory)
-빌더(builder)
-팩토리메서드(Factory Method)
-프로토타입(Prototype)
-싱글턴(Singleton)
구조패턴- 클래스나 객체를 조합해 더 큰 구조를 만드는 패턴
-구조를 유연하고 효율적으로 유지하면서 개체와 클래스를 더 큰 구조로 조합하는 방법을 설명
-어댑터(Adapter)
-브리지(Bridge)
-컴퍼지트(Composite)
-데커레이터(Decorator)
-퍼사드(Facade)
-플라이웨이트(Flyweight)
-프록시(Proxy)
행동패턴-객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴
-효과적인 의사소통과 객체 간의 책임 할당을 처리
-책임 연쇄(Chain of Responsibility)
-커맨드(Command)
-인터프리터(Interpreter)
-반복자(Iterator)
-중재자(Mediator)
-메멘토(memento)
-옵서버(Observer)
-상태(State)
-정책(Strategy)
-템플릿메서드(Template Method)
-비지터(Visitor)

23가지 패턴

패턴명간단내용자세한내용(링크)
1패턴 소개LINK
2추상팩토리(Abstract Factory)다양한 구성 요소 별로 '객체의 집합'을 생성해야 할 때 유용하다.
이 패턴을 사용하여 상황에 알맞은 객체를 생성할 수 있다.
[LINK]
3빌더(builder)복합 객체의 생성 과정과 표현방법을 분리하여 동일한 생성 철차에서
서로 다름 표현 결과를 만들 수 있게 해는 패턴이다. / 생성자 오버로딩
[LINK]
4팩토리메서드(Factory Method)객체지향 디자인 패턴이며, Template Method의 생성 패턴 버전으로 볼 수 있다.[LINK]
5프로토타입(Prototype)생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며,
인스턴스는 새 객체를 만들기 위해 자신을 복제(clone)하게 된다.
[LINK]
6싱글턴(Singleton)생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고
최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다.
[LINK]
7어댑터(Adapter)클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로,
호환성이 없는 인터페이스 떄문에 함께 작동할 수 없는 클래스들이 함꼐 작동 하도록 해준다.
[LINK]
8브리지(Bridge)구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다.[LINK]
9컴퍼지트(Composite)객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로,
사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한다.
[LINK]
10데커레이터(Decorator)주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로,
기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다.
[LINK]
11퍼사드(Facade)클래스 라이브러리 같은 어떤 소프트웨어의 다른 커다란 코드 부분에 대한
간략화된 인터페이스를 제공하는 것을 의미한다.
[LINK]
12플라이웨이트(Flyweight)동일하거나 유사한 객체들 사이에 가능한 많은 데이터를 서로 공유하여
사용하도록 하여 메모리 사용량을 최소화하는 소프트웨어 디자인 패턴이다.
[LINK]
13프록시(Proxy)프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스이다.
프록시 패턴의 잘 알려진 예로는 참조 횟수 스마트 포인터 객체이다.
[LINK]
14책임 연쇄(Chain of Responsibility)명령 객체와 일련의 처리 객체를 포함하는 디자인 패턴이다.
각각의 처리 객체는 명령 객체를 처리할 수 있는 연산의 집합이고,
체인 안의 처리 객체가 핸들할 수 없는 명령은 다음 처리 객체로 넘겨진다.
이 작동방식은 새로운 처리 객체부터 체인의 끝까지 다시 반복된다.
[LINK]
15커맨드(Command)요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록
매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다.
[LINK]
16인터프리터(Interpreter)한 언어에서 문들을 평가하는 방법을 규정하는 디자인 패턴이다.
기본 개념은 특화된 컴퓨터 언어에서 각 기호(종단 또는 비종단)마다 클래스를 갖는 것이다.
[LINK]
17반복자(Iterator)객체 지향 프로그래밍에서 반복자를 사용하여 컨테이너를 가로지르며
컨테이너의 요소들에 접근하는 디자인 패턴이다.
반복자 패턴은 컨테이너로부터 알고리즘을 분리시키며,
일부의 경우 알고리즘들은 필수적으로 컨테이너에 특화되어 있기 때문에 분리가 불가능하다.
[LINK]
18중재자(Mediator)중재자 패턴을 사용하면 객체 간 통신은 중재자 객체 안에 함축된다.
객체들은 더 이상 다른 객체와 서로 직접 통신하지 않으며 대신 중재자를 통해 통신한다.
이를 통해 통신 객체 간 의존성을 줄일 수 있으므로 결합도를 감소시킨다.
[LINK]
19메멘토(memento)메멘토 패턴은 3개의 객체로 구현된다.
오리지네이터(originator), 케어테이커(caretaker), 메멘토(memento). 오리지네이터는 내부 상태를 보유하고 있는 일부 객체이다. 케어테이커는 오리지네이터에 대해 무언가를 하지만 변경에 대한 실행 취소를 하기를 원한다.
케어테이커는 먼저 오리지네이터에게 메멘토 객체를 요청한다. 그 뒤 예정된 일련의 명령을 수행한다. 명령 이전의 상태로 되돌리기 위해 메멘토 객체를 오리지네이터에 반환한다.
메멘토 객체 자신은 불투명 자료형(케어테이커는 변경할 수 없거나 변경해서는 안 되는)이다.
[LINK]
20옵서버(Observer)객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여
상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다.
[LINK]
21상태(State)객체 지향 방식으로 상태 기계를 구현하는 행위 소프트웨어 디자인 패턴이다.[LINK]
22정책(Strategy)실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다.[LINK]
23템플릿메서드(Template Method)소프트웨어 공학에서 동작 상의 알고리즘의 프로그램 뼈대를 정의하는 행위 디자인 패턴이다.[LINK]
24비지터(Visitor)알고리즘을 객체 구조에서 분리시키는 디자인 패턴이다.[LINK]

참고 사이트

profile
같이 일 하고 싶은 개발자가 목표!

0개의 댓글