최근 수정 시각 : 2022-10-18 13:09:40

생성자

1. 개요2. 예시

1. 개요

constructor
객체 지향 프로그래밍에서 객체가 생성될 때 초기화시켜주는 함수를 의미한다. 필요에 따라 객체 내 데이터에 특정한 값을 입력하기도 한다.

C++ 자바같은 언어에서는 클래스와 동일한 이름을 가진 함수가 생성자로서 기능한다. 그 외 파이썬이나 Objective-C같은 언어에서는 특정한 키워드가 따로 정의되어있다.

생성자는 자료형을 갖지 않는다. void조차 아니다.

2. 예시

다음과 같은 C++ 코드가 있다고 가정하자.
#!syntax cpp
class Game{
private:
    string title; // 게임의 제목을 나타낸다
    int price; //게임의 가격을 나타낸다.
}

int main(){
    Game Minecraft; //Minecraft라는 이름의 인스턴스가 생성
}

이 경우, Minecraft라는 이름의 인스턴스는 생성되기만 했을 뿐, 게임의 제목과 가격은 값이 지정되지 않았다. 이런 경우에는 다음과 같은 방식으로 게임의 제목과 가격을 정해줄 수 있다.
#!syntax cpp
class Game{
private:
    string title; // 게임의 제목을 나타낸다
    int price; //게임의 가격을 나타낸다.
public:
    void set_data(string s, int n); //게임의 제목과 가격을 지정해 줄 함수이다.
}

void Game::set_data(string s, int n){
    title = s;
    price = n
}

int main(){
    Game Minecraft; //Minecraft라는 이름의 인스턴스가 생성된다.

    Minecraft.set_data("Minecraft", 30000); //게임의 이름과 가격을 정해주기 위해 함수를 호출한다.
}

이와 같은 방식으로 인스턴스에다가 게임의 제목은 Minecraft로, 가격은 30000으로 지정할 수 있다. 하지만, 생성자를 사용하면 더 간편하게 지정이 가능하다.
#!syntax cpp
class Game{
private:
    string title; // 게임의 제목을 나타낸다
    int price; //게임의 가격을 나타낸다.
public:
    Game(string s, int n); //생성자이므로, 클래스와 동일한 이름을 가지며 자료형을 가지지 않는다.
}

Game::Game(string s, int n){
    title = s;
    price = n;
}

int main(){
    Game Minecraft("Minecraft", 30000); //Minecraft라는 이름의 인스턴스가 생성되는 동시에 제목과 가격이 지정된다.
}

2.1. 오버로딩