0Pricing
C# Academy · 강의

정적 메서드와 필드

형식 자체에 속하는 멤버를 정의합니다.

정적 메서드와 필드은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

정적 멤버와 인스턴스 멤버

인스턴스 멤버는 각 객체에 속하고, 정적 멤버는 클래스 자체에 속합니다. 정적 멤버는 정확히 하나만 존재하며 모든 객체가 공유합니다.

using System;

class Counter
{
    public static int Total;   // shared
    public int Id;             // per instance
}

class Program
{
    static void Main()
    {
        Counter.Total = 5;
        Console.WriteLine("Shared Total: " + Counter.Total);
    }
}

정적 필드 선언하기

static 필드는 인스턴스가 아니라 클래스 이름을 통해 접근합니다: ClassName.Field.

using System;

class Bank
{
    public static decimal InterestRate = 0.05m;
}

class Program
{
    static void Main()
    {
        Console.WriteLine("Rate: " + Bank.InterestRate);
    }
}

정적 메서드

static 메서드는 인스턴스 없이 실행됩니다. 클래스에서 호출하며, this가 없으므로 인스턴스 필드를 사용할 수 없습니다.

using System;

class MathUtil
{
    public static int Square(int x)
    {
        return x * x;
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine(MathUtil.Square(7));
    }
}

인스턴스 간 공유 상태

정적 필드는 하나만 존재하므로 모든 인스턴스가 같은 값을 확인합니다. 이는 카운터와 공유 구성에 유용합니다.

using System;

class Robot
{
    public static int Count;

    public Robot()
    {
        Count++;
    }
}

class Program
{
    static void Main()
    {
        new Robot();
        new Robot();
        new Robot();
        Console.WriteLine("Robots created: " + Robot.Count);
    }
}

정적 메서드는 인스턴스 데이터를 사용할 수 없습니다

정적 메서드에는 this가 없으므로 매개변수, 지역 변수 및 다른 정적 멤버만 사용할 수 있습니다.

using System;

class Calculator
{
    public static int Add(int a, int b) => a + b;
    public static int Multiply(int a, int b) => a * b;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Calculator.Add(2, 3));
        Console.WriteLine(Calculator.Multiply(4, 5));
    }
}

정적 멤버와 인스턴스 멤버 함께 사용하기

한 클래스에 두 종류의 멤버를 모두 포함할 수 있습니다. 인스턴스 메서드는 정적 멤버를 읽을 수 있지만, 정적 메서드는 인스턴스 멤버를 읽을 수 없습니다.

using System;

class Account
{
    public static decimal Fee = 2m;
    public decimal Balance;

    public decimal NetBalance()
    {
        return Balance - Fee;   // instance method can read static
    }
}

class Program
{
    static void Main()
    {
        var a = new Account { Balance = 100m };
        Console.WriteLine("Net: " + a.NetBalance());
    }
}

정적 카운터 패턴

정적 카운터에서 새 객체마다 식별자를 할당하는 것은 정적 필드의 대표적인 사용 사례입니다.

using System;

class Ticket
{
    private static int _next = 1;
    public int Number;

    public Ticket()
    {
        Number = _next++;
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine(new Ticket().Number);
        Console.WriteLine(new Ticket().Number);
        Console.WriteLine(new Ticket().Number);
    }
}

정적 도우미 메서드

정적 메서드는 형식 지정기나 변환기처럼 입력에만 의존하는 상태 없는 작업에 적합합니다.

using System;

class Format
{
    public static string Money(decimal amount)
    {
        return "$" + amount.ToString("0.00");
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Format.Money(12.5m));
    }
}

정적 메서드에서 정적 메서드 호출하기

정적 메서드는 인스턴스 없이 같은 클래스의 다른 정적 메서드를 자유롭게 호출할 수 있습니다.

using System;

class Geometry
{
    public static double CircleArea(double r) => Math.PI * Square(r);
    private static double Square(double x) => x * x;
}

class Program
{
    static void Main()
    {
        Console.WriteLine(Geometry.CircleArea(2).ToString("0.00"));
    }
}

정적 필드는 유지됩니다

정적 필드는 객체 하나에만 해당하는 것이 아니라 프로그램의 수명 동안 값을 유지합니다. 캐시나 누적 합계에 사용하세요.

using System;

class Logger
{
    public static int MessageCount;

    public static void Log(string msg)
    {
        MessageCount++;
        Console.WriteLine("[" + MessageCount + "] " + msg);
    }
}

class Program
{
    static void Main()
    {
        Logger.Log("start");
        Logger.Log("working");
        Logger.Log("done");
    }
}

한데 모아 보기

정적 멤버는 공유 요율, 카운터, 상태 없는 도우미처럼 클래스 전체에 적용되는 개념을 표현하고, 인스턴스 멤버는 객체별 데이터를 저장합니다.

using System;

class Order
{
    public static decimal TaxRate = 0.10m;
    public decimal Subtotal;

    public decimal Total() => Subtotal + Subtotal * TaxRate;
}

class Program
{
    static void Main()
    {
        var o = new Order { Subtotal = 200m };
        Console.WriteLine("Total: " + o.Total());
    }
}

빠른 확인

정적 멤버에 대한 이해도를 확인해 보세요.

복습

정적 멤버는 클래스에 속하며 하나의 공유 복사본만 가지고, 인스턴스 멤버는 각 객체에 속합니다. 정적 메서드에는 this가 없으므로 인스턴스 데이터에 접근할 수 없지만, 인스턴스 코드는 정적 멤버를 읽을 수 있습니다. 카운터, 공유 구성 및 상태 없는 도우미에는 정적 멤버를 사용하세요.

using System;

class Demo
{
    public static int Shared;
    public int Own;
    public static void Bump() => Shared++;
}

class Program
{
    static void Main()
    {
        Demo.Bump();
        Demo.Bump();
        Console.WriteLine(Demo.Shared);
    }
}

자주 묻는 질문

“정적 메서드와 필드” 강의는 무료인가요?

네 — “정적 메서드와 필드” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“정적 메서드와 필드”에서 뭘 배우나요?

형식 자체에 속하는 멤버를 정의합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

C# Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“정적 메서드와 필드” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 정적 메서드와 필드
  2. 유틸리티용 정적 클래스
  3. 상수 및 readonly 필드
  4. 정적 설계와 인스턴스 설계
← C# Academy(으)로 돌아가기