(C++) 8.3 생성자 Constructors

이준우·2021년 11월 23일
0

전 시간에 배운 내용을 잠시 보면 이와 같다.
근데, class 내부에 있는 변수를 초기화하려면 어떻게 해야할까?

답은 private를 건들면 되긴한다.
private에 들어있는 변수를 초기화 해주는 방법이 있긴 하다. 하지만 C++에 새로운 문법이 나온건데(2019기준), 이는 생성자이다.

생성자란, 기준을 만들어주는 것이다. 다른 값으로 초기화를 하지 않는 이상 그 값을 계속해서 유지한다.
class의 이름과 똑같은 이름을 가진 생성자를 만들고 그 안에서 변수를 초기화 해주면 프로그램은 정상적으로 작동하는 것을 볼 수 있다.

또한 디버거를 찍어서 확인해보면, Fraction frac가 동작하는 즉시 Fraction()생성자로 들어가 초기화를 하고 frac.print()가 실행되는 것을 볼 수 있다. 따라서 생성자는 Fraction frac가 실행되는 즉시 바로 실행이 된다.

또한 여기서 차이점이 하나 더 발생하는데, 생성자에 매개변수가 없을 시에 Fraction frac;처럼 작성할 수 있다. 이게 도대체 무슨 소리냐? 라고 할 수 있는데, 다음 그림을 보자.
생성자에 매개변수가 있을 시에는 Fraction one_thirds(1, 3);으로 작성하고 생성자에 매개변수가 없을 시에는 () 넣지 않아도 된다. 헷갈릴 수 있지만 잘 알아두는 것이 좋다.


만약 생성자 매개변수를 초기화 한다면 어떤 일이 벌어질까?
초기화를 해도 입력된 값으로 초기화 된 것을 알 수 있다. 하지만 이런식으로 1만 넣어도 작동하는 것을 알 수 있다.


다시 처음으로 돌아가자면
이부분에서 생성자가 없는데, 이는 생성자가 없는 것이 아니라 숨어 있는 것이다. 즉, 이와 같은 형태이다.

따라서 생성자가 없으면 알아서 만들어 준다.


이 매개변수가 있는 생성자일때에는 정말 잘 알아두어야 한다. 거의 3가지 역할을 할 수 있기 때문이다.
1.)

2.)
3.)

즉, 1, 2, 3번을 보면 매개변수가 2개, 1개, 하나도 없어도 동작을 하는 것을 볼 수 있다.


저 둘의 차이점은 무엇일까?
{}같은 경우에는 {}안의 값이 무조건 같은 자료형이여야 한다. {1.0, 3}과 같이 작성하면 compiler는 오류를 내보낸다. {1, 3}처럼 작성을 해야한다.

하지만 ()같은 경우에는 ()안에 들어가는 자료형이 달라도 되긴 한다. complier가 경고만 보낼 뿐 오류를 내보내진 않는다. 최근들어 {}가 더 엄격하게 작동하므로 이를 선호하는 개발자도 많아지고 있다.


이중 class에 대해 제대로 하진 않겠지만, 이러한 순서를 갖는 다는 것을 알아두자. 어찌보면 당연한 거지만 알아두면 좋다.

profile
꿈꾸는 CV

0개의 댓글