자바스크립트 생성자 패턴과 모듈 패턴의 비교와 활용 사례

자바스크립트에서 객체를 생성하는 방법에는 여러 가지가 있습니다. 그 중에서 가장 일반적인 두 가지 방법은 생성자 패턴(Constructor Pattern)과 모듈 패턴(Module Pattern)입니다. 이번 포스트에서는 이 두 패턴을 비교하고 각각의 활용 사례를 살펴보겠습니다.

생성자 패턴(Constructor Pattern)

생성자 패턴은 객체를 생성하기 위해 함수를 사용하는 방법입니다. 일반적으로 생성자 함수는 new 키워드와 함께 호출되며, 객체의 프로퍼티와 메서드를 정의하는데 사용됩니다.

function Person(name, age) {
  this.name = name;
  this.age = age;
  
  this.sayHello = function() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person1 = new Person('John', 25);
person1.sayHello(); // Hello, my name is John and I am 25 years old.

생성자 패턴의 장점은 간단하고 직관적이며, 객체를 여러 번 생성할 수 있다는 것입니다. 그러나 매번 객체를 생성할 때마다 함수를 다시 정의하는데, 이는 메모리 낭비와 성능 저하를 유발할 수 있습니다.

모듈 패턴(Module Pattern)

모듈 패턴은 객체를 생성하는 것보다는 중첩된 함수와 클로저를 활용하여 프라이빗한 변수와 메서드를 유지하면서 모듈화된 코드를 구성하는 방법입니다. 이 패턴을 사용하면 객체의 프라이빗한 상태를 보호하고 재사용 가능한 코드를 구성할 수 있습니다.

const personModule = (function() {
  let name = '';
  let age = 0;
  
  function sayHello() {
    console.log(`Hello, my name is ${name} and I am ${age} years old.`);
  }
  
  function setName(newName) {
    name = newName;
  }
  
  function setAge(newAge) {
    age = newAge;
  }
  
  return {
    sayHello,
    setName,
    setAge
  };
})();

personModule.setName('John');
personModule.setAge(25);
personModule.sayHello(); // Hello, my name is John and I am 25 years old.

모듈 패턴의 장점은 프라이빗한 상태를 유지하고 접근할 수 있는 메서드를 노출하는 것입니다. 이를 통해 객체의 일부분만을 노출시킬 수 있고, 외부에서 프라이빗한 상태에 직접 접근하지 못하도록 보호할 수 있습니다.

비교와 활용 사례

생성자 패턴은 단순하고 직관적이며, 여러 번 객체를 생성해야 하는 경우 유용합니다. 모듈 패턴은 프라이빗한 상태와 메서드를 유지하고 싶을 때 활용할 수 있습니다. 또한 모듈 패턴은 싱글톤 패턴의 구현에도 많이 사용됩니다.

두 패턴을 비교하고 활용할 때에는 상황과 요구사항에 맞게 선택해야 합니다. 객체의 생성 빈도, 데이터의 공유 여부, 프라이빗한 상태의 필요성 등을 고려하여 적절한 패턴을 선택하면 됩니다.

#javascript #생성자패턴 #모듈패턴