본문 바로가기
JavaScript 문법 시리즈

[JavaScript 문법] 20일차: 디자인 패턴

by cogito21_js 2024. 8. 20.
반응형

디자인 패턴이란?

디자인 패턴(Design Pattern)은 소프트웨어 설계에서 자주 발생하는 문제를 해결하기 위한 재사용 가능한 솔루션입니다. 디자인 패턴은 코드의 재사용성, 가독성, 유지보수성을 높이는 데 도움이 됩니다. 이번 글에서는 싱글톤 패턴, 팩토리 패턴, 모듈 패턴에 대해 알아보겠습니다.

싱글톤 패턴

싱글톤 패턴(Singleton Pattern)은 하나의 클래스에 오직 하나의 인스턴스만 존재하도록 보장하는 패턴입니다. 주로 애플리케이션의 전역 상태를 관리하는 데 사용됩니다.

예제

class Singleton {
  constructor() {
    if (!Singleton.instance) {
      this.value = Math.random();
      Singleton.instance = this;
    }
    return Singleton.instance;
  }

  getValue() {
    return this.value;
  }
}

const instance1 = new Singleton();
const instance2 = new Singleton();

console.log(instance1 === instance2); // true
console.log(instance1.getValue()); // 동일한 값
console.log(instance2.getValue()); // 동일한 값

팩토리 패턴

팩토리 패턴(Factory Pattern)은 객체 생성 로직을 별도의 팩토리 클래스나 메서드로 분리하여, 객체 생성 과정을 캡슐화하는 패턴입니다. 이를 통해 객체 생성 과정을 더 유연하고 확장 가능하게 만들 수 있습니다.

예제

class Car {
  constructor(make, model) {
    this.make = make;
    this.model = model;
  }
}

class CarFactory {
  static createCar(make, model) {
    return new Car(make, model);
  }
}

const car1 = CarFactory.createCar('Toyota', 'Corolla');
const car2 = CarFactory.createCar('Ford', 'Mustang');

console.log(car1); // Car { make: 'Toyota', model: 'Corolla' }
console.log(car2); // Car { make: 'Ford', model: 'Mustang' }

모듈 패턴

모듈 패턴(Module Pattern)은 코드를 모듈화하여 독립적인 단위로 분리하고, 필요한 부분만 노출하여 캡슐화를 구현하는 패턴입니다. 이는 코드의 유지보수성과 재사용성을 높이는 데 도움이 됩니다.

예제

const MyModule = (function() {
  // 비공개 변수와 메서드
  let privateVariable = 'I am private';

  function privateMethod() {
    console.log(privateVariable);
  }

  return {
    // 공개 변수와 메서드
    publicVariable: 'I am public',

    publicMethod: function() {
      privateMethod();
    }
  };
})();

console.log(MyModule.publicVariable); // 'I am public'
MyModule.publicMethod(); // 'I am private'
// console.log(MyModule.privateVariable); // 오류: privateVariable은 정의되지 않음
// MyModule.privateMethod(); // 오류: privateMethod는 정의되지 않음

싱글톤 패턴의 장점과 단점

장점

  1. 전역 접근: 애플리케이션 전체에서 동일한 인스턴스를 공유할 수 있습니다.
  2. 리소스 절약: 동일한 객체를 재사용하므로 메모리 사용을 줄일 수 있습니다.

단점

  1. 글로벌 상태: 전역 상태를 관리하기 때문에 의존성을 높이고, 테스트가 어려워질 수 있습니다.
  2. 병목 현상: 싱글톤 객체에 대한 동시 접근이 많아질 경우 병목 현상이 발생할 수 있습니다.

팩토리 패턴의 장점과 단점

장점

  1. 객체 생성 캡슐화: 객체 생성 로직을 캡슐화하여 코드의 유연성과 확장성을 높일 수 있습니다.
  2. 코드 중복 감소: 객체 생성 로직을 중앙 집중화하여 코드 중복을 줄일 수 있습니다.

단점

  1. 추가 클래스 필요: 팩토리 클래스를 별도로 작성해야 하므로 코드가 복잡해질 수 있습니다.
  2. 디버깅 어려움: 객체 생성이 팩토리 클래스 내부에서 이루어지기 때문에 디버깅이 어려울 수 있습니다.

모듈 패턴의 장점과 단점

장점

  1. 캡슐화: 비공개 변수와 메서드를 보호하여 코드의 무결성을 유지할 수 있습니다.
  2. 모듈화: 코드를 모듈화하여 독립적인 단위로 분리할 수 있습니다.

단점

  1. 의존성 관리: 모듈 간의 의존성을 관리하는 데 어려움이 있을 수 있습니다.
  2. 네임스페이스 충돌: 전역 네임스페이스를 오염시키지 않도록 주의해야 합니다.

결론

디자인 패턴은 소프트웨어 설계에서 자주 발생하는 문제를 해결하기 위한 재사용 가능한 솔루션입니다. 이번 글에서는 싱글톤 패턴, 팩토리 패턴, 모듈 패턴에 대해 배웠습니다. 이러한 패턴을 이해하고 적절히 활용하면 코드의 재사용성과 유지보수성을 크게 향상시킬 수 있습니다. 다음 글에서는 디자인 패턴 심화 주제에 대해 알아보겠습니다.

다음 글에서 만나요!

 

반응형