\ 디자인 패턴이란? :: Something New
728x90
반응형

디자인패턴이란?

특정 문맥에서 공통적으로 발생하는 문제에 대해

재사용 가능한 해결책

목적별로 일정한 패턴이 제시되어 있음

완전한 정답이 되는 알고리즘과 달리 현재 상황에 맞춰 최적화된 패턴을 결정하여 사용하는 것이 좋음

Gof Gang of Four 에서 제시한 총 23개의 패턴이 있음

 

디자인 패턴의 장점

개발자 간의 원활한 협업이 가능

소프트웨어의 구조를 파악하기 용이

재사용을 통해 개발 시간 단축-메소드나 클래스를 정형화함

설계 변경이 있을 경우 비교적 원활하게 조치가 가능

 

디자인 패턴의 단점

객체지향적 설계를 고려하여 진행해야함

초기 투자 비용이 많이 들어감 돈,시간 등,,,

 

디자인패턴

목적에 따른 분류

생성패턴, 구조패턴, 행동 패턴 세가지로 구분

 

  • 생성패턴;

생성 패턴은 객체의 생성과 관련된 패턴

특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 최소화 할 수 있도록 유연성 제공

Abstract Factory 구체적인 클래스를 지정하지 않고 인터페이스를 통해 연관되는 객체들을 묶어줌
Builder 객체의 생성과 표현을 분리하여 객체를 생성
Factory Method 객체 생성을 서브클래스로 분리하여 위임 캡슐화
ProtoType 원본 객체를 복사하여 객체를 생성 클론
Singleton 한 클래스마다 인스턴스를 하나만 생성하여 어디서든 참조
  • 구조패턴;

프로그램 내 자료 구조나 인터페이스 구조 등 프로그램 구조를 설계하는데 사용되는 패턴

클래스나 객체를 조합하여 더 큰 구조를 만들 수 있게 해줌

Adaptor 비호환 인터페이스에 호환성 부여하도록 변환
Bridge 구현부에서 추상층을 분리 후 각자 독립적으로 변형/확장 가능
Composite  트리 구조로 부분/전체 계층 표현, 복합/단일 객체를 구분없이 사용
Decorator  속 사용없이 객체 간 결합을 통해 객체 기능을 동적으로 추가/확장
Façade  상위에 인터페이스 구성하여 서브클래스의 기능을 복잡하게 표현하 지 않고 단순한 인터페이스로 구현 
Flyweight  인스턴스를 공유하여 메모리 절약 (클래스 경량화)
Proxy  접근이 힘든 객체를 연결하는 인터페이스 역할 (대리 객체 수행)

 

  • 행위패턴;

반복적으로 사용되는 객체들의 커뮤니케이션을 패턴화

결합도 최소화가 주 목적

객체 사이의 알고리즘 또는 책임을 분배하는 방법에 대해 정의됨

Chain of Responsibility  처리가능한 객체가 둘 이상 존재하여 한 객체 내 처리 불가 시 다음 객체로 이관
Command  요청 명령어들을 추상/구체 클래스로 분리 후 단순화/캡슐화
Interpreter  언어에 문법 표현 정의
Iterator  접근이 빈번한 객체에 대해 동일 인터페이스 사용
Mediator  객체들간 복잡한 상호작용을 캡슐화하여 객체로 정의 후 중재 
Memento  객체를 이전의 특정 시점의 상태로 저장하고 복원 (캡슐화 유지)
Observer  한 객체 상태 변화 시 상속되어 있는 객체들에 변화 전달
State  객체의 상태에 따라 동일한 동작을 다르게 처리 
Strategy  동일 계열 알고리즘을 개별적으로 캡슐화하여 상호 교환
Template Method  여러 클래스에서 공통 사용 메서드를 상위 클래스에서 정의하고, 하위 클래스마다 다르게 구현해야하는 세부 사항를 개별 구현
Visitor   각 클래스 데이터 구조로부터 처리/연산 기능을 분리하여 별도의 클래스를 만들고, 해당 클래스 메서드가 각 클래스를 돌아다니며 특정 작업을 수행 → 객체 구조 변경 X / 새로운 연산 기능만 추가

 

각자 상황에 맞게 패턴을 적용

뭐가 더 중요한진 애매한 부분이 있음

디자인 패턴이란 필요할 때 마다 찾아보는 식으로 설계할 때 간략하게 아는걸 detail화 시켜서 코드를 작성

728x90

+ Recent posts