카테고리 없음

객체 생성자 함수, 인스턴스

funfunweb 2024. 10. 24. 11:49

객체생성자함수, 인스턴스

 

자바스크립트에서 객체 생성자 함수는 새로운 객체를 생성하기 위한 템플릿 역할을 합니다. 이 함수는 new 키워드와 함께 호출되며, 호출될 때마다 새로운 객체 인스턴스를 생성합니다. 객체 생성자 함수는 일반적으로 대문자로 시작하는 이름으로 정의하는 관례가 있습니다.

객체 생성자 함수 만드는 방법

  1. 함수 정의: 생성자 함수를 정의할 때는 일반 함수처럼 정의합니다.
  2. this 키워드: this 키워드를 사용하여 새로 생성될 객체의 속성을 설정합니다.
  3. 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"

 

설명

  1. 생성자 함수 정의: Person이라는 이름의 생성자 함수를 정의했습니다. 이 함수는 name과 age 매개변수를 받아서 this를 통해 속성을 초기화합니다.
  2. 객체 인스턴스 생성: new 키워드를 사용하여 person1과 person2라는 두 개의 객체 인스턴스를 생성합니다. 각각의 객체는 Person 생성자 함수의 속성과 메서드를 가지게 됩니다.
  3. 속성 접근 및 메서드 호출: 각 객체의 속성에 접근하고, 메서드를 호출하여 객체의 기능을 사용할 수 있습니다.

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)**란 객체 지향 프로그래밍에서 특정 클래스나 생성자 함수로부터 생성된 구체적인 객체를 의미합니다. 클래스나 생성자 함수는 객체의 템플릿 역할을 하고, 인스턴스는 그 템플릿을 기반으로 만들어진 실제 객체입니다.

인스턴스의 특징

  1. 구체성: 인스턴스는 클래스의 구조를 따르지만, 각 인스턴스는 고유한 속성 값을 가질 수 있습니다.
  2. 메모리: 각 인스턴스는 별도의 메모리 공간을 가지므로, 서로 다른 인스턴스 간에 속성이 독립적입니다.
  3. 메서드 공유: 인스턴스는 클래스나 생성자에서 정의된 메서드를 공유합니다. 메서드는 클래스의 프로토타입에 정의되기 때문에, 모든 인스턴스에서 동일한 메서드를 사용할 수 있습니다.

예제

아래는 생성자 함수를 사용하여 인스턴스를 생성하는 예제입니다.

 

// 생성자 함수 정의
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."

결론

인스턴스는 클래스나 생성자 함수로부터 생성된 개별 객체로, 특정한 상태와 행동을 가집니다. 이를 통해 코드의 재사용성을 높이고, 객체 지향 프로그래밍의 원칙을 효과적으로 적용할 수 있습니다.