IMCAT.DEV
로그인 가입
C# 입문 객체지향

C# 정적 클래스와 멤버

C# 정적 클래스와 멤버 — 초급

정적 클래스와 멤버

1. 도입 (왜 배워야 하는가)

정적 클래스와 멤버는 C# 프로그래밍에서 매우 중요한 개념입니다. 이들은 특정 데이터나 메서드를 프로그램의 여러 인스턴스에서 공유할 수 있게 해줍니다. 예를 들어, 애플리케이션의 설정 정보를 관리하거나 유틸리티 메서드를 제공하는 경우에 유용합니다. 이러한 개념을 이해하지 못하면 코드의 중복이 발생하고, 유지보수가 어려워질 수 있습니다. 또한, 정적 멤버를 잘못 사용하면 메모리 관리 측면에서도 비효율적일 수 있습니다.

2. 핵심 개념 설명

  • 정적 클래스 (Static Class): 인스턴스를 생성할 수 없는 클래스입니다. 모든 멤버가 정적이며, 클래스 이름으로 직접 접근할 수 있습니다.
  • 정적 멤버 (Static Member): 클래스의 인스턴스에 속하지 않고, 클래스 자체에 속하는 변수나 메서드입니다. 정적 멤버는 클래스 이름으로 접근합니다.
  • 실생활 비유

    정적 클래스는 "도서관"과 같습니다. 도서관은 책을 소유하고 있지만, 개별 이용자가 책을 소유하지는 않습니다. 책을 읽고 싶다면 도서관에 가서 이용하면 됩니다. 마찬가지로, 정적 클래스는 인스턴스를 만들 필요 없이 클래스 이름으로 직접 접근하여 사용할 수 있습니다.

    관련 용어 정리

    용어설명
    정적 클래스인스턴스를 만들 수 없는 클래스
    정적 멤버클래스에 속하는 메서드 또는 변수
    인스턴스클래스의 구체적인 객체

    3. 기본 코드 예제

    아래는 정적 클래스와 멤버의 기본 사용법을 보여주는 코드입니다.

    using System;
    
    public static class MathUtilities
    {
        public static int Add(int a, int b)
        {
            return a + b;
        }
    }
    
    class Program
    {
        static void Main()
        {
            int sum = MathUtilities.Add(5, 10);  // 정적 메서드 호출
            Console.WriteLine("Sum: " + sum);     // 결과 출력
        }
    }

    실행 결과

    Sum: 15

    코드 한 줄씩 동작 설명

    1. using System;: System 네임스페이스를 사용합니다. 이 안에는 Console 클래스가 포함되어 있습니다.
    2. public static class MathUtilities: 정적 클래스를 정의합니다. 인스턴스를 만들 수 없습니다.
    3. public static int Add(int a, int b): 정적 메서드를 정의합니다. 두 개의 정수를 더하여 결과를 반환합니다.
    4. class Program: 메인 프로그램 클래스를 정의합니다.
    5. static void Main(): 프로그램의 진입점인 메인 메서드입니다.
    6. int sum = MathUtilities.Add(5, 10);: 정적 메서드를 호출하여 두 수를 더하고 결과를 sum 변수에 저장합니다.
    7. Console.WriteLine("Sum: " + sum);: 결과를 콘솔에 출력합니다.
    8. 4. 실전 활용 예제

      예제 1: 설정 관리

      쇼핑몰에서 애플리케이션의 설정 정보를 관리하는 정적 클래스를 생성할 수 있습니다.

      public static class AppSettings
      {
          public static string ConnectionString { get; set; } = "Database=MyApp;User Id=admin;";
      }

      이렇게 정의된 설정은 애플리케이션 전반에서 공유되며, 여러 인스턴스가 동일한 설정을 사용할 수 있습니다.

      예제 2: 유틸리티 메서드

      로그인을 관리하는 유틸리티 클래스를 정적 클래스 형태로 구현할 수 있습니다.

      public static class AuthUtility
      {
          public static bool ValidateUser(string username, string password)
          {
              // 사용자 검증 로직 (예시)
              return username  "admin" && password  "1234";
          }
      }

      이렇게 하면, 로그인 검증 로직을 여러 곳에서 재사용할 수 있습니다.

      5. 흔한 실수와 주의사항

      실수 1: 정적 클래스에 인스턴스 생성 시도

      MathUtilities util = new MathUtilities(); // 오류 발생

      올바른 코드: 정적 클래스는 인스턴스를 만들 수 없습니다. MathUtilities.Add(5, 10);와 같이 사용해야 합니다.

      실수 2: 정적 멤버 접근 시 인스턴스 사용

      MathUtilities util = new MathUtilities();
      int result = util.Add(5, 10); // 오류 발생

      올바른 코드: MathUtilities.Add(5, 10);와 같이 클래스 이름으로 접근해야 합니다.

      6. 정리

    9. 정적 클래스는 인스턴스를 만들 수 없으며, 모든 멤버가 정적입니다.
    10. 정적 멤버는 클래스 이름으로 직접 접근하여 사용할 수 있습니다.
    11. 설정 관리와 유틸리티 메서드 구현 시 유용합니다.
    12. 인스턴스를 만들려고 하거나, 인스턴스를 통해 정적 멤버에 접근하는 실수를 주의해야 합니다.

다음에 학습하면 좋은 주제는 추상 클래스와 인터페이스입니다. 이들은 코드의 재사용성과 유연성을 높이는 데 큰 도움이 됩니다.