자바스크립트/Likelion_JS
04-2. 생성자 함수
김딸기*
2024. 10. 5. 02:27
생성자 함수 (Constructor Function)
객체 생성의 필요성
- 동일한 구조의 객체를 여러 개 만들고자 할 때, 객체의 모형을 선언하고 이를 이용해 객체를 쉽게 만드는 방법이 필요합니다.
- 객체를 생성하는 방법에는 주로 두 가지가 있습니다:
- 생성자 함수를 이용한 객체 생성
- 클래스를 이용한 객체 생성
생성자
- 생성자는 객체의 모형을 정의하고, 그 모형을 바탕으로 객체를 생성하는 역할을 하는 함수입니다.
- 모든 객체 지향 프로그래밍 언어에서 이 객체를 만드는 작업을 “객체를 생성한다”라고 표현하며, 이 역할을 하는 것을 “생성자”라고 부릅니다.
생성자 함수란?
- 생성자 함수는 객체를 만드는 역할을 하는 함수입니다.
- 일반 함수와 문법적인 차이는 없지만, 객체를 생성하기 위해 특별히 정의된 함수입니다.
- 관습적으로 첫 글자를 대문자로 작성하여 일반 함수와 구분합니다.
예시
javascript
코드 복사
function User(name, age) { this.name = name; this.age = age; } let user1 = new User('홍길동', 20); let user2 = new User('김철수', 25);
new 연산자를 이용한 객체 생성
- 생성자 함수는 new 연산자를 이용해 호출해야 객체가 생성됩니다.
- new 연산자는 객체를 새로 생성하겠다는 의미로, 함수 호출 시 자동으로 객체가 생성되고 this를 통해 멤버가 등록됩니다.
예시
javascript
코드 복사
let user = new User('홍길동', 20); // User 생성자 함수 호출 시 새로운 User 객체 생성
- new 없이 생성자 함수를 호출하면 객체가 생성되지 않고, 일반 함수처럼 실행됩니다.
this 예약어로 객체 멤버 등록
- 생성자 함수 내에서 this 예약어를 사용하여 객체의 프로퍼티와 메서드를 정의합니다.
- this를 사용하지 않은 변수나 함수는 생성되는 객체와 관련이 없으며, this를 사용한 경우에만 객체의 멤버로 등록됩니다.
예시
javascript
코드 복사
function User(name, age) { this.name = name; // 객체의 프로퍼티 등록 this.age = age; // 객체의 프로퍼티 등록 this.greet = function() { // 메서드 등록 return `안녕하세요, ${this.name}입니다.`; }; } let user = new User('홍길동', 20); console.log(user.greet()); // "안녕하세요, 홍길동입니다."
생성자 함수의 리턴값
- 일반 함수는 return을 사용해 반환값을 지정합니다.
- 그러나 생성자 함수는 객체 생성이 주목적이므로, new로 호출하면 자동으로 생성된 객체가 반환됩니다.
- 만약 생성자 함수 내에서 return 구문을 사용하게 되면, 반환되는 값이 기본 데이터 타입일 경우 이 값은 무시되고 자동으로 생성된 객체가 반환됩니다.
- 특정 객체를 반환하면 자동 생성된 this 객체는 무시됩니다.
예시
javascript
코드 복사
function User(name) { this.name = name; return { custom: '객체' }; // 자동 생성된 this 객체는 무시됨 } let user = new User('홍길동'); console.log(user); // { custom: '객체' }
외부에서 멤버 추가
- 생성자 함수로 객체를 생성한 후에도 원한다면 객체에 새로운 프로퍼티나 메서드를 추가할 수 있습니다.
- 동일한 생성자 함수로 생성된 객체들 간에 각기 다른 멤버를 가질 수 있습니다.
예시
javascript
코드 복사
let user1 = new User('홍길동', 20); let user2 = new User('김철수', 25); user1.isMember = true; // user1에 새로운 프로퍼티 추가 user2.greet = function() { return '안녕하세요!'; }; // user2에 새로운 메서드 추가 console.log(user1); // { name: '홍길동', age: 20, isMember: true } console.log(user2); // { name: '김철수', age: 25, greet: [Function] }
요약
- 생성자 함수는 객체의 모형을 정의하고, 이를 통해 객체를 생성하는데 사용됩니다.
- new 연산자를 사용하여 객체를 생성하며, this 예약어를 통해 프로퍼티와 메서드를 등록합니다.
- 생성자 함수에서 return을 사용할 경우, 반환되는 값에 따라 객체 생성이 달라질 수 있습니다.
- 생성된 객체에 멤버를 추가하여 객체 간에 서로 다른 구조를 가질 수 있습니다.