📌 브릿지 패턴(Bridge Pattern)이란? 구현과 추상화를 분리하여 각각 독립적으로 확장, 변형할 수 있게 하는 패턴이다. 추상적 개념과 구체적 구현을 서로 다른 두 개의 인터페이스로 구현한다. 특히 인터페이스와 구현을 분리함으로써 시스템의 유연성을 향상시킬 수 있다. 예를 들어 Circle(원) 및 Square(정사각형)라는 한 쌍의 자식 클래스들이 있는 Shape(모양) 클래스가 있다고 가정했을 때, 이 클래스의 계층 구조를 확장하여 색상을 도입하기 위해 Red, Blue 모양들을 자식 클래스에 만든다고 한다면 BlueCircle, RedSquare 등 새로운 모양 유형들과 색상 유형들을 추가할 때마다 계층 구조는 기하급수적으로 늘어난다. 위의 예시에서는 모양과 색상 두 가지 독립적인 차원에서..
📌 어댑터 패턴(Adapter Pattern)이란? 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 동작하도록 해주는 패턴이다. 기존에 있는 시스템에 새로운 써드파티 라이브러리가 추가된다던지, 레거시 인터페이스를 새로운 인터페이스로 교체하는 경우에 코드의 재사용성을 높일 수 있는 패턴이다. 해외여행을 다닐 때 각 국가의 표준전압이 달라 충전기 앞에 흔히 말하는 돼지코(110V 변환)를 사용한 경험이 있을 것이다. 이는 220V를 사용하는 대한민국 충전기의 인터페이스를 외국의 표준전압으로 변환하여 작동시키게끔 하는 어댑터이다. 즉, 어댑터란 이미 구축되어 있는 것을 새로운 어떤 것에 사용할 때 양 쪽 간의 호환성을 유지해 주기 위해 사용하는 것으로 기존 시스템에서 새로운 업체에서 제공..
📌 구조 패턴(Structural Pattern) 이란? 클래스나 객체를 조합하여 더 큰 구조를 만드는 패턴이다. 클래스와 객체 간의 관계를 강화하거나 변경하고, 더 큰 구조를 통해 시스템의 유연성화 효율성을 증가시키는 데 사용된다. 주로 상속이나 인터페이스를 활용하여 객체들 간의 관계를 조직화한다. 📌 구조 패턴의 특징 서로 독립적으로 개발한 클래스 라이브러리를 마치 하나인 것처럼 사용할 수 있다. 여러 인터페이스를 합성하여 서로 다른 인터페이스들의 통일된 추상을 제공한다. 인터페이스나 구현을 복합하는 것이 아니라 객체를 합성하는 방법을 제공한다. 📌 구조 패턴의 종류 [ 어댑터 패턴 (Adapter Pattern) ] 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록 타 클래스의 인터페이스..
📌 프로토타입 패턴(Prototype Pattern)이란? 프로토타입은 주로 실제 제품을 만들기에 앞서 대략적인 샘플 의미로 사용되는 단어이다. 프로토타입 패턴은 객체의 복사를 통해 새로운 객체를 생성하는 디자인패턴이다. 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며, 인스턴스는 새 객체를 만들기 위해 자기 자신을 복제한다. 주로 객체 생성 비용이 높고 유사한 객체가 반복적으로 필요한 경우에 사용된다. 📌 프로토타입 패턴 구조 [ Prototype ] 복제 메서드를 선언한다. [ ConcretePrototype ] 구체 클래스는 복제 메서드를 구현한다. 원본 객체의 데이터를 복제본에 복사하는 것 외에도 복제 프로세스와 관련된 일부 예외적인 경우들도 처리할 수 있다. (연결된 객체 복제..
📌 추상 팩토리 패턴(Abstract Factory Pattern) 이란? 연관성이 있는 객체 군이 여러 개 있을 경우 이들을 묶어 추상화하고, 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화하는 생성 패턴이다. 추상 팩토리 패턴은 상세화된 서브 클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공한다. 클라이언트에서 특정 객체를 사용할 때 팩토리 클래스만을 참조하여 특정 객체에 대한 구현부를 감추어 역할과 구현을 분리시킬 수 있다. 예를 들어 모니터, 마우스, 키보드를 묶은 전자 제품군이 있고, 이들 안에서 또 삼성, 애플, 로지텍 등 집합이 브랜드 명으로 나뉠 때 복잡하게 묶이는 제품군들을 관리와 확장하기 용이하게 패턴화 한..
📌 팩토리 메서드 패턴 (Factory Method Pattern) 이란? 팩토리 메서드 패턴은 객체 생성을 캡슐화하고 서브 클래스에서 어떤 클래스의 인스턴스를 만들지 결정하는 디자인 패턴 중 하나이다. 이 패턴을 사용하면 클라이언트 코드가 구체적인 클래스에 의존하지 않고도 객체를 생성할 수 있으며, 새로운 클래스를 추가하거나 기존 클래스를 변경할 때에도 클라이언트 코드를 수정하지 않아도 된다. 클라이언트에서 직접 생성자를 통해 구체적인 객체를 생성하는 것이 아닌, 구체적인 객체들을 도맡아 생성하는 팩토리 클래스를 만들고, 이를 상속하는 구체 팩토리 클래스의 메서드에서 여러 가지 구체적인 객체 생성을 각각 책임지는 것이다. 객체 생성에 필요한 과정을 템플릿화시키고 객체 생성에 관한 전처리 혹은 후처리를 ..
📌 빌더 패턴(Builder Pattern) 이란? 빌더 패턴은 복잡한 객체를 생성하는 방법을 정의하는 클래스와 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공하는 패턴이다. 많은 선택적인 멤버 변수나 지속성 없는 상태 값들에 대해 처리해야 하는 문제들을 해결한다. 팩토리 패턴이나 추상 팩토리 패턴에서 생성해야 하는 클래스에 대한 속성 값이 많을 때는 아래와 같은 이슈가 있다. 클라이언트 프로그램은 팩토리 클래스로 많은 파라미터를 넘겨줄 때 타입, 순서 등에 대한 관리가 어려워 에러가 발생할 확률이 높아진다. 경우에 따라 필요 없는 파라미터들에 대해 팩토리 클래스에 null 값을 넘겨주어야 한다. 생성해야 하는 서브클래스가 무거워지고 복잡..
📌 싱글턴 패턴(Singleton Pattern) 이란? 싱글턴 패턴이란 단 하나의 유일한 객체를 만들기 위한 디자인 패턴이다. 메모리 절약을 위해, 인스턴스가 필요할 때 똑같은 인스턴스를 생성하는 것이 아닌 기존의 인스턴스를 재활용하는 기법을 말한다. 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등의 경우 인스턴스를 여러 개 만들게 되면 자원을 낭비하게 되거나 버그를 발생시킬 수 있으므로 오직 하나만 생성하고 그 인스턴스를 사용하도록 하는 데 이런 경우에 싱글턴 패턴을 활용한다. 📌 싱글턴 패턴의 구조 가장 간단한 디자인 패턴 답게 구조도 간단한다. 싱글턴으로 이용할 클래스를 외부에서 생성할 수 없게 생성자를 private 접근제어자로 막고, 자기 자신의 인스턴스를 반환하는 정적 메서드를 추가하면 된다..