[C#] 5.2 개체의 멤버와 정적 멤버

클래스나 구조체에 캡슐화할 수 있는 멤버들은 어떠한 것들이 있는지 살펴보았는데 중간마다 개체의 멤버와 정적인 멤버라는 얘기가 나왔던 것을 기억하시죠. 이제 이들에 대해 좀 더 자세히 살펴봅시다.

클래스나 구조체를 정의하였다는 것은 형식을 정의한 것을 의미하며 해당 형식에 맞는 실질적인 대상을 개체라고 합니다. 개체의 멤버는 개체의 데이터나 이를 사용하기 위한 메서드 등을 얘기합니다. 이에 반해 정적인 멤버는 개체에 상관없이 해당 형식에 공통으로 사용되는 멤버입니다.

클래스나 구조체에 캡슐화된 멤버들 중에 static 키워드나 const 키워드가 붙어 있는 멤버들은 정적인 멤버이며 이 외에 다른 멤버들은 개체의 멤버입니다. public으로 접근이 지정된 멤버들 중에 정적인 멤버는 클래스의 이름으로 접근하고 개체의 멤버는 변수로 접근합니다. 그리고 정적인 멤버는 개체의 멤버를 사용할 수 없습니다.

▶ 정적 멤버

class Example
{
    static int sm=3; //정적 멤버 필드

    public static int SM //정적 멤버 속성
    {
        get{   return sm;   }
    }

    int im = 2; //개체의 멤버 필드

    public int IM //개체의 멤버 속성
    {
        get{    return im;    }
    }
}


class Program
{
    static void Main(string[] args)
    {
        int sm = Example.SM; //클래스 이름으로 정적 멤버에 접근
        Console.WriteLine("Example.SM:{0}", sm); 

        Example ex = new Example();
        int im = ex.IM;  //변수로 개체의 멤버 접근
        Console.WriteLine("ex.IM:{0}", ex.IM);
    }
}

▶ 실행 결과

Example.SM:3
ex.IM:2

클래스는 class 키워드 앞에 static 키워드를 명시하면 정적 멤버만 캡슐화 가능한 정적 클래스가 만들어집니다. 프로그램 전체에서 사용하는 상수와 자주 사용되는 기능을 정적 클래스에 캡슐화하여 사용할 수 있을 것입니다. 이 외에도 네이티브 코드로 작성된 라이브러리를 마이그레이션할 때도 자주 사용됩니다.

▶ 정적 클래스

static class EHGlobal
{
    public const int max_man = 100;
    public static int GetNum()
    {
        int num = 0;
        try
        {
            num = int.Parse(Console.ReadLine());
        }
        catch{    }
        return num;
    }
}