mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-05-03 15:55:55

생성자

constructor에서 넘어옴
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. 오버로딩