[C#]정적(Static)vs인스턴스(Non-Static, Instance)

Jag·2023년 4월 22일
0

C#

목록 보기
5/5
post-thumbnail

📌 정적(Static) vs 인스턴스(Non-Static,Instance)

✍🏻 인스턴스 초기화 순서

🎈 정적 필드 초기화 > 정적 생성자 > 인스턴스 필드 초기화 > 인스턴스 생성자

  1. 정적 변수의 메모리를 0으로 초기화
  2. 정적 변수 초기화
  3. 베이스 클래스의 정적 생성자 호출
  4. 정적 생성자 호출
  5. 인스턴스 변수의 메모리를 0으로 초기화
  6. 인스턴스 변수 초기화
  7. 베이스 클래스의 인스턴스 생성자 호출
  8. 인스턴스 생성자 호출

동일한 타입으로 추가 인스턴스가 발생시 5단계부터 수행된다


✍🏻 정적변수 vs 인스턴스 변수

🔧 정적변수 예제

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)를 생성해야 사용할 수 있음


✍🏻 정적메소드 vs 인스턴스 메소드

🔧 예제

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화 하면 필드가 속한 클래스 변수의 복사본이 생성됨.
profile
C# Unity Engineer

0개의 댓글