Lsiron

생성자함수 본문

언어/Java Script

생성자함수

Lsiron 2024. 5. 26. 04:33

1. 생성자 함수란?

생성자 함수는 객체를 생성하고 초기화하는 역할을 수행하는 함수이다.

일반적으로 생성자 함수는 클래스와 함께 사용되어 객체 지향 프로그래밍에서 객체를 생성할 때 사용된다. 생성자 함수는 함수 선언문이나 함수 표현식을 사용하여 정의할 수 있다.

 

생성자 함수는 객체를 생성할 때 사용되는 템플릿 역할을 한다. 생성자 함수를 호출할 때 매개변수를 전달하여 객체의 초기 상태를 설정할 수 있다. 이를 통해 여러 개의 객체를 생성할 때 반복되는 초기화 작업을 효율적으로 처리할 수 있다.

생성자 함수는 일반 함수와 다르게 일반적으로 첫 글자를 대문자로 시작하여 정의한다. 이는 생성자 함수임을 명확히 구분하기 위한 관례이다.

생성자 함수 내부에서는 this 키워드를 사용하여 생성된 객체를 가리키며, 프로퍼티나 메서드를 추가하여 객체를 초기화할 수 있다.

예를 들어, 다음과 같이 Person 생성자 함수를 정의하고 호출하여 객체를 생성할 수 있다.

function Person(name, age) {
  this.name = name;
  this.age = age;
}

let person1 = new Person('Alice', 30);
let person2 = new Person('Bob', 25);

console.log(person1); // { name: 'Alice', age: 30 }
console.log(person2); // { name: 'Bob', age: 25 }

 

=> 위의 예시에서 Person 생성자 함수는 이름(name)과 나이(age)를 매개변수로 받아 각 객체의 프로퍼티로 설정한다. 생성자 함수를 통해 객체를 생성할 때 new 키워드를 사용하여 호출하고, 생성된 객체는 생성자 함수 내부의 this를 통해 초기화된다. 이를 통해 생성자 함수를 통해 객체를 효과적으로 생성하고 초기화할 수 있다.

 

2. 생성자 함수의 활용 예시

1. 자동차 정보를 저장하는 Car 생성자 함수

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
  this.getDescription = function() {
    return `${this.year}년식 ${this.make} ${this.model}`;
  };
}

let car1 = new Car('현대', '그랜저', 2021);
let car2 = new Car('기아', '쏘렌토', 2020);

console.log(car1.getDescription()); // 2021년식 현대 그랜저
console.log(car2.getDescription()); // 2020년식 기아 쏘렌토

2.  주문 정보를 저장하는 Order 생성

function Order(id, products) {
  this.id = id;
  this.products = products;
  this.getTotalPrice = function() {
    let totalPrice = 0;
    this.products.forEach(product => {
      totalPrice += product.price;
    });
    return totalPrice;
  };
}

let products1 = [{ name: 'Notebook', price: 1000 }, { name: 'Mouse', price: 50 }];
let order1 = new Order(1, products1);

let products2 = [{ name: 'Smartphone', price: 800 }, { name: 'Headphones', price: 100 }];
let order2 = new Order(2, products2);

console.log(order1.getTotalPrice()); // 1050
console.log(order2.getTotalPrice()); // 900

3.  게시물 정보를 저장하는 Post 생성자 함수

function Post(title, content, author) {
  this.title = title;
  this.content = content;
  this.author = author;
  this.publish = function() {
    console.log(`"${this.title}" 게시물이 ${this.author}에 의해 게시되었습니다.`);
  };
}

let post1 = new Post('JavaScript 기초', 'JavaScript 문법을 배워봅시다.', 'Lsiron');
let post2 = new Post('React 프로젝트', 'React를 사용한 웹 애플리케이션 개발', 'Siron');

post1.publish(); // "JavaScript 기초" 게시물이 Lsiron에 의해 게시되었습니다.
post2.publish(); // "React 프로젝트" 게시물이 Siron에 의해 게시되었습니다.

 

3. 현업에서 사용되는 생성자 함수

1.  Node.js 와 MongoDB

현업에서 생성자 함수가 사용되는 코드 예시는 주로 웹 개발에서 데이터베이스와 상호작용하는 모델 객체를 생성하는 데에 활용된다. 예를 들어 Node.js와 MongoDB를 함께 사용하는 웹 애플리케이션에서는 MongoDB의 스키마에 맞는 모델 객체를 생성할 때 생성자 함수가 사용된다.

아래는 Node.js와 MongoDB를 사용하여 사용자 정보를 다루는 모델 객체를 생성하는 코드 예시이다.

// mongoose 모듈을 사용하여 MongoDB와 연결
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_database', { useNewUrlParser: true, useUnifiedTopology: true });

// MongoDB의 사용자 스키마 정의
const userSchema = new mongoose.Schema({
  username: String,
  email: String,
  age: Number
});

// 사용자 모델 객체를 생성하는 생성자 함수
const User = mongoose.model('User', userSchema);

// 새로운 사용자 정보를 저장하는 함수
function saveUser(username, email, age) {
  const newUser = new User({
    username: username,
    email: email,
    age: age
  });

  newUser.save((err) => {
    if (err) {
      console.error(err);
    } else {
      console.log('사용자 정보가 성공적으로 저장되었습니다.');
    }
  });
}

// 새로운 사용자 정보 저장
saveUser('Lsiron123', 'Lsiron@example.com', 28);

 

=> 위 코드에서는 MongoDB의 스키마를 정의하고, 해당 스키마에 맞는 사용자 모델 객체를 생성하는 생성자 함수인 User를 정의하였다.

saveUser함수를 통해 새로운 사용자 정보를 생성하고 MongoDB에 저장할 수 있다. 이렇게 생성자 함수를 사용하여 모델 객체를 생성하면 데이터베이스와의 상호작용을 보다 효율적으로 관리할 수 있다.

 

2.  웹 개발 프로젝트 - 은행 계좌 어플

생성자 함수는 객체를 생성하고 초기화하는 데 사용되며, 실제로 많은 웹 개발 프로젝트에서 사용된다. 예를 들어, 간단한 은행 계좌 애플리케이션을 만들어보자.

// Account 생성자 함수
function Account(owner, balance) {
  this.owner = owner;
  this.balance = balance;
  this.deposit = function(amount) {
    this.balance += amount;
    console.log(`[${this.owner}] ${amount}원 입금: 현재 잔액 ${this.balance}원`);
  };
  this.withdraw = function(amount) {
    if (this.balance >= amount) {
      this.balance -= amount;
      console.log(`[${this.owner}] ${amount}원 출금: 현재 잔액 ${this.balance}원`);
    } else {
      console.log(`[${this.owner}] 잔액이 부족합니다.`);
    }
  };
}

// 새로운 계좌 생성
let myAccount = new Account('Lsiron', 10000);

// 입출금
myAccount.deposit(5000); // [Lsiron] 5000원 입금: 현재 잔액 15000원
myAccount.withdraw(2000); // [Lsiron] 2000원 출금: 현재 잔액 13000원
myAccount.withdraw(15000); // [Lsiron] 잔액이 부족합니다.

 

=> 위 코드에서 Account 생성자 함수는 계좌의 소유주와 잔액을 속성으로 갖는 Account 객체를 생성한다. 또한 입금과 출금을 수행하는 메서드도 포함되어 있다. 이를 통해 각 계좌는 소유주와 잔액 정보를 가지고 있고, 입출금을 할 수 있다.

이러한 방식으로 생성자 함수는 실무에서 객체를 쉽게 만들고 다룰 수 있도록 도와준다.