티스토리 뷰

오늘은 초기화리스트(Initialize List)에 대해서 알아보겠다.


일단 초기화 리스트 란 


클래스의 각 멤버를 생성자에서 초기화 할 때 생성자 뒤에 콜론연산자(:)를 사용해서 객체의 멤버를 초기화 할 수 있다. 이를 초기화 리스트, 또는 콜론 초기화라고 한다.


글로써 이해가 안간다면 그림으로 이해해보자. 



다음과 같은 부분에서  : i( j )부분이 바로 초기화 리스트이다. (나도 이번 포스팅자료를 찾으면서 이 방법이 초기화 리스트라고 부른다는것을 알았다;;)


그렇다면 이 초기화 리스트를 왜 써야 하는걸까?


일반적으로 임의의 클래스가 멤버로 다른 객체를 가진다면 초기화 리스트를 사용하지 않은 것보다는 초기화 리스트를 사용한 초기화 방법이 좋다고 한다. 
 

그 이유는 함수 호출의 횟수의 차이가 있다.
 


초기화리스트를 사용하지 않는 쪽은 멤버변수의 메모리 공간이 먼저 만들어 지고 만들어진 메모리에 대입되는 것이지만,

초기화리스트를 사용하는 쪽은 멤버변수의 메모리가 만들어 지면서 초기화되는 것이다.

즉 초기화 리스트를 사용하지 않는쪽은 함수 호출이 2번!

초기화 리스트를 사용하는쪽은 1번 호출하게 된다. 


그렇다면 진짜 그런지 눈으로 확인해 보자!


Case 1. 초기화 리스트를 사용하지 않을때!


우선 다음과 같은 클래스1 이 있고


이 클래스1 을 멤버변수로 갖고있는 클래스2가 있다.

이런 상황에서 초기화 리스트를 사용하지 않고 클래스2를 생성한뒤

클래스2가 갖고 있는 클래스1의 값을 출력해보자. 



결과는 다음과 같이 클래스2의 생성자에서 자신의 멤버변수인 클래스1  생성자의 호출 대입연사자를 호출하게 된다. 

그렇다면 클래스1  의 초기화까지 호출되는 함수의 수는 2번이다. 



Case 2. 초기화 리스트를 사용할때 않을때!


Case1과 의 차이점은 클래스2 만 바뀐다.

다음과 같이 초기화리스트를 사용한다.!!


그렇다면 그 결과는?



다음과 같이 대입연산자 부분이 빠진다!

결과는 다음과 같이 클래스2의 생성자에서 자신의 멤버변수인 클래스1  생성자의 호출과 함께 대입연사자를 호출하게 된다. 

그렇다면 클래스1  의 초기화까지 호출되는 함수의 수는 1번이다. 



솔직히 아직은 정말 초기화 리스트를 사용하는게 더 좋은건지는 모르겠다;; 

어떤게 더 좋은건지 고민해 봐야겠지만 일단 이런 차이가 있다는것만 알아도 충분할꺼 같다.

누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~

댓글