소프트웨어 개발을 할때 사용되는 디자인 패턴이란 과거에 소프트웨어 개발 과정에서 발견된 설계 노하우를 축적하여 그 방법에 이름이 붙여서 이후에 재사용 하기 좋은 형태로 특정 규약을 만들어서 정리해둔것을 말한다.
즉 효율적으로 알고리즘을 만들고 코드를 만들기 위한 방법론이라고 생각하면 될듯하다.
특정 한두개의 패턴을 외우기 보다는 다양하게 이해를 하고 적시적소에 맞게 자신의 코드에 녹여내면 될듯 하다.
종류는 대분류로는 생성패턴, 구조패턴, 행위 패턴으로 나뉘고 몇가지만 살펴보면,
생성패턴에서는
가장 유명한 디자인패턴인 싱글톤 패턴이 있다.
클래스의 인스턴스가 하나임을 보장하고 접근할수 있는 전역적인 접근점을 제공한다.
그리고 또다른 유명한 패턴은 추상팩토리 패턴이다.
구체적인 클래스를 지정하지 않고 관련이 있거나 독립적인 객체를 생성하기 위해 인터페이스를 제공하는 패턴이다.
구조패턴으로는
적응자 패턴 - 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴이다.
호환성이 없는 인터페이스이기에 함께 동작할수 없는 클래스들이 함께 작동하도록 해준다.
브릿지 패턴 - 구현부에 추상층을 분리하여 각자 독립적으로 변형가능한 패턴.
행위패턴은
옵저버 패턴 - 객체들 사이에 1:N의 의존관계를 정의하여 어떤 객체가 상태가 변활때 의존관계에 있는 모든 객체들이 자동으로 갱신하도록 하는 패턴
등이 있다.
너무 많은 패턴들이 있어서 다 다루진 못하였지만 몇가지만 알고 넘어가고 필요시에 적합한 패턴을 찾아서 사용을 하면 되겠다.
참고
생성패턴 (Creational)
Pattern NameDescription
Singleton | 싱글톤 패턴은 클래스의 인스턴스를 하나만 만들 수 있도록 클래스 초기화를 제한 |
Factory | 팩토리 패턴은 클래스에서 팩토리 클래스로 객체를 인스턴스화하는 책임을 짐 |
Abstract Factory | 팩토리 클래스용 팩토리를 생성 |
Builder | 단계별로 개체를 만들고 마지막으로 개체 인스턴스를 가져오는 방법 |
Prototype | 다른 유사한 인스턴스에서 새 개체 인스턴스를 만든 다음 요구 사항에 따라 수정 |
구조패턴 (Structural)
Pattern NameDescription
Adapter | 서로 관련이 없는 두 엔터티 간의 인터페이스를 제공하여 함께 작동할 수 있도록 함 |
Composite | 부분-전체 계층 구조를 구현해야 할 때 사용 |
Proxy | 다른 개체에 대한 액세스를 제어하기 위해 중개자 제공 |
Flyweight | 변경할 수 없는 개체와 함께 사용되는 개체 인스턴스를 캐싱하고 재사용 |
Facade | 클라이언트 응용 프로그램을 돕기 위해 기존 인터페이스 위에 wrapper 인터페이스를 만듬 |
Bridge | 인터페이스를 구현에서 분리하고 클라이언트 프로그램에서 구현 세부 정보를 숨기는 데 사용 |
Decorater | 런타임에 개체의 기능을 수정하는 데 사용 |
행위패턴 (Behavioral)
Pattern NameDescription
Template Method | 일부 구현 단계를 하위 클래스로 연기하는 데 사용 |
Mediator | 시스템의 서로 다른 개체 간에 중앙 집중식 통신 매체를 제공하는 데 사용 |
Chain of Responsibility | 클라이언트의 요청이 객체 체인으로 전달되어 처리되는 소프트웨어 설계에서 느슨한 결합을 달성하는 데 사용 |
Observer | 객체의 상태에 관심이 있고 변경 사항이 있을 때마다 알림을 받고 싶을 때 사용 |
Strategy | 전략 패턴은 특정 작업에 대해 여러 알고리즘이 있고 클라이언트가 런타임에 사용할 실제 구현을 결정 |
Command | 명령 패턴은 요청-응답 모델에서 결합 손실을 구현하는 데 사용 |
State | 상태 디자인 패턴은 객체가 내부 상태에 따라 동작을 변경할 때 사용 |
Visitor | 방문자 패턴은 유사한 종류의 개체 그룹에 대해 작업을 수행해야 할 때 사용 |
Interpreter | 언어에 대한 문법적 표현을 정의하고 이 문법을 처리하는 인터프리터를 제공 |
Iterator | 개체 그룹을 통과하는 표준 방법을 제공하는 데 사용 |
Memento | 메멘토 디자인 패턴은 나중에 복원할 수 있도록 객체의 상태를 저장하고 싶을 때 사용 |
'IT > Knowledge' 카테고리의 다른 글
온프레미스 / 오프프레미스란? (18) | 2022.01.18 |
---|---|
ORM ( Object-Relational Mapping) 설명 및 소개 (10) | 2022.01.15 |
What is the kubernetes? (9) | 2022.01.13 |
Docker란? (11) | 2022.01.12 |
Multi-Tenancy 란? (15) | 2022.01.10 |
댓글