본문 바로가기
프로그래밍 기초/C++

생성자(Constructor)란?

by junsday 2016. 11. 11.


생성자(Constructor)C++에서 클래스의 객체 생성 시 동시에 호출이 되는 것이다. 일반적인 함수처럼 생겼으며 클래스와 동일한 이름을 가지고 있다. 회사 면접이나 테스트에서 영어로 나오는 경우가 있으니 Constructor라는 용어도 꼭 알아두자. (생성자 == Constructor) 눈에 익숙해지도록 계속 언급하겠다.

생성자(Constructor)는 따로 명시해주지 않아도 알아서 생성이 된다. (컴파일러가 자동으로 생성해주는 세 가지: 생성자(Constructor), 복사 생성자(Copy Constructor), 대입 연산자 이 세 가지는 눈에 익도록 잠시 읽어보자. 계속해서 언급할 것이다.)

해당 클래스의 객체를 생성할 때 생성자(Constructor)의 형태로 생성한다. 이전 장에서 객체는 클래스의 이름으로 생성한다고 설명을 했지만 사실은 생성자(Constructor)의 형태로 생성하는 것이라고 봐야 더 옳다. 그 이유는 앞으로 설명하겠다.

앞서 말했듯이 생성자(Constructor)는 일반 함수처럼 생겼지만 반환형이 없다. 앞에 void, int 등의 반환형을 적지 않는다. 일반 함수와 차별적인 부분이다.

다음 그림을 보자



앞서 공부했던 코드이다. class.h8번째줄을 보면 Student 클래스의 이름과 같은 Student(string name)이 있다. voidint 같은 반환형이 없이 클래스의 이름과 똑같이 생겼다. 반환형이 없다는 것 빼고는 일반 함수와 똑같이 생겼다.

생성자(Constructor)는 일반 함수처럼 매개변수를 넣을 수도 있고, 넣지 않을 수도 있다. 여기서 주목해야 할 점은 class.cpp 파일의 객체생성부분이다. 생성자(Constructor)에 매개변수를 설정해주었기 때문에 객체 생성 부분에 인자를 넣어줬다. 이전에 이야기 했던 것처럼 위의 코드가 객체화를 할 때에는 클래스의 형식으로 하는 것이 아니라 생성자(Constructor)의 형식으로 한다는 것이 증명되는 부분이다.

다음 그림을 보자



class.h8번째 줄을 보면 생성자(Constructor)에 파라미터가 없다. 따라서 오른쪽 class.cpp에서 객체화를 할 때에도 인자를 넣어주지 않는다.

생성자(Constructor)는 위의 그림들처럼 명시해주지 않아도 생성이 되기 때문에 생성자(Constructor)를 적어주지 않아도 객체화를 할 때에 생성자(Constructor)의 형식으로 할 수 있게 되는 것이다. 클래스 이름과 생성자(Constructor)의 이름이 같아서 클래스 이름으로 객체화를 한다고 생각할 수 있지만 사실은 생성자(Constructor)의 형식으로 객체화를 한다는 것을 이번 장에서 알 수 있다.

컴파일러가 자동으로 생성해주는 세 가지가 있는데 생성자(Constructor), 복사 생성자(Copy Constructor), 대입 연산자가 있다. 기억하고 넘어가자.

복사 생성자(Copy Constructor)와 대입 연산자에 대해서는 나중에 자세히 공부하기로 하자.

'프로그래밍 기초 > C++' 카테고리의 다른 글

네임스페이스(namespace)란?  (0) 2016.11.11
getchar()  (0) 2016.11.11
인자(Argument)와 매개변수(Parameter)  (0) 2016.11.11
객체란?  (0) 2016.11.11
인라인 함수(Inline function)  (0) 2016.11.11

댓글