정적 생성자
정적 상태를 정확히 한 번 초기화합니다.
정적 생성자은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
정적 생성자란
정적 생성자는 클래스의 정적 데이터를 초기화합니다. 클래스가 처음 사용되기 전에 자동으로 한 번 실행되며 직접 호출할 수는 없습니다.
using System;
class App
{
public static string Version;
static App()
{
Version = "1.0.0";
Console.WriteLine("Static constructor ran");
}
}
class Program
{
static void Main()
{
Console.WriteLine(App.Version);
}
}문법 규칙
정적 생성자는 static 키워드를 사용하고 클래스 이름을 가지며 매개변수를 받지 않고 접근 제한자도 사용하지 않습니다.
using System;
class Config
{
public static int MaxUsers;
static Config()
{
MaxUsers = 100;
}
}
class Program
{
static void Main()
{
Console.WriteLine("Max: " + Config.MaxUsers);
}
}정확히 한 번 실행됩니다
클래스를 몇 번 사용하더라도 정적 생성자는 필요한 순간에 처음 한 번만 실행됩니다.
using System;
class Counter
{
public static int Instances;
static Counter()
{
Console.WriteLine("Initializing static state");
Instances = 0;
}
public Counter() { Instances++; }
}
class Program
{
static void Main()
{
new Counter();
new Counter();
Console.WriteLine("Instances: " + Counter.Instances);
}
}언제 실행될까요
런타임은 정적 멤버에 처음 접근하기 직전 OR 첫 인스턴스를 생성하기 직전 중 더 먼저 발생하는 시점에 정적 생성자를 호출합니다.
using System;
class Lazy
{
public static string Data;
static Lazy()
{
Console.WriteLine("Triggered now");
Data = "ready";
}
}
class Program
{
static void Main()
{
Console.WriteLine("Before access");
Console.WriteLine(Lazy.Data);
}
}복잡한 정적 데이터 초기화하기
정적 필드를 설정할 때 단순한 리터럴만으로 충분하지 않고 실제 로직이 필요하다면 정적 생성자를 사용하세요.
using System;
using System.Collections.Generic;
class Lookup
{
public static Dictionary<int, string> Table;
static Lookup()
{
Table = new Dictionary<int, string>();
for (int i = 1; i <= 3; i++)
Table[i] = "Item" + i;
}
}
class Program
{
static void Main()
{
Console.WriteLine(Lookup.Table[2]);
}
}정적 생성자와 필드 초기화 구문 비교
간단한 값에는 인라인 초기화 구문을 사용할 수 있습니다. 문장, 반복문 또는 오류 처리가 필요한 설정에는 정적 생성자를 사용합니다.
using System;
class Settings
{
public static int Simple = 10; // inline initializer
public static int Computed; // needs logic
static Settings()
{
Computed = Simple * Simple;
}
}
class Program
{
static void Main()
{
Console.WriteLine(Settings.Simple + ", " + Settings.Computed);
}
}매개변수는 허용되지 않습니다
런타임이 대신 호출하므로 정적 생성자는 인수를 받을 수 없습니다. 모든 입력은 다른 정적 데이터나 상수여야 합니다.
using System;
class Clock
{
public static int StartHour;
static Clock()
{
StartHour = 9;
}
}
class Program
{
static void Main()
{
Console.WriteLine("Start: " + Clock.StartHour);
}
}정적 생성자와 인스턴스 생성자 함께 사용하기
한 클래스에 두 종류의 생성자를 모두 정의할 수 있습니다. 정적 생성자는 형식에 대해 한 번 실행되고, 인스턴스 생성자는 각 객체마다 실행됩니다.
using System;
class Game
{
public static string Title;
public int Score;
static Game()
{
Title = "Coddy Quest";
}
public Game(int score)
{
Score = score;
}
}
class Program
{
static void Main()
{
var g = new Game(50);
Console.WriteLine(Game.Title + " score " + g.Score);
}
}실행 순서 보장
정적 생성자를 실행하게 만든 인스턴스 생성자의 본문이 실행되기 전에 정적 생성자가 완료된다는 것이 보장되므로 정적 상태는 항상 준비되어 있습니다.
using System;
class Service
{
public static string Endpoint;
static Service()
{
Endpoint = "https://api.example.com";
}
public Service()
{
Console.WriteLine("Using " + Endpoint);
}
}
class Program
{
static void Main()
{
new Service();
}
}신중하게 사용하기
정적 생성자는 클래스를 사용하기 전에 한 번 확인하는 과정을 추가하며, 과도하게 사용하거나 예외를 발생시키면 성능을 떨어뜨릴 수 있습니다. 작고 안정적으로 유지하세요.
using System;
class Cache
{
public static int[] Data;
static Cache()
{
Data = new int[] { 2, 4, 6, 8 };
}
}
class Program
{
static void Main()
{
Console.WriteLine(Cache.Data[3]);
}
}한데 모아 보기
정적 생성자는 조회 표나 상수에서 불러온 구성처럼 공유되는 읽기 전용 데이터를 한 번만 설정할 때 적합합니다.
using System;
using System.Collections.Generic;
class Currency
{
public static Dictionary<string, string> Symbols;
static Currency()
{
Symbols = new Dictionary<string, string>
{
["USD"] = "$",
["EUR"] = "E",
["JPY"] = "Y"
};
}
}
class Program
{
static void Main()
{
Console.WriteLine("USD symbol: " + Currency.Symbols["USD"]);
}
}빠른 확인
정적 생성자에 대한 이해도를 확인해 보세요.
복습
정적 생성자는 매개변수와 접근 제한자 없이 static ClassName()을 사용합니다. 실제 로직이 필요한 정적 상태를 초기화하기 위해 클래스가 처음 사용되기 전에 자동으로 한 번 실행됩니다. 공유 데이터를 한 번만 설정해야 할 때 신중하게 사용하세요.
using System;
class Demo
{
public static int Value;
static Demo() { Value = 42; }
}
class Program
{
static void Main()
{
Console.WriteLine(Demo.Value);
}
}자주 묻는 질문
“정적 생성자” 강의는 무료인가요?
네 — “정적 생성자” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“정적 생성자”에서 뭘 배우나요?
정적 상태를 정확히 한 번 초기화합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“정적 생성자” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.