ITEM 12 :: EFFECTIVE C#
안녕하세요, 12번째 시간입니다. 하루에 2개라니!
이번 챕터는 할당 구문보다 멤버 초기화 구문이 좋다, 입니다. 이번의 챕터도 C#에서의 특수한 기능이나 다름없는 것인데요, 바로 클래스에서 멤버를 선언할 때 초기화를 해주는 방식입니다. 그렇게 되면 생성자에 자동으로 포함이 된다고 하는데, 생각보다 짧고 굵은 내용입니다. 자, 설명 들어갈게요~
설명
-
멤버 초기화 구문의 경우 사용이 굉장히 간단하다. 단순하게 클래스 내부에서 멤버를 선언할 때 초기화를 하면 된다.
-
1번의 과정을 하게 되면 이는 생성자 호출 전에 자연스럽게 호출되어, 초기화가 된다.
-
이게 다인 내용이다. 굉장히 짧지 않은가?
-
장점은 새로운 생성자를 몇개를 추가하더라도 그 이전에 호출되므로 별도로 초기화할 필요가 없다는 것이다.
-
정확하게는 베이스 클래스 생성자가 호출되기 전에 멤버에 대한 초기화가 이루어진다.
-
따라서, 할당 구문을 일일이 사용하는 것보다 한번 멤버 초기화 구문을 사용하는 것이 좋다는 것인데, 아래에 추가적인 내용이 있다. 아주 중요하다.
하지만 사용해선 안될 때가 있다.
-
객체를 0이나 null로 초기화하는 경우 -> 기본 시스템 초기화 루틴은 코드를 실행하기 전에 모든 값을 0으로 설정하는 것인데, 객체를 0이나 null로 초기화 하게되면, C# 컴파일러는 개의치 않고 코드를 생성하기 때문에 한번 더 0으로 초기화 하는, 중복 초기화가 발생한다.
-
동일한 객체를 반복해서 초기화하는 경우 -> 멤버 초기화 구문은 생성자의 본문보다 앞서 수행되므로, 한번 생성이 되고 나서, 생성자에서 또 초기화하는 경우에는 뒤늦게 생성한 생성자 본문에서 생성한 객체만이 살아남는다. 따라서, 불필요하다.
-
예외처리가 반드시 필요한 경우 -> 멤버 초기화 구문은 try로 감쌀 수 없기 때문에 초기화 과정에서 예외가 발생하면 예외가 외부로 전파된다. 따라서 클래스 내부에서 복구를 시도할 수가 없다. 예외처리가 필요하다면 반드시 생성자 내부에서 처리해야만 한다.
그래서?
결국, 위의 3가지를 제외하고는 멤버 초기화 구문을 사용하면된다는 소리이다. 할당 구문보다 효율성은 따질필요 없이 좋고, 사용하라고 만들어둔 기능을 안 사용하는 것도 아쉽다. 그러니, 위의 3가지 경우를 제외하고는 멤버 초기화 구문을 사용하길, 책은 권하고 있다!