CS/C#

[C#] 정적 필드와 메서드(static)

Mirab 2021. 12. 12. 00:03

C#에 오면서 헷갈리는 부분이 바로 정적 필드와 메서드 부분이었습니다.

아마도 이쪽 부분에 대해서 개념이 흔들려서 그런 것 같기도 했으나 오늘 공부로 한 층 더 업그레이드해보겠습니다.

# static

메서드나 필드가 클래스의 인스턴스가 아닌 클래스 자체에 소속되도록 지정하는 한정자라고 합니다.

 

하나의 프로그램에는 인스턴스는 여러 개가 존재할 수 있으나, 붕어빵을 만드는 틀(클래스)은 단 하나만 존재합니다.

어떤 필드가 클래스에 소속된다는 것은 그 필드가 프로그램 전체에서 유일하게 존재한다는 것을 의미합니다.

 

유심히 살펴보면 Main 함수도 static으로 선언되어 있습니다.

 

말이 어렵죠.

일반적으로 만드는 인스턴스와 static을 비교해보겠습니다.

# 정적 필드

using System;

class Instance
{
    public int a;
}

class Static
{
    public static int a;
}

class Program
{
    static void Main()
    {
        // 일반적으로는 객체를 찍어낸다음 사용합니다.
        Instance obj = new Instance();
        obj.a = 1;

        // 인스턴스를 만들지 않고 클래스의 이름을 통해 필드에 직접 접근합니다.
        Static.a = 1;
    }
}

저도 처음에 이 개념이 와닿지가 않았습니다. 작성하는 지금도 그렇고요...

 

정적 필드를 만들어서 얻는 이득은 무엇일까요?

프로그램 전체에 걸쳐 공유해야 하는 변수가 있다면 정적 필드를 이용하면 된다고 합니다.

예를 들어 우리가 지금까지 붕어빵을 몇 개나 찍어서 판매했는지 수량을 체크하고자 할 때, 수량을 static으로 선언해서 관리한다면 편하겠죠?

# 정적 메서드

정적 메서드 역시 클래스의 인스턴스를 생성하지 않고도 호출이 가능한 메서드입니다.

 

객체의 내부 데이터를 이용해서 사용하는 경우는 인스턴스 메서드를 사용하고, 내부 데이터를 이용할 일이 없는 경우에는 별도의 인스턴스 생성 없이 호출할 수 있도록 메서드를 정적으로 선언합니다.

 

오늘은 정적 필드와 메서드에 대해서 알아봤습니다.

어떻게 사용하냐에 따라 갈리겠지만..

게임 개발에서는 생각나는 방법이 자주 사용되는 메서드의 경우나 유틸리티 함수 혹은 싱글턴 패턴을 이용할 때 사용하는 것 같습니다.

 

'CS > C#' 카테고리의 다른 글

[C#] property, 프로퍼티  (0) 2021.12.21
[C#] 인터페이스와 추상 클래스  (0) 2021.12.20
[C#] 생성자와 소멸자  (0) 2021.12.11
[C#] 클래스  (0) 2021.12.11
[C#] 문자열 찾기 함수들  (0) 2021.12.10