🎈 정적 필드 초기화 > 정적 생성자 > 인스턴스 필드 초기화 > 인스턴스 생성자
- 정적 변수의 메모리를 0으로 초기화
- 정적 변수 초기화
- 베이스 클래스의 정적 생성자 호출
- 정적 생성자 호출
- 인스턴스 변수의 메모리를 0으로 초기화
- 인스턴스 변수 초기화
- 베이스 클래스의 인스턴스 생성자 호출
- 인스턴스 생성자 호출
동일한 타입으로 추가 인스턴스가 발생시 5단계부터 수행된다
class StaticVSInstance
{
static void Main(string[] args)
{
int mainOne = Static.one;
Console.WriteLine(mainOne);
}
}
public class Static
{
public static int one = 1;
}
바로 클래스를 호출하여 사용할 수 있음
class StaticVSInstance
{
static void Main(string[] args)
{
Instance instance = new Instance();
int mainTwo = instance.two;
Console.WriteLine(instance.two);
}
}
public class Instance
{
public int two = 2;
}
new 키워드를 통한 개체(Object)를 생성해야 사용할 수 있음
class StaticVSInstance
{
static void Main(string[] args)
{
Static.A();
Instance instance = new Instance();
instance.B();
}
}
public class Static
{
public static void A()
{
Console.WriteLine("[1] 정적 메서드");
}
}
public class Instance
{
public void B()
{
Console.WriteLine("[2] 인스턴스 메서드");
}
}
- 멤버초기화는 호출순서가 우선되니 값을 바로 사용할 수 있지만 예외를 처리하지 못함.
예외 가능성이 있다면 생성자에서 초기화!- Static을 사용하면 하나의 복사본이 생성됨(너무 과다하게 사용하면 [OOP]에 맞지 않음.)
- Instance화 하면 필드가 속한 클래스 변수의 복사본이 생성됨.