Design Patterns 5

[Design Patterns] Singleton

목차 개요 이번 글에선 Object Creational Pattern인 싱글톤 패턴에 대해 알아보겠습니다. 내용 요약 클래스가 하나의 객체만 가질 수 있게 하고 이 객체에 대한 글로벌한 접근을 제공하자. 예시 데이터베이스 커넥션을 생성하고 유지하는 것은 값비싼 작업입니다. 매 요청마다 혹은 객체마다 DB 커넥션을 맺으면 어떻게 될까요? 아마 꽤 많은 서버 자원을 DB 커넥션을 맺는데에만 써야 할 것입니다. 이럴 때, 한 객체에서 DB 커넥션을 맺어놓고 항상 이 객체를 통해서만 DB 요청을 하게 되면 문제가 어느정도 완화되지 않을까요? 구조 이야깃거리 언제 써야 할까? 오직 하나의 객체만 가져야 하는 클래스가 있고, 이 객체를 쉽게 가져올 수 있어야 할 때 장단점 (Pros) 유일한 객체에 대한 조절되는 ..

Design Patterns 2024.02.25

[Design Patterns] Prototype

목차 개요 이번 글에선 Object Creational Pattern인 프로토타입 패턴을 알아보겠습니다. 내용 요약 만들고자하는 객체를 우선 생성한 다음, 이 객체(프로토타입)를 복사함으로써 새 객체를 생성하자. 예시 악보를 그려주는 애플리케이션을 작성한다고 생각해봅시다. 사용자가 화면에서 새로운 음표를 생성했을 때, 어떻게 음표를 생성하면 좋을까요? 이 때 프로토타입 패턴을 사용할 수 있습니다. 프로토타입 패턴은 프로토타입으로 불리는 객체를 우선 생성해두고 이 객체를 복사함으로써 새 객체를 생성하는 방식입니다. 이 때의 클래스 다이어그램은 아래와 같습니다. 구조 이야깃거리 언제 써야 할까? 클래스의 계층구조와 동일하게 만들어야 하는 팩토리 간 계층 구조를 피해야할 때 클래스의 객체가 오직 몇몇 상태의 ..

Design Patterns 2024.02.25

[Design Patterns] Factory Method

목차 개요 이번 글에선 Class Creational Pattern인 팩토리 메소드 패턴을 알아보겠습니다. 내용 요약 객체를 생성하는 인터페이스를 만들고, 서브 클래스가 어떤 클래스를 객체화할지 정하자. 동기 스프링과 같은 프레임워크를 생각해봅시다. 대부분의 프레임워크는 제어의 역전(Inversion of Control) 개념을 사용합니다. 즉, 프레임워크가 애플리케이션의 실행 흐름을 맡고 그 중간중간에 우리는 필요한 코드를 실행시키는 것이죠. 예를 들어, 사용자에게 GUI로 여러 문서를 보여주는 프레임워크를 생각해봅시다. 이 프레임워크의 2가지 주요 추상화는 Application, Document가 될 수 있을 것입니다. 두 클래스는 모두 추상 클래스이고, 사용자는 이 클래스의 서브 클래스를 작성해서 ..

Design Patterns 2024.01.27

[Design Patterns] Builder

목차 개요 이번 글에선 Object Creational Pattern인 빌더 패턴을 알아보겠습니다. 내용 요약 복잡한 객체의 생성을 별도의 클래스로 따로 분리하자. 예시 건축자가 집을 짓는다고 생각해봅시다. 집을 지을 때 건축자만 있으면 집을 지을 수 있을까요? 대게는 그렇지 않습니다. 건설같이 복잡한 작업을 할 땐 설계자가 도면을 그리고 건축자를 지휘해야 집을 지을 수 있습니다. 또한 지어야 하는 집의 양식에 따라 특화된 건축자 집단이 있을 수 있습니다. 나무 집에 특화된 건축자, 돌 집에 특화된 건축자 등등.. 구조 빌더 패턴은 Director, Builder, Builder 구현체로 이뤄져 있습니다. 하지만 요즘에는 java StringBuilder처럼 Builder 구현체만 있어도 빌더 패턴으로 ..

Design Patterns 2024.01.20

[Design Patterns] Abstract Factory

목차 개요 이번 글에선 Object Creational Pattern인 추상 팩토리 패턴을 알아보겠습니다. 내용 요약 추상 팩토리 패턴은 같은 기능을 제공하는 다른 구현체들을 사용하고 싶을 때 사용합니다. 클라이언트에게 Concrete class 대신 인터페이스를 제공하자! 예시 객체지향 프로그래밍을 이용해서 웹 프론트엔드 디자인을 한다고 생각해봅시다. 대부분은 디자인 라이브러리를 사용해서 개발할 것입니다. Material, NextUI, Bootstrap 등등.. 하지만 이런 라이브러리를 직접적으로 사용한다면 나중에 다른 라이브러리로 변경하는 것이 어려워집니다. 이럴 때 추상 팩토리 패턴을 사용할 수 있습니다. 시스템에 아래와 같은 클래스를 제공한다고 생각해봅시다. 버튼을 만들고 싶으면 componen..

Design Patterns 2024.01.15