C#에서 필드는 클래스나 구조체 내부에 선언된 변수를 말한다. 필드는 해당 클래스나 구조체의 인스턴스와 관련된 데이터를 저장한다. 필드에는 여러가지 유형의 데이터 (예시. 정수, 문자열, 개체참조 등)가 저장될 수 있으며, 접근 제한자를 사용하여 접근 수준을 지정할 수 있다.
필드 이니셜라이저를 사용하면 필드를 선언과 동시에 초기화할 수 있다. 이 방법은 생성자를 통한 초기화보다 간결하고, 필드 선언 시에 기본 값을 지정하는데에 유용하다.
public class MyClass{
public MyClass(int param1, string param2){
MyIntField = param1;
MyStringField = param2;
}
public int MyIntField = 0;
// 갑 형식을 선언할 시에는 default값을 명시적으로 설정해주면 좋다.
public string MyStringField = null!;
// 문자열 같은 참조형에는 null!을 넣어주면 좋다.
// 혹은 "" 와 같이 빈 문자열을 넣어줘도 좋다.
}
public class MyClass{
public int MyIntField = 10;
public string MyStringField = "Hello world";
}
근데 위와 같은 경우보다는 이런 형태가 좀 더 낫다고 생각한다.
프로퍼티의 get, set 접근자를 통한 필드 이니셜라이저 사용
public class MyClass{
public int MyIntField{get;set;} = 10;
public string MyStringField{get;set;} = "Hello world";
}
귀찮고 코드가 길어진다고 해도 명시적이고 명확한 코드가 좋은 코드라고 생각한다.
위와 같은 초기화는 각 인스턴스가 생성될 때 자동으로 이루어진다.
필드 이니셜라이저에서는 해당 클래스의 다른 필드나 메서드에 접근할 수 없다. 초기화는 생성자 호출 전에 이루어지기 때문이다
.
필드 이니셜라이저와 생성자에서 동일한 필드를 초기화할 경우 생성자에서의 값이 최종 값이 된다. 왜냐하면 필드 이니셜라이저를 통한 초기화가 가장 먼저 실행이 되고, 그 다음에 생성자가 실행되기 때문이다.