[C# 객체지향] 정적(Static) 필드, 메서드, 생성자

eunjin lee·2022년 6월 6일
0

C# 9.0 프로그래밍

목록 보기
1/50

인스턴스의 타입 전체에 걸쳐 적용되는 필드, 메서드, 생성자를 알아보자.



  1. 정적 필드
    - [클래스이름].[정적필드]로 접근

  2. 정적 메서드
    - [클래스이름].[정적메서드]로 접근
    - 정적 메서드 안에서는 인스턴스 멤버에 접근할 수 없다. 아직 new 연산자로 인스턴스가 생성되지 않았으므로, 인스턴스 내용을 알 수 없기 떄문이다.

	Main 메서드 또한 정적 메서드로, 가장 최초에 실행되는 메서드이다.
	- 반환값은 void 또는 int만 허용
	- 매개변수는 없거나 string 배열만 허용
  1. 정적 생성자
    - 단 한 번, 정적멤버를 초기화할 때(new 연산자로 인스턴스를 만들 때, 정적 필드나 메서드를 최초로 호출할 때) 실행된다.
    - 정적 생성자 안에서는 인스턴스 멤버에 접근할 수 없다.
    - 별도로 작성하지 않아도, 내부적으로 정적 생성자를 자동으로 컴파일한다.



✍ 샘플 코드

namespace ConsoleApp2206
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Test Start");
            Person p1 = new Person("Amy");
            Person p2 = new Person("David");
        }
    }

    class Person
    {
        public static string nationality;
        public string name;

        public Person(string name)
        {
            Console.WriteLine("인스턴스 생성자 호출");
            this.name = name;
        }

        static Person()
        {
            Console.WriteLine("정적 생성자 호출");
            nationality = "Korea";
        }
    }
}

✅ 결과

Test Start
정적 생성자 호출
인스턴스 생성자 호출
인스턴스 생성자 호출
  • new 연산자로 인스턴스 할당을 할 경우, 정적 생성자가 먼저 호출된 후 인스턴스 생성자가 호출됨.
  • new 연산자로 여러 번 인스턴스를 할당할 경우, 인스턴스 생성자는 여러 번 호출되지만 정적 생성자는 최초에 한 번에 한해서만 호출됨.




✍ 샘플 코드

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Test Start");
            Console.WriteLine(Person.nationality);
        }
    }

✅ 결과

Test Start
정적 생성자 호출
Korea
  • new 연산자로 인스턴스 할당 없이 정적 필드를 바로 호출하면 정적 생성자만 호출됨.
  • 정적 생성자에서 초기화된 정적 필드가 출력됨.




✍ 샘플 코드

    class Person
    {
        public static string nationality = "India";
        public string name;

        public Person(string name)
        {
            Console.WriteLine("인스턴스 생성자 호출");
            this.name = name;
        }

        static Person()
        {
            Console.WriteLine(nationality);
            Console.WriteLine("정적 생성자 호출");
            nationality = "Korea";
        }
    }

✅ 결과

Test Start
India
정적 생성자 호출
Korea
  • 정적 필드에 초기화(India)가 이루어지고, 정적 생성자에서도 정적 필드의 초기화(Korea)를 한다면, 생성자 내의 초기화로 덮어써진다.

0개의 댓글