ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS] 디자인 패턴 - 2.Constructor
    JS 2024. 6. 29. 13:59



    생성자 패턴(Constructor Pattern)은 객체 지향 프로그래밍에서 클래스를 사용하여 객체를 생성하는 패턴입니다. 이 패턴은 자바스크립트에서 주로 클래스 또는 함수형 객체 생성자를 통해 구현됩니다. 생성자 패턴을 사용하면 같은 유형의 객체를 여러 개 만들 때 중복된 코드를 줄이고, 객체의 초기화 과정을 표준화할 수 있습니다.

    기본 생성자 패턴

    자바스크립트에서는 함수가 일급 객체(first-class object)로 취급되므로 함수 자체를 생성자로 사용할 수 있습니다. 이때, 생성자 함수는 대문자로 시작하는 것이 관례입니다. new 키워드를 사용하여 생성자 함수를 호출하면, 새로운 객체가 생성되고 생성자 함수 내의 this가 그 객체를 참조하게 됩니다.

    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', 30);
    person1.sayHello(); // Hello, my name is John and I am 30 years old.
    
    const person2 = new Person('Jane', 25);
    person2.sayHello(); // Hello, my name is Jane and I am 25 years old.
    
    

    프로토타입을 활용한 생성자 패턴

    생성자 함수 내에 메서드를 정의하면, 모든 객체 인스턴스가 각각의 메서드를 가지게 되어 메모리를 비효율적으로 사용하게 됩니다. 이를 해결하기 위해 자바스크립트의 프로토타입을 사용하여 메서드를 정의할 수 있습니다. 이렇게 하면 모든 객체 인스턴스가 동일한 메서드를 공유하게 됩니다.

    function Person(name, age) {
        this.name = name;
        this.age = age;
    }
    
    Person.prototype.sayHello = function() {
        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
    };
    
    // 사용 예제
    const person1 = new Person('John', 30);
    person1.sayHello(); // Hello, my name is John and I am 30 years old.
    
    const person2 = new Person('Jane', 25);
    person2.sayHello(); // Hello, my name is Jane and I am 25 years old.

    클래스 문법을 사용한 생성자 패턴

    ES6(ECMAScript 2015)에서 도입된 class 문법을 사용하면 생성자 패턴을 더 직관적이고 간결하게 구현할 수 있습니다. 클래스는 생성자 메서드 constructor를 포함하며, 메서드를 정의할 때 프로토타입을 자동으로 사용합니다.

    class Person {
        constructor(name, age) {
            this.name = name;
            this.age = age;
        }
    
        sayHello() {
            console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
        }
    }
    
    // 사용 예제
    const person1 = new Person('John', 30);
    person1.sayHello(); // Hello, my name is John and I am 30 years old.
    
    const person2 = new Person('Jane', 25);
    person2.sayHello(); // Hello, my name is Jane and I am 25 years old.

    생성자 패턴의 장점

    • 객체 초기화의 표준화: 객체를 일관되게 초기화할 수 있습니다.
    • 코드 재사용성: 생성자 함수를 통해 동일한 구조의 객체를 반복적으로 생성할 수 있습니다.
    • 캡슐화: 객체의 상태와 메서드를 하나의 단위로 묶을 수 있습니다.

    생성자 패턴의 단점

    • 메모리 사용: 프로토타입을 사용하지 않고 생성자 내부에 메서드를 정의하면 메모리 사용이 비효율적일 수 있습니다.
    • 상속의 복잡성: 자바스크립트의 프로토타입 상속 모델을 이해하고 활용해야 하므로 복잡할 수 있습니다.

    생성자 패턴은 자바스크립트에서 객체를 효율적으로 생성하고 초기화하는 방법 중 하나로, 다양한 상황에서 유용하게 사용될 수 있습니다. 특히, ES6 클래스 문법을 사용하면 코드가 더 간결하고 읽기 쉬워집니다.

    댓글

#dev-hahm#