본문 바로가기
C#

C# - Static 함수 & Static class

by Classic Master 2024. 5. 14.
728x90

C#에서 중요한 개념 중 하나인 "Static"에 대해 알아보겠습니다. "Static"은 프로그래밍에서 매우 유용한 개념으로, 변수, 메서드 및 클래스에 적용할 수 있습니다. 여러분이 이 글을 통해 Static의 개념과 사용 방법을 자세히 이해할 수 있기를 바랍니다.

Static이란?


1. 개념

  • Static은 한 번 할당되면 프로그램이 종료될 때까지 유지되는 고정된 상태를 가리킵니다. 즉, Static 멤버는 해당 클래스의 인스턴스에 종속되지 않고 클래스 자체에 속합니다. 이는 해당 멤버를 사용할 때 인스턴스를 생성하지 않아도 되므로 편리합니다.


2. 변수에서의 사용

  • Static 변수는 해당 클래스의 모든 인스턴스 간에 값을 공유합니다. 이는 변수가 클래스의 모든 인스턴스에 동일한 값을 유지하고, 하나의 인스턴스에서 값이 변경되면 다른 모든 인스턴스에서도 변경된 값을 볼 수 있다는 것을 의미합니다.

 

반응형

Static의 장점과 단점

장점

  • 전역 액세스 : Static 멤버는 클래스에 속하기 때문에 해당 클래스의 어디에서든 액세스할 수 있습니다.
  • 메모리 효율 : Static 변수는 한 번 할당되고 프로그램 종료 시까지 유지되므로 메모리 사용량을 최적화할 수 있습니다.
  • 유틸리티 함수 : Static 메서드와 클래스를 사용하여 유틸리티 함수를 구현하고 관리할 수 있습니다.

단점

  • 테스트의 어려움 : Static 멤버는 테스트하기 어려울 수 있습니다. 인스턴스에 종속되지 않기 때문에 모의 객체(mock object)를 사용하기 어렵습니다.
  • 상태 관리의 어려움 : Static 변수는 전역 상태를 나타내므로 다른 코드에 영향을 줄 수 있습니다. 이는 복잡한 코드에서 상태 관리를 어렵게 만들 수 있습니다.

Static Class란?

static class는 C#에서 특별한 종류의 클래스로, 그 안에 있는 모든 멤버(변수, 메서드)가 정적으로 선언됩니다. 이 클래스는 정적 멤버만 포함할 수 있으며, 따라서 인스턴스를 생성할 필요가 없습니다. 이러한 특성으로 인해 static class는 주로 관련된 유틸리티 메서드를 그룹화하거나, 전역 상태를 관리하는 데 사용됩니다.

 

  • 인스턴스 생성 불가 : static class는 정적 멤버만을 포함하고 있으므로, 이 클래스의 인스턴스를 생성할 수 없습니다.
  • 정적 멤버만 포함 : static class 내부의 모든 멤버(변수, 메서드)는 정적으로 선언되어야 합니다. 즉, 모든 멤버는 클래스 자체에 속하며, 인스턴스와 무관하게 사용됩니다.
  • 전역적인 접근 : static class의 멤버는 해당 클래스의 인스턴스를 생성하지 않고도 어디서든 접근할 수 있습니다. 따라서 static class의 멤버는 전역적으로 사용할 수 있습니다.
// 예시: MathUtility 클래스
public static class MathUtility
{
    // 두 수를 더하는 정적 메서드
    public static int Add(int a, int b)
    {
        return a + b;
    }

    // 두 수를 곱하는 정적 메서드
    public static int Multiply(int a, int b)
    {
        return a * b;
    }
}

// Main 메서드
class Program
{
    static void Main(string[] args)
    {
        // static 클래스의 메서드 호출
        int sum = MathUtility.Add(3, 5); // 3 + 5 = 8
        int product = MathUtility.Multiply(3, 5); // 3 * 5 = 15
    }
}

MathUtility라는 static class를 선언하고, 두 개의 정적 메서드(Add, Multiply)를 포함하고 있습니다. 이 클래스를 사용하여 두 수의 합과 곱을 계산하고 있습니다. 이렇게 정적 클래스를 사용하면 관련된 유틸리티 함수를 그룹화하여 사용할 수 있습니다.

 

 


public class MathUtility
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

int result = MathUtility.Add(3, 5); // Static 메서드 호출

메서드에서의 사용

  • Static 메서드는 해당 클래스의 인스턴스를 생성하지 않고도 호출할 수 있습니다. 이는 주로 유틸리티 메서드나 전역 기능을 제공하는 메서드에 유용합니다.
public class Player
{
    public static int playerCount = 0;
    private static int health = 100;

    public static void TakeDamage(int damage)
    {
        health -= damage;
        if (health <= 0)
        {
            Die();
        }
    }

    private static void Die()
    {
        playerCount--;
        Console.WriteLine("Player has died!");
    }
}

Player.playerCount++; // Static 변수 사용
Player.TakeDamage(20); // Static 메서드 호출

위의 코드에서는 Static 변수와 메서드를 사용하여 플레이어의 수를 추적하고 플레이어가 피해를 입었을 때를 처리하는 예시를 보여줍니다.

Static은 프로그래밍에서 매우 강력한 도구이지만 적절하게 사용해야 합니다. 이러한 개념을 계속 연습하고 익숙해지면 프로그래밍 능력이 더욱 향상될 것입니다. 함께 공부하여 프로그래밍 실력을 향상시켜봅시다!

728x90
반응형