Adapter Pattern

클래스의 인터페이스를 사용자가 기대하는 인터페이스 형태로 변환시킨다. 서로 일치하지 않는 인터페이스를 갖는 클래스들은 함께 동작시킨다. Motivation 구식 라이브러리나 외부 라이브러리와 새로운 시스템이 호환되지 않는 문제가 발생할 수 있다. 예를 들어, 어떤 API는 기존 시스템에서 사용하는 인터페이스와 다르게 설계되어, 이를 그대로 사용이 불가능할 수 있다. 어댑터 패턴을 사용해 호환성을 맞춰줄 수 있다. Applicability 기존 클래스를 사용하고 싶은데 인터페이스가 맞지 않을 때 아직 예측하지 못한 클래스나 실제 관련되지 않는 클래스들이 기존 클래스를 재사용하고자 하지만, 이미 정의된 재사용 가능한 클래스가 지금 요청하는 인터페이스를 정의하고 있지 않을 때, 즉 이미 만든 것을 재사용하고자 하나 이 재사용 가능한 라이브러리를 수정할 수 없을 때 (Object Adapter만 해당) 이미 존재하는 여러 개의 서브클래스를 사용해야 하는데, 이 서브클래스들의 상속을 통해 이들 인터페이스를 다 개조한다는 것이 현실성이 없을 때, Object Adapter를 사용해 부모 클래스의 인터페이스를 변형하는 것이 더 바람직함 Structure Class Adapter Class Adapter는 다중 상속을 활용해 한 인터페이스를 다른 인터페이스로 적응시킨다....

January 28, 2025 · 5 min · Beomsu Lee

Bridge Pattern

구현에서 추상을 분리하여 이들이 독립적으로 다양성을 가질 수 있도록 한다. Motivation 기존 방식에서는 Window 클래스가 특정 플랫폼(Linux, Mac, Windows)에 대한 구현을 직접 포함했다면, 새로운 플랫폼이 추가될 때마다 Window 클래스를 수정해야 한다. 브릿지 패턴을 이용해 Window와 WindowImp를 분리하면 독립적으로 확장할 수 있게 된다. Applicability 추상적 개념과 이에 대한 구현 사이 지속적인 종속 관계를 피하고 싶을 때 추상적 개념과 구현 모두가 독립적으로 서브클래싱을 통해 확장되어야 할 때 추상적 개념에 대한 구현 내용을 변경하는 것이 다른 관련 프로그램에 아무런 영향을 주지 않아야 할 때 사용자에게 구현을 완벽하게 은닉하길 원할 때 클래스 계통에서 클래스 수가 급증하는 것을 방지하고자 할 때 여러 객체들에 걸쳐 구현을 공유하고자 하며(참조 카운트 등), 또 이런 사실을 사용하는 쪽에 공개하고 싶지 않을 때 Structure Abstraction: 추상적 개념에 대한 인터페이스를 제공하고 객체 구현자에 대한 참조자를 관리한다....

January 28, 2025 · 5 min · Beomsu Lee

Builder Pattern

복잡한 객체를 생성하는 방법과 표현하는 방법을 정의하는 클래스를 별도로 분리하여, 서로 다른 표현이라도 이를 생성할 수 있는 동일한 절차를 제공한다. Motivation 문서 작성 애플리케이션에서 PDF나 HTML 형식의 문서를 생성할 수 있는 기능이 필요하다고 하자. 문서 객체는 여러 설정 항목(제목, 내용, 스타일 등)을 필요로 하며, 이러한 설정은 객체 생성 시마다 다를 수 있다. 이들을 생성자 매개변수로 전달하면 코드가 매우 복잡해질 가능성이 있으며, 각 문서 형식마다 서로 다른 생성 방식을 적용해야 하므로 코드의 유지보수가 어려워진다....

January 28, 2025 · 5 min · Beomsu Lee

Composite Pattern

부분과 전체의 계층을 표현하기 위해 객체들을 모아 트리 구조로 구성한다. 사용자로 하여금 개별 객체와 복합 객체를 모두 동일하게 다룰 수 있도록 하는 패턴이다. Motivation 파일 시스템에는 파일과 디렉터리가 존재하며, 디렉터리는 파일뿐만 아니라 다른 디렉터리도 포함할 수 있다. 이러한 관계를 구현할 때, 파일과 디렉터리를 다르게 다루면 코드가 복잡해지고, 이를 관리하는 데 불편함이 발생한다. 컴포지트 패턴을 사용하면 파일과 디렉터리를 동일하게 처리할 수 있다. 디렉터리는 파일과 다른 디렉터리를 자식 객체로 가지며, 이를 재귀적으로 처리할 수 있다....

January 28, 2025 · 6 min · Beomsu Lee

Factory Method Pattern

객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 결정하도록 한다. Motivation 애플리케이션이 여러 도형(원, 사각형 등)을 그려야 하며, 각 도형은 그리는 방식(화면에 그리기, 파일에 그리기 등)이 다르다. 클라이언트 코드에서 도형을 생성할 때 어떤 도형을 생성할지 조건문으로 판단하고, 이를 여러 곳에서 반복해야 한다. 팩토리 메서드 패턴을 사용하면 객체 생성을 서브클래스에 위임하여 클라이언트 코드에서 도형을 구체적인 클래스에 의존하지 않도록 할 수 있다. 즉, 도형 종류가 추가될 때 기존 코드를 수정하지 않고 새로운 도형 클래스를 추가하는 것만으로 해결할 수 있다....

January 28, 2025 · 4 min · Beomsu Lee