티스토리 뷰

반응형
title

소개

디자인 패턴은 소프트웨어 개발에서 자주 발생하는 문제를 해결하기 위한 일련의 해결책입니다. 이러한 패턴은 개발자들 사이에서 공통된 언어와 구조를 제공하여 코드의 가독성과 유지보수성을 향상시킵니다. 타입스크립트는 자바스크립트의 상위 집합으로, 정적 타입을 지원하여 개발자들이 코드를 더욱 안정적으로 작성할 수 있게 도와줍니다. 이번 블로그 포스트에서는 타입스크립트에서 자주 사용되는 디자인 패턴 중 하나인 팩토리 패턴에 대해 알아보겠습니다.

본문

1. 팩토리 패턴이란?

팩토리 패턴은 객체를 생성하는 인터페이스를 정의하고, 이를 서브 클래스가 결정하게 하는 패턴입니다. 이 패턴은 객체의 생성과정을 캡슐화하여 클라이언트 코드와의 결합도를 낮추고, 유연성과 확장성을 높이는데 도움을 줍니다. 팩토리 패턴은 다음과 같은 구성 요소로 이루어져 있습니다.

interface Product {
  operation(): string;
}

class ConcreteProductA implements Product {
  operation(): string {
    return 'ConcreteProductA operation';
  }
}

class ConcreteProductB implements Product {
  operation(): string {
    return 'ConcreteProductB operation';
  }
}

class Creator {
  createProduct(): Product {
    // 팩토리 메서드
    return new ConcreteProductA();
  }
}

const creator = new Creator();
const product = creator.createProduct();
console.log(product.operation()); // Output: 'ConcreteProductA operation'

2. 팩토리 패턴의 장점

팩토리 패턴은 다음과 같은 장점을 가지고 있습니다.

  • 객체 생성을 캡슐화하여 클라이언트 코드와의 결합도를 낮출 수 있습니다.
  • 유연성과 확장성을 높여 새로운 제품을 추가하거나 기존 제품을 변경하기 쉽습니다.
  • 객체 생성 로직을 중앙에서 관리하여 일관성을 유지할 수 있습니다.

3. 팩토리 패턴의 종류

팩토리 패턴은 크게 세 가지 종류로 나눌 수 있습니다.

  • 간단한 팩토리 패턴(Simple Factory Pattern)
  • 팩토리 메서드 패턴(Factory Method Pattern)
  • 추상 팩토리 패턴(Abstract Factory Pattern)

4. 간단한 팩토리 패턴

간단한 팩토리 패턴은 팩토리 클래스가 객체의 생성을 담당하는 패턴입니다. 클라이언트는 팩토리 클래스에게 객체 생성을 요청하고, 팩토리 클래스는 요청에 따라 적절한 객체를 생성하여 반환합니다. 이 패턴은 다음과 같은 구성 요소로 이루어져 있습니다.

class SimpleFactory {
  createProduct(type: string): Product {
    if (type === 'A') {
      return new ConcreteProductA();
    } else if (type === 'B') {
      return new ConcreteProductB();
    }
    throw new Error('Invalid product type.');
  }
}

const factory = new SimpleFactory();
const productA = factory.createProduct('A');
const productB = factory.createProduct('B');
console.log(productA.operation()); // Output: 'ConcreteProductA operation'
console.log(productB.operation()); // Output: 'ConcreteProductB operation'

5. 팩토리 메서드 패턴

팩토리 메서드 패턴은 객체 생성을 서브 클래스로 위임하는 패턴입니다. 슈퍼 클래스에서는 객체 생성을 위한 추상 메서드를 정의하고, 서브 클래스에서는 이를 구현하여 객체를 생성합니다. 이 패턴은 다음과 같은 구성 요소로 이루어져 있습니다.

abstract class Creator {
  abstract createProduct(): Product;

  operation(): string {
    const product = this.createProduct();
    return product.operation();
  }
}

class ConcreteCreatorA extends Creator {
  createProduct(): Product {
    return new ConcreteProductA();
  }
}

class ConcreteCreatorB extends Creator {
  createProduct(): Product {
    return new ConcreteProductB();
  }
}

const creatorA = new ConcreteCreatorA();
console.log(creatorA.operation()); // Output: 'ConcreteProductA operation'

const creatorB = new ConcreteCreatorB();
console.log(creatorB.operation()); // Output: 'ConcreteProductB operation'

결론

이번 블로그 포스트에서는 타입스크립트에서의 팩토리 패턴에 대해 알아보았습니다. 팩토리 패턴은 객체 생성을 캡슐화하여 유연성과 확장성을 높이는데 도움을 주는 중요한 디자인 패턴입니다. 다양한 종류의 팩토리 패턴을 활용하여 코드를 구성함으로써, 개발자들은 더욱 유지보수 가능하고 확장 가능한 소프트웨어를 개발할 수 있습니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday