객체생성자함수, 인스턴스
자바스크립트에서 객체 생성자 함수는 새로운 객체를 생성하기 위한 템플릿 역할을 합니다. 이 함수는 new 키워드와 함께 호출되며, 호출될 때마다 새로운 객체 인스턴스를 생성합니다. 객체 생성자 함수는 일반적으로 대문자로 시작하는 이름으로 정의하는 관례가 있습니다.
객체 생성자 함수 만드는 방법
- 함수 정의: 생성자 함수를 정의할 때는 일반 함수처럼 정의합니다.
- this 키워드: this 키워드를 사용하여 새로 생성될 객체의 속성을 설정합니다.
- new 키워드 사용: 생성자 함수를 호출할 때는 new 키워드를 사용해야 합니다.
예제
// 객체 생성자 함수 정의
function Person(name, age) {
this.name = name; // 객체의 name 속성
this.age = age; // 객체의 age 속성
this.greet = function() { // 메서드 추가
console.log(`Hello, my name is ${this.name}`);
};
}
// 새로운 객체 인스턴스 생성
const person1 = new Person("Alice", 30);
const person2 = new Person("Bob", 25);
// 속성 접근
console.log(person1.name); // "Alice"
console.log(person2.age); // 25
// 메서드 호출
person1.greet(); // "Hello, my name is Alice"
person2.greet(); // "Hello, my name is Bob"
설명
- 생성자 함수 정의: Person이라는 이름의 생성자 함수를 정의했습니다. 이 함수는 name과 age 매개변수를 받아서 this를 통해 속성을 초기화합니다.
- 객체 인스턴스 생성: new 키워드를 사용하여 person1과 person2라는 두 개의 객체 인스턴스를 생성합니다. 각각의 객체는 Person 생성자 함수의 속성과 메서드를 가지게 됩니다.
- 속성 접근 및 메서드 호출: 각 객체의 속성에 접근하고, 메서드를 호출하여 객체의 기능을 사용할 수 있습니다.
ES6 클래스 문법
자바스크립트에서는 ES6부터 클래스 문법을 도입하여 더 간결하게 객체 생성자 함수를 정의할 수 있습니다. 아래는 같은 기능을 클래스로 구현한 예제입니다.
// 클래스 정의
class Person {
constructor(name, age) {
this.name = name; // 객체의 name 속성
this.age = age; // 객체의 age 속성
}
greet() { // 메서드 추가
console.log(`Hello, my name is ${this.name}`);
}
}
// 새로운 객체 인스턴스 생성
const person1 = new Person("Alice", 30);
const person2 = new Person("Bob", 25);
// 속성 접근
console.log(person1.name); // "Alice"
console.log(person2.age); // 25
// 메서드 호출
person1.greet(); // "Hello, my name is Alice"
person2.greet(); // "Hello, my name is Bob"
결론
객체 생성자 함수는 재사용 가능한 객체 인스턴스를 생성하는 강력한 방법입니다. 클래스 문법을 사용하면 더 직관적이고 간결하게 객체 생성자를 정의할 수 있습니다. 두 방식 모두 객체 지향 프로그래밍의 중요한 개념을 구현하는 데 유용합니다.
인스턴스란?
**인스턴스(Instance)**란 객체 지향 프로그래밍에서 특정 클래스나 생성자 함수로부터 생성된 구체적인 객체를 의미합니다. 클래스나 생성자 함수는 객체의 템플릿 역할을 하고, 인스턴스는 그 템플릿을 기반으로 만들어진 실제 객체입니다.
인스턴스의 특징
- 구체성: 인스턴스는 클래스의 구조를 따르지만, 각 인스턴스는 고유한 속성 값을 가질 수 있습니다.
- 메모리: 각 인스턴스는 별도의 메모리 공간을 가지므로, 서로 다른 인스턴스 간에 속성이 독립적입니다.
- 메서드 공유: 인스턴스는 클래스나 생성자에서 정의된 메서드를 공유합니다. 메서드는 클래스의 프로토타입에 정의되기 때문에, 모든 인스턴스에서 동일한 메서드를 사용할 수 있습니다.
예제
아래는 생성자 함수를 사용하여 인스턴스를 생성하는 예제입니다.
// 생성자 함수 정의
function Car(brand, model) {
this.brand = brand;
this.model = model;
}
// 인스턴스 생성
const car1 = new Car("Toyota", "Camry");
const car2 = new Car("Honda", "Civic");
// 속성 접근
console.log(car1.brand); // "Toyota"
console.log(car2.model); // "Civic"
클래스 예제
ES6의 클래스 문법을 사용한 인스턴스 생성 예제입니다.
// 클래스 정의
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
// 인스턴스 생성
const dog = new Animal("Dog");
const cat = new Animal("Cat");
// 메서드 호출
dog.speak(); // "Dog makes a noise."
cat.speak(); // "Cat makes a noise."
결론
인스턴스는 클래스나 생성자 함수로부터 생성된 개별 객체로, 특정한 상태와 행동을 가집니다. 이를 통해 코드의 재사용성을 높이고, 객체 지향 프로그래밍의 원칙을 효과적으로 적용할 수 있습니다.