초기화 리스트
초기화 리스트는 클래스 내의 멤버 변수 초기화에 쓰인다.
이미 알고 있는 얘기이지만 변수를 초기화해서 사용하지 않으면 당장이든 나중이든 스택 메모리에
남아있던 값 때문에 원하지 않는 로직이 실행되어 문제가 될 수 있다. 그래서 변수 선언 시
초기화를 해주는 것이 중요하다.
초기화 방법에는 생성자 내에서 초기화하는 방법, 초기화 리스트를 사용하는 방법
멤버 변수 선언과 동시에 초기화하는 방법이 있다. 이번에는 초기화 리스트에 대해 알아보자.
초기화 리스트는 클래스 내부의 선처리 영역에서 사용자의 명시적인 지시를 이용하는 것을 말한다.
초기화 리스트는 상속 관계에서 원하는 부모 생성자를 호출할 때 필요하다.
생성자 내에서 초기화하는 방법이랑 초기화 리스트를 사용하는 방법은 일반 변수에서는 차이가 없지만
멤버 타입이 클래스인 경우 차이가 난다.
예를 들어 멤버 타입이 a 클래스인 멤버 변수를 선언하고 생성자 내에서 해당 멤버 변수를 초기화를 한다고 했을 때
실행해보면 실질적으로 a 클래스의 기본 생성자와 초기화 값을 전달받는 생성자가 실행되는 걸 확인할 수 있다.
즉 원치 않게 생성자가 두 번 실행된다.
그 이유는 멤버 타입이 a 클래스인 멤버 변수를 b 클래스 내부에서 선언하면 기본적으로 b 클래스 선처리 영역에서
a 클래스의 기본 생성자가 실행된다. 그래서 b 클래스 생성자 내에서 초기화를 진행하면 결과적으로 a 클래스 생성자를
두 번 실행하는 것이 된다.
이러한 현상을 겪지 않기 위해서는 초기화 리스트를 사용해주면 된다.
b 클래스 생성자 내부에서 초기화를 해주는 것이 아닌 기본 생성자 옆에 ' : '을 이용해서 아래와 같이 명시적으로 초기화해주는 것이 좋다
ex
class b
{
public:
b : _hp(100), _xxx(1)
{
}
public:
int _hp;
a _xxx; // a라는 클래스가 따로 있다고 가정 (b 클래스가 a 클래스를 포함하고 있는 관계)
}
초기화 리스트는 참조 타입과 const 타입을 초기화 해줄 때도 유용하게 사용된다.
참조 타입과 const 타입은 선언과 동시에 초기화를 해줄 필요성이 있는 형태이기 때문에 뒤늦게 생성자 내부에서
초기화를 진행하려고 해도 에러를 뱉는다. 그렇기 때문이 초기화 리스트를 이용해서 만들어짐과 동시에
초기화를 해주는 것이 좋다.
'프로그래밍 언어 공부 > C++' 카테고리의 다른 글
동적 할당 (0) | 2022.06.21 |
---|---|
연산자 오버로딩 (0) | 2022.06.18 |
객체지향의 개념 정리 (0) | 2022.06.16 |
알고리즘 연습문제 (0) | 2022.06.11 |
자주 쓰이는 함수 (0) | 2022.06.08 |