디자인패턴이란?
자주 사용하는 설계 패턴을 정형화 해서 이를 유형별로 나누어 가장 최적의 방법으로 개발을 할 수 있도록 정해둔 설계 패턴
알고리즘과 유사하나, 명확하게 정답이 있는 형태는 아니며 프로젝트 상황에 맞추어 적용 가능하다.
Gof 디자인 패턴
소프트웨어 설계에는 기존 경험이 매우 중요하다. 그러나 모든 사람들이 다양한 경험을 가지고 있을 수 없는데, 이러한 지식을 공유하기 위해 나온것이 GOF(Gang of Four) 의 디자인 패턴이다.
객체 지향 개념에 따른 설계 중 재사용 할 경우 유용한 설계를 디자인 패턴으로 정리 해 둔 것
Gof 의 디자인 패턴은 총 23개이다.
디자인 패턴의 장점
1) 개발자(설계자) 간 원활한 소통
2) 소프트웨어 구조 파악 용이
3) 재사용을 통한 개발 시간 단축
4) 설계 변경 요청에 대한 유연한 대처
디자인 패턴의 단점
1) 객체지향 설계 / 구현
2) 초기 투자 비용 부담
디자인 패턴의 종류
1) Singleton Pattern
어떠한 클래스(객체)가 유일하게 1개만 존재 할 때 사용
주로 서로 자원을 공유할 때 사용 (ex, 프린터)
TCP Socket 통신에서 서버와 연결된 connect 객체에 주로사용
1) Adapter Pattern
호환성이 없는 기존클래스의 인터페이스를 변환하여 재사용 할 수 있도록 함
(ex, 110v → 220v 변환기)
SOLID중에서 개방 폐쇄 원칙 (OCP)를 따른다.
2) Proxy Pattern
Proxy는 대리인이라는 뜻으로 뭔가를 대신해서 처리하는것
Proxy Class를 통해 대신 전달하는 형태로 설계, 실제 Client는 Proxy로 부터 결과를 받는다.
Cashe 기능으로 활용 가능하다.
SOLID 중에서 계방 폐쇄 원칙 (OCP)과 의존 역전 원칙 (DIP)를 따른다.
3) Decorator Pattern
기존 뼈대(클래스)는 유지하되, 이후 필요한 형태로 꾸밀때 사용
확장이 필요한 경우 상속의 대안으로도 확용한다.
SOLID 중에서 계방 폐쇄 원칙 (OCP)과 의존 역전 원칙 (DIP)를 따른다.
4) Facade Pattern
Facade = 건물의 앞, 정면
여러개의 객체와 실제 사용하는 서브객체 사이의 복잡한 의존관계가 있을때
중간에 facade라는 객체를 두고 여기서 제공하는 interface만을 활용해 기능 사용하는 방식
facade는 자신이 가지고 있는 각 클래스의 기능을 명확히 알아야 한다.
1) Observer Pattern
변화가 일어났을 때 미리 등록된 다른 클래스에 통보 해주는 패턴 구현
event listener에서 해당 패턴을 사용
2) Strategy Pattern
전략패턴, 객체지향의 꽃
유사한 행위들을 캡슐화하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경하여 유연하게 확장하는 패턴
SOLID 중에서 계방 폐쇄 원칙 (OCP)과 의존 역전 원칙 (DIP)를 따른다.
전략 메서드를 가진 전략객체 (Normal Strategy, Base64 Strategy)
전략 객체를 사용하는 컨텍스트 (Encoder)
전략 객체를 생성해 컨텍스트에 주입하는 클라이언트