할당 구문보다 멤버 초기화 구문이 좋다
간단하게 결론부터 말하겠다.
1. Class 생성자에서 받아오는 매개변수로 값이 바뀌는 멤버 변수는 생성자에서 초기화
2. Class 생성자에서 받아오는 매개변수와 무관하게 값이 같은 멤버변수는 선언과 초기화를 동시에 하면 된다.
enum ESex
{
Male = 0,
Female,
}
Class Student
{
//선언과 동시에 초기화
List<string> _subject = new List<string>(){"Math","Science","Korean"};
//사용자가 설정해야 알 수 있는 값
uint _grade;
ESex _sex;
public Student(uint grade, ESex sex)
{
this._grade = grade;
this._sex = sex;
}
}
위의 예시가 끝이다.
위의 Class에 대해서 사용자가 Student라는 Class를 생성 했을때 Compile에서는
선언과 동시에 초기화한 멤버변수를 생성자 전에 먼저 실행된다.
_subject -> _grade -> _sex 순서대로 초기화가 진행된다는 뜻이다.
그리고 만약 어떤 SuperClass를 상속할 경우에는 SuperClass의 생성자가 호출되기 전에 _subject멤버 변수는 먼저 초기화가 진행된다.
유의할 점이 하나 더 있다.
int, float, double 등 (값 타입, struct 타입)은 0, Class 등 참조 타입은 Null로 저수준에서 직접 CPU 명령을 수행하여 메모리 블록을 0 또는 Null으로 설정하기 때문에 만약 0 또는 Null로 초기화하는 멤버 변수라면 굳이 다시 실행시키는 짓은 피하길 바란다.
int value1 = 0; //CPU에서 0으로 메모리블록을 지정했지만 명령어에서 다시 0으로 지정
int value2; //CPU에서 0으로 메모리블록 지정
'Program > Effective C#' 카테고리의 다른 글
Effective C# ITEM14 (0) | 2020.10.28 |
---|---|
Effective C# ITEM13 (0) | 2020.10.28 |
Effective C# ITEM11 (0) | 2020.10.25 |
Effective C# ITEM10 (0) | 2020.10.21 |
Effective C# ITEM9 (0) | 2020.10.21 |