image

⭐ 디자인 패턴이란?

디자인 패턴은 프로그램을 설계할 때 반복되는 문제점들을 해결하기 위한 일종의 규약이라고 할 수 있다.

싱글톤 패턴


싱글톤

싱글톤 패턴은 하나의 클래스가 하나의 인스턴스만을 가지는 패턴이다. 주로 DB 연결에 많이 사용된다.

인스턴스를 생성하는 비용이 줄어드는 장점이 있으나 의존성이 높아지는 단점이 있다.

의존성이 높아지면 테스트를 할 때도 걸림돌이 될 수 있다. 이때 의존성 주입(DI, Dependency Injection)으로 모듈 간의 의존성을 좀 더 느슨하게 만들 수 있다.

팩토리 패턴


팩토리패턴

팩토리 패턴은 객체를 생성하는 부분을 떼어내 추상화 한 패턴이다. 상속 관계의 두 클래스에서 상위 클래스가 추상화 된 구조를 가지고, 하위 클래스에서 이 구조를 구체화한다.

상위 클래스와 하위 클래스가 구분되면서 얻을 수 있는 장점은 결합이 느슨해지기 때문에 수정이 필요할 때도 유연하게 할 수 있다.

스트래티지(전략) 패턴


전략패턴

전략 패턴은 객체의 행위를 변경하려고 하는 경우 직접 수정하는 것이 아닌 캡슐화 된 기능을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다.

예를 들어 결제를 해야할 때 다양한 결제 수단 중에서 하나를 고르는 것처럼 다양한 전략으로 결국 하나의 목적을 달성할 수 있도록 하는 패턴이다.

옵저버 패턴


옵저버패턴

옵저버 패턴은 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 옵저버 목록에 있는 옵저버에게 알려주는 패턴이다.

대표적으로 안드로이드의 AAC LiveData와 같은 것이 있다. 안드로이드에서는 상황에 따라 알맞은 UI를 보여주기 위해 자주 사용되는 패턴이다.

옵저버 패턴은 주로 MVC나 MVVM과 같은 아키텍처와 함께 사용되는 경우가 많다. 아키텍처에 대해서는 다음에 살펴볼 예정이다.

프록시 패턴


프록시패턴

프록시 패턴은 어떤 동작이나 흐름의 중간에서 가로채 특정 작업을 한 후에 넘겨주는 패턴이다.

예를 들어 통신 과정에서 로깅을 한다거나 캐싱을 하는 등의 일련의 작업을 한 후 원래의 목적지로 넘겨주는 경우가 있을 것이다.

프록시라고 하면 프록시 서버가 더 익숙할 것이다. 프록시 서버는 서버와 클라이언트가 직접 연결되는 것이 아닌 중간에 프록시 서버가 존재해 간접적으로 접속할 수 있도록 해준다.

보안 상의 이유로 자주 사용되는 패턴이다.

이터레이터 패턴


이터레이터패턴

이터레이터 패턴은 iterator를 사용해 collection의 요소들에 접근하는 패턴이다.

파이썬을 예로 든다면 list, deque, map object, tuple, set, dictionary 등의 자료형이 있다. 이러한 자료형의 공통점은 순차적으로 탐색할 수 있다는 점이다. 주로 반복문과 함께 사용된다.