디자인 패턴이란?
디자인 패턴이란 기존 환경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션 같은 것입니다. 디자인 패턴 계의 교과서로 불리는 [GoF의 디자인패턴]에서는 객체지향적 디자인 패턴의 카테고리를
"생성 패턴(Creational Pattern)", "구조 패턴(Structural Pattern)", "행동 패턴(Behavioral Pattern)"
3가지로 구분하고 있습니다.
어댑터 패턴(Adapter Pattern)
어댑터를 번역하면 변환기 라고 할 수 있다. 변환기의 역할은 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것이다.
어댑터 패턴은 개방 폐쇄 원칙을 활용한 설계 패턴이라고 할 수 있다.
어댑터 패턴은 합성, 즉 객체를 속성으로 만들어서 참조하는 디자인 패턴으로, 한 문장으로 정리하면 다음과 같다.
“호출 당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴”
프록시 패턴(Proxy Pattern)
프록시는 대리자, 대변인 이라는 뜻을 가진 단어다. 대리자/대변인 이라고 하면 다른 누군가를 대신해 그 역할을 수행하는 존재를 말한다.
프록시 패턴의 경우 실제 서비스 객체가 가진 메서드와 같은 이름의 메서드를 사용하는데, 이를 위해 인터페이스를 사용한다.
인터페이스를 사용하면 서비스 객체가 들어갈 자리에 대리자 객체를 대신 투입해 클라이언트 쪽에서는 실제 서비스 객체를 통해 메서드를 호출하고 반환값을 받는지, 대리자 객체를 통해 메서드를 호출하고 반환값을 받는지 전혀 모르게 처리할 수도 있다.
프록시 패턴은 실제 서비스 메서드의 반환값에 가감하는 것을 목적으로 하지 않고 제어의 흐름을 변경하거나 다른 로직을 수행하기 위해 사용한다. 프록시 패턴을 한문장으로 정리해보자.
“제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴”
데코레이터 패턴(Decorator Pattern)
데코레이터 패턴은 프록시 패턴과 구현 방법이 같다. 프록시 패턴은 클라이언트가 받는 반환값을 조작하지 않고 그대로 전달하는 반면, 데코레이터 패턴은 클라이언트가 받는 반환값에 장식을 덧입힌다.
데코레이터 패턴을 한 문장으로 표현하면 다음과 같다.
“메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴”
프록시 패턴과 동일하기 때문에, 개방 폐쇄 원칙과 의존 역전 원칙이 적용된 설계 패턴임을 확인할 수 있다.
싱글톤 패턴(Singleton Pattern)
싱글톤 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴이다. 싱글톤 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용한다. 안정성이 올라감. 중복 이슈 x
단일 객체인 경우 결국 공유 객체로 사용 되기 때문에 속성을 갖지 않게 하는것이 정석이다.
단일 객체가 속성을 갖게되면 하나의 참조 변수가 변경한 단일 객체의 속성이 다른 참조 변수에 영향을 미치기 때문이다.
이는 전역/공유 변수를 가능한 한 사용하지 말라는 지침과 일맥상통한다.
싱글톤 패턴을 한 문장으로 정리해보자
“클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴”
다음 글에서 계속
'BackEnd' 카테고리의 다른 글
[Spring] @RestControllerAdvice를 통한 스프링에서의 예외처리 (1) | 2024.12.16 |
---|---|
[DB] 효율적인 설계를 위해 어떤 SQL을 사용해야 할까? RDBMS vs NoSQL과 DB에서의 수직 확장(scale-up)과 수평 확장(scale-out) (0) | 2024.06.20 |
[Spring] BeanFactory와 ApplicationContext 이해하기 (0) | 2024.04.03 |
[Spring] 스프링 컨테이너와 빈 (0) | 2024.04.02 |
[Spring] 스프링 핵심원리 - 기본편 / 관심사의 분리 (0) | 2024.04.01 |