생성자 함수 (Constructor Function)
생성자 함수란 객체(또는 배열 등)를 생성하기 위한 특수한 함수이다. 자바스크립트에서 객체를 생성할 때 공통된 구조나 초기값을 반복적으로 설정할 수 있어, 코드 재사용성을 높이는 데 유용하다.
🤔 어디서 본 것 같은데?
객체와 배열을 생성하는 방법 중 하나이다! new
키워드와 함께 호출되며, 새로운 객체와 배열을 생성할 수 있다.
js
let obj = new Object();
let arr = new Array();
생성자 함수 사용 이유
동일한 구조의 객체를 여러 개 만들어야 할 때, 생성자 함수를 사용하면 중복된 코드를 줄일 수 있다.
일반 객체 리터럴 방식
js
const person1 = {
name: "바켸빈",
age: 20,
pet: "dog",
print: function () {
console.log("안녕하세요" + this.name + "입니다.");
},
};
const person2 = {
name: "박혜빈",
age: 30,
pet: "cat",
print: function () {
console.log("안녕하세요" + this.name + "입니다.");
},
};
- 객체를 매번 복사해서 만드는 방식은 유지보수가 어렵고 중복이 많다.
- 아래와 같이 생성자 함수를 사용하면 코드를 간단하게 작성할 수 있다.
생성자 함수 방식
js
function Person(name, age, pet) {
this.name = name;
this.age = age;
this.job = job;
this.print: function () {
console.log("안녕하세요" + this.name + "입니다.");
},
}
const person1 = new Person("바켸빈", 20, "dog")
const person2 = new Person("박혜빈", 30, "cat")
console.log(person1.name) // 바켸빈
console.log(person2.age) // 30
- 생성자 함수는 보통 첫 글자를 대문자로 작성한다
Person
new
키워드를 사용하여 호출하면, 내부에서this
는 새롭게 만들어질 객체를 가리킨다.this
에 프로퍼티나 메서드를 정의하면, 각인스턴스
에 그 값이 복사된다.- 예시에서, Person 생성자 함수는
name, age, pet
을 매개변수로 받아 객체를 생성하고,new Person(...)
을 통해 만들어진 객체는 각각person1
,person2
변수에 저장된다.
인스턴스(instance)란?
인스턴스란 생성자 함수(또는 클래스)를 이용해 실제로 만들어진 객체를 의미한다.
js
const person1 = new Person("바켸빈", 20, "dog");
// person1은 Person 생성자 함수의 인스턴스
- Person은 일종의 설계도이고,
person1
은 그 설계도를 기반으로 만들어진 인스턴스(실체)다. - 여러 인스턴스를 생성하면 구조는 같고 내용만 다른 객체들을 효율적으로 만들 수 있다.
instanceof
인스턴스 판별
js
console.log(person1 instanceof Person); // true
instanceof
를 활용해person1
이Person
의 인스턴스인지 판별을 할 수 있다.