디자인 패턴이란 자주 사용하는 설계 패턴을 정형화하여 이를 유형별로 가장 최적의 방법으로 개발을 할 수 있도록 정해둔 설계 알고리즘과 유사하지만, 명확하게 정답이 있는 형태는 아니며, 프로젝트의 상황에 맞추어 적용이 가능하다.
GOF 디자인 패턴
소프트웨어를 설계할 때는 기존 경험이 매우 중요하지만 모든 사람들이 다양한 경험을 가지고 있을 수는 없다.
이러한 지식을 공유하기 위해 나온 것이 GOF(Gang of Four) 의 디자인 패턴이며 객체지향 개념에 따른 설계 중 재사용할 경우 유용한 설계를 디자인 패턴으로 정리 해놓은 것이다.
총 23 가지의 디자인 패턴이 존재하며, 이를 잘 이해하고 활용한다면, 경험이 부족하더라도 좋은 소프트웨어 설계가 가능하다!
디자인 패턴의 장점
1. 개발자(설계자) 간의 원활한 소통
2. 소프트웨어 구조 파악 용이
3. 재사용을 통한 개발 시간 단축
4. 설계 변경 요청에 대한 유연한 대처
디자인 패턴의 장점
1. 객체지향 설계 / 구현
2. 초기 투자 비용 부담
Singleton pattern
싱글톤 패턴은 어떠한 클래스(객체) 가 유일하게 1개만 존재할 때 사용한다.
이를 주로 사용하는 곳은 서로 자원을 공유할 때 사용하는데, 실물 세계에서는 프린터가 해당되고 실제 프로그래밍에서는 TCP Socket 통신에서 서버와 연결된 connect 객체에 주로 사용된다.
전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴이다.
하나의 인스턴스만을 생성하는 책임이 있으며 getInstance 메서드를 통해 모든 클라이언트에게 동일한 인스턴스를 반환하는 작업을 수행한다.
Singleton |
instance |
singleton() getInstance() |
Adapter pattern
어댑터는 실생활에서는 100v 를 220v 로 변경해주거나, 그 반대로 해주는 돼지코 변환기를 예로 들 수 있다.
호환성이 없는 기존 클래스의 인터페이스를 변환하여 재사용할 수 있도록 해주며 SOLID 원칙 중 개방폐쇄 원칙(OCP) 를 따른다.
자세한 내용은 OCP 를 찾아서 확인할 수 있다.
Proxy pattern
프록시는 대리인 이라는 뜻으로써 뭔가를 대신해서 처리하는 것을 의미한다.
프록시 클래스를 통해서 대신 전달하는 형태로 설계되며, 실제 클라이언트는 프록시로부터 결과를 받는다. 캐시의 기능으로도 활용이 가능하다.
SOLID 원칙 중에서 개방폐쇄 원칙(OCP) 와 의존성 역전 원칙(DIP) 를 따른다.
Decorator pattern
데코레이터 패턴은 기존 뼈대(클래스) 는 유지하되, 이후 필요한 형태로 꾸밀 때 사용한다. 확장이 필요한 경우 상속의 대안으로도 활용할 수 있다.
SOLID 중에서 개방폐쇄 원칙(OCP) 과 의존성 역전 원칙(DIP) 를 따른다.
Observer pattern
옵저버 패턴은 변화가 일어났을 때, 미리 등록된 다른 클래스에 통보해주는 패턴을 구현한 것이다. 특히, event listener 에서 해당 패턴을 사용한다.
Facade pattern
facade 는 건물의 앞쪽 정면이라는 뜻을 가진다. 여러 개의 객체와 실제 사용하는 서브 객체의 사이에 복잡한 의존 관계가 있을 때, 중간에 facade 라는 객체를 두고, 여기서 제공하는 인터페이스만을 활용하여 기능을 사용하는 방식이다. facade 는 자신이 가지고 있는 각 클래스의 기능을 명확히 알아야 한다.
Strategy patternw
전략 패턴으로 불리며, 객체지향의 꽃이다.
유사항 행위들을 캡슐화하여, 객체의 행위를 바꾸고 싶은 경우 직접 변경하는 것이 아닌 전략만 변경하여, 유연하게 확장하는 패턴으로 SOLID 원칙 중 개방 폐쇄 원칙(OCP) 과 의존성 역전 원칙(DIP) 를 따른다.
전략 메서드를 가진 전략 객체(Noraml Strategy, Base64 Strategy), 전략 객체를 사용하는 컨텍스트(Encoder), 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트로 이루어져 있다.