Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#의 정적(Static) 메서드와 비정적 메서드 차이점 완벽 정리

C#에서 멤버 함수를 static 키워드로 선언하면 그 함수는 정적(static) 메서드가 됩니다. 정적 메서드는 오직 정적 변수에만 접근할 수 있으며, 클래스의 객체가 생성되기 전에도 이미 존재합니다. 즉, 객체를 만들지 않고도 클래스 이름을 통해 바로 호출할 수 있다는 것이 가장 큰 특징입니다.

정적 클래스란?

정적 클래스는 인스턴스화(instantiation)할 수 없으며, 오직 정적 멤버만 포함할 수 있습니다. 따라서 유틸리티 성격의 기능이나 공용 데이터를 다룰 때 유용하게 활용됩니다.

정적 메서드 선언 방법

정적 메서드는 static 키워드를 사용하여 다음과 같이 선언합니다.

public static int getNum() {
    return num;
}

정적 메서드와 비정적 메서드 예제

다음 예제는 C#에서 정적 메서드와 비정적(non-static) 메서드를 함께 사용하는 방법을 보여줍니다.

using System;

namespace StaticVarApplication {
    class StaticVar {
        public static int num;

        public void count() {
            num++;
        }

        public static int getNum() {
            return num;
        }
    }

    class StaticTester {
        static void Main(string[] args) {
            StaticVar s = new StaticVar();

            s.count();
            s.count();
            s.count();
            s.count();
            s.count();
            s.count();

            Console.WriteLine("Variable num: {0}", StaticVar.getNum());
            Console.ReadKey();
        }
    }
}

코드 설명

  • num 변수: public static int num;으로 선언된 정적 변수로, 모든 객체가 하나의 값을 공유합니다.
  • count() 메서드: 비정적 인스턴스 메서드로, 객체를 생성한 후에만 호출할 수 있으며 호출될 때마다 num 값을 1씩 증가시킵니다.
  • getNum() 메서드: 정적 메서드이므로 객체 생성 없이 StaticVar.getNum() 형태로 클래스 이름을 통해 직접 호출할 수 있습니다.
  • Main() 메서드: 프로그램 진입점으로, 본질적으로 정적 메서드입니다.

실행 결과

Variable num: 6

count() 메서드가 여섯 번 호출되었기 때문에 정적 변수 num의 최종 값은 6이 출력됩니다.

정적 메서드와 비정적 메서드의 핵심 차이

구분정적 메서드 (Static)비정적 메서드 (Non-Static)
호출 방식클래스 이름으로 직접 호출객체를 생성한 후 호출
접근 가능 범위정적 변수 및 정적 멤버만 접근 가능정적·비정적 멤버 모두 접근 가능
메모리 할당프로그램 시작 시 로드됨객체 생성 시 할당됨
this 키워드 사용사용 불가사용 가능

정적 메서드는 객체 상태와 무관한 공통 기능을 구현할 때, 비정적 메서드는 각 객체 고유의 상태를 다루는 동작을 구현할 때 적합합니다. 두 메서드의 특성을 잘 이해하고 상황에 맞게 활용하면 더욱 효율적인 C# 코드를 작성할 수 있습니다.