객체 생성 패턴 (Object Creation Patterns)

객체 생성 패턴 (Object Creation Patterns)

자바스크립트(JavaScript)에서 객체 생성 패턴(Object Creation Patterns)은 객체(Object)를 효율적으로 생성하는 방법을 제공한다. 코드의 재사용성과 유지보수성을 높일 수 있다. 객체 생성 패턴(Object Creation Patterns)의 정의, 동작 방식, 일반 객체 생성과의 차이점, 그리고 사용 사례를 예제로 확인한다.


객체 생성 패턴(Object Creation Patterns)은 생성자 함수(Constructor Functions), 팩토리 패턴(Factory Pattern), 프로토타입 패턴(Prototype Pattern) 등을 포함한다. 자바스크립트(JavaScript)의 유연성을 활용한다.


객체 생성 패턴(Object Creation Patterns)이란 무엇인가?

객체 생성 패턴(Object Creation Patterns)은 객체(Object)를 생성하는 구조화된 접근 방식이다. 기본적인 예제를 살펴보자:

function Person(name) {
    this.name = name;
}
const person = new Person("철수");
console.log(person.name); // 철수

위 코드는 생성자 함수(Constructor Function)를 사용한 패턴이다. 팩토리 패턴(Factory Pattern)도 있다:

function createPerson(name) {
    return { name };
}
const person2 = createPerson("영희");
console.log(person2.name); // 영희

객체 생성 패턴(Object Creation Patterns)의 동작 방식

객체 생성 패턴(Object Creation Patterns)은 객체(Object)의 생성과 초기화를 분리하거나, 공통 속성을 공유한다. 프로토타입(Prototype)을 활용하면 메모리 효율성을 높일 수 있다.


예제를 통해 동작 방식을 확인한다:

const proto = {
    greet() { return `안녕, ${this.name}`; }
};
const person3 = Object.create(proto);
person3.name = "민수";
console.log(person3.greet()); // 안녕, 민수

Object.create는 프로토타입(Prototype)을 기반으로 객체를 생성한다.


객체 생성 패턴(Object Creation Patterns)과 일반 객체 생성의 차이점

1. 생성 방식

- 일반 객체 생성: 리터럴(Literal) 사용.

const obj = { name: "철수" };

- 패턴: 구조화된 방식 사용.

function createObj(name) { return { name }; }

2. 재사용성

- 일반 객체 생성: 반복 작업 필요.

- 패턴: 템플릿 제공.


사용 사례

객체 생성 패턴(Object Creation Patterns)의 활용 사례를 예제로 확인한다.


1. 생성자 함수

function Car(model) {
    this.model = model;
}
const car = new Car("SUV");
console.log(car.model); // SUV

2. 팩토리 패턴

function createUser(name, age) {
    return { name, age };
}
const user = createUser("철수", 25);
console.log(user); // { name: "철수", age: 25 }

3. 프로토타입 패턴

const base = { say() { return this.name; } };
const obj = Object.create(base);
obj.name = "영희";
console.log(obj.say()); // 영희

4. 모듈 패턴

const counter = (function() {
    let count = 0;
    return { increment: () => ++count, get: () => count };
})();
console.log(counter.increment()); // 1

5. 싱글톤 패턴

const singleton = (function() {
    let instance;
    return function() {
        if (!instance) instance = { name: "유일" };
        return instance;
    };
})();
const s1 = singleton();
console.log(s1.name); // 유일

6. 객체 리터럴 확장

function createExtended(name) {
    return { name, greet: () => `안녕, ${name}` };
}
const ext = createExtended("민수");
console.log(ext.greet()); // 안녕, 민수

7. 클래스 사용

class Animal {
    constructor(type) { this.type = type; }
}
const animal = new Animal("포유류");
console.log(animal.type); // 포유류

8. 동적 생성

function dynamicCreate(props) {
    return Object.assign({}, props);
}
const dyn = dynamicCreate({ x: 1, y: 2 });
console.log(dyn); // { x: 1, y: 2 }

성능과 한계

장점

- 재사용성: 동일한 구조를 반복 생성한다.

- 효율성: 프로토타입(Prototype)으로 메모리를 절약한다.


한계

- 복잡성: 패턴이 많아지면 관리가 어렵다.

- 오버헤드: 동적 생성은 성능에 영향을 줄 수 있다.

필요한 패턴만 선택하여 복잡성을 줄인다.


마무리

객체 생성 패턴(Object Creation Patterns)은 자바스크립트(JavaScript)에서 객체(Object)를 구조화하는 유용한 방법이다. 사용 사례를 통해 그 활용 방식을 살펴봤다.


+ Recent posts