-
[JS] 디자인 패턴 - 2.ConstructorJS 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 클래스 문법을 사용하면 코드가 더 간결하고 읽기 쉬워집니다.
'JS' 카테고리의 다른 글
HTMLVideoElement WRTC Camera Zoom Update (0) 2024.08.08 Html Video set currentTime not working(not change) (0) 2024.08.05 [JS] 디자인 패턴 - 1. Factory (0) 2024.06.28 [JS]Local Storage VS Session Storage (0) 2024.06.27 [JS]MediaTrackConstraints - 웹캠 프레임 이슈 해결 (0) 2024.05.15