본문 바로가기
개발/C++

[EC++] 용어 정리 ( 선언, 정의, 기본생성자, 복사생성자, 초기화, 복사대입연산자 등 )

by 램램이 2020. 2. 10.

용어 정리

 

선언(declaration)

- 코드에 사용되는 '어떤 대상'의 이름과 타입을 컴파일러에게 알려주는 것

- 구체적인 세부사항은 선언에 들어 있지 않다.

정의(definition)

- 선언에서 빠진 구체적인 세부사항을 컴파일러에게 제공하는 것

- 객체의 경우에 있어서 정의는 컴파일러가 그 객체에 대한 메모리를 마련해 놓는 부분

- 함수나 함수 템플릿에 대한 정의는 그들에 대한 코드 본문을 제공하는 것

- 클래스 혹은 클래스 템플릿의 경우에는 그 클래스 혹은 템플릿의 멤버를 넣어준 결과

초기화

- 어떤 객체에 최초의 값을 부여하는 과정

- 사용자 정의 타입으로 생성한 객체의 경우, 초기화는 생성자에 의해 이루어진다.

 

기본생성자

- 어떤 인자도 주어지지 않은 채로 호출될 수 있는 생성자

- 원래부터 매개변수가없거나, 모든 매개변수가 기본 값을 갖고 있으면 기본 생성자가 될 수 있다.

explicit

- explicit 이 선언된 생성자는 암시적인 타입 변환을 수행하는 데 쓰이지 않음.

- 명시적으로 되는 곳에는 쓰일수 있다.

- 프로그래머가 예상하지도 못했던(바라지 않던) 타입변환을 막아주기 때문에 explicit을 우선적으로 사용하는 것이 좋음.

 

복사생성자

- 어떤 객체의 초기화를 위해 그와 같은 타입의 객체로부터 초기화할 때 호출 되는 함수

- 값에 의한 객체 전달을 정의해 주는 함수 ( 값에 의한 전달(pass-by-value) = '복사 생성자 호출' )

- 하지만 사용자 정의 타입을 값으로 넘기는 것보다 '상수 객체에 대한 참조'로 넘기기가 더 좋다.

복사 대입 연산자

- 같은 타입의 다른 객체에 어떤 객체의 값을 복사하는 용도로 쓰이는 함수.

'=' 문법은 복사 생성자를 호출하는데 사용 될 수도 있기 때문에 무조건 대입연산자라고 생각하면 안된다.

이를 구별하는 방법은 바로위에 코드는 생성자가 불리는 것처럼. 생성자가 불리는 경우는 복사생성자가 호출되는 거고, 새로운 객체가 정의 되지 않는 경우( w1 = w2 문장 ) 에는 생성자가 호출될 리 없기 때문에 대입이 되는 것이다.

댓글