전체 글

전체 글

    [Design Pattern] 어댑터 패턴 (Adapter)

    [Design Pattern] 어댑터 패턴 (Adapter)

    Adapter Pattern 서로 다른 또는 호환되지 않는 인터페이스를 가진 객체들이 호환될 수 있도록 하는 구조적 디자인 패턴입니다. 어댑터라는 단어는 일상에서 많이 들어본 단어일 겁니다. 데스크톱과 모니터에 전원을 공급할 때 우리는 220V에서 해당 장치가 사용할 수 있는 다른 전압으로 바꿔주는 것처럼 어댑터 패턴에서의 어댑터란 클라이언트가 연결하고자 하는 서로 다른 스펙을 가진 대상과 연결될 수 있도록 해주는 변환기인 셈입니다. 장점 단일 책임 원칙(SRP)을 준수합니다. 프로그램의 기본 비즈니스 로직에서 인터페이스나 데이터 변환 코드를 분리할 수 있습니다. 개방 폐쇄 원칙(OCP)을 준수합니다. 클라이언트가 인터페이스를 통해 어댑터와 연결되는 경우 기존 클라이언트 코드를 수정/변형하지 않고 새롭게..

    [Design Pattern] 데코레이터 패턴 (Decorator)

    [Design Pattern] 데코레이터 패턴 (Decorator)

    Decorator Pattern 기능을 확장할 때 기존 클래스를 서브 클래싱 하여 확장하는 경우 어떤 문제가 발생할까요? 앱 푸시 라이브러리를 개발한다고 생각해봅시다. 상위 클래스인 Notifier 클래스에는 여러 필드와 생성자가 있고, 이메일을 통해 알림을 전송하는 send 메소드가 있습니다. 사용자가 SMS, 카카오톡, 인스타그램, 슬랙 같은 채널을 통해서 알림을 받고 싶어 할 때 우리는 Notifier를 상속받는 SMS Notifier, Kakao Notifier 같은 하위 클래스로 확장할 수 있습니다. 그런데 만약 연결된 모든 채널로 부터 알림을 받거나 특정한 채널의 조합으로 알림을 받고 싶어 한다면요? 이런 방식으론 최악의 경우 모든 경우의 수에 맞춰 서브 클래싱 하게 될 수 있습니다. 여러 기..

    [Design Pattern] 프록시 패턴 (Proxy)

    Proxy Pattern 프록시는 다른 대상에 대해서 대체자 또는 Placeholder를 제공할 수 있는 구조적 디자인 패턴입니다. 프록시는 원래 개체에 대한 액세스를 제어하므로 요청이 원래 개체에 전달되기 전 또는 후에 작업을 수행할 수 있습니다. 즉, 프록시(Proxy) 뜻 그대로 대신하여 어떠한 역할을 수행한다는 것으로 이해하면 됩니다. 개체를 참조할 때 직접 참조하지 않고 대리자를 통해서 접근한다면 개체의 메모리에 직접 접근하지 않고 개체를 참조할 수 있을 뿐 아니라 필요한 시점까지 개체의 생성, 수정, 삭제를 미룰 수 있습니다. (완벽히 같지는 않지만 비슷한 예로 CDN을 떠올리면 좋을 것 같습니다!) 장점 OCP(개방/폐쇄 원칙)을 준수합니다. 서비스 또는 클라이언트를 변경하지 않고 새 프록시..