C#에서 정적(static) 클래스와 비정적(non-static) 클래스는 인스턴스 생성 방식과 멤버 구성에서 중요한 차이를 보입니다. 아래에서 핵심 차이점을 하나씩 살펴보겠습니다.
정적 클래스와 비정적 클래스의 주요 차이점
- 인스턴스화 가능 여부: 비정적 클래스는 new 키워드로 객체(인스턴스)를 생성할 수 있지만, 정적 클래스는 인스턴스화할 수 없습니다. 즉, new 키워드를 사용해 클래스 타입의 변수를 만들 수 없습니다.
- 메서드 구성: 정적 클래스에는 오직 정적(static) 메서드만 포함될 수 있습니다.
- 비정적 클래스의 유연성: 비정적 클래스는 인스턴스 메서드와 정적 메서드를 모두 가질 수 있습니다.
- 멤버 접근 방식: 정적 클래스의 멤버는 객체가 아닌 클래스 이름 자체를 통해 접근합니다.
- 상속 불가: 정적 클래스는 암시적으로 sealed로 선언되어 있어 다른 클래스가 상속할 수 없습니다.
정적 클래스 예제
public static class Calculate
{
public static int Add(int a, int b)
{
return a + b;
}
}위 코드처럼 정적 클래스는 new 없이 클래스 이름으로 바로 호출합니다.
int result = Calculate.Add(10, 20); // 클래스 이름으로 직접 접근
비정적 클래스 예제
public class Calculate
{
public int Multiply(int a, int b)
{
return a * b;
}
}비정적 클래스는 먼저 인스턴스를 생성한 후 멤버에 접근해야 합니다.
Calculate calc = new Calculate(); // 인스턴스 생성 필수 int result = calc.Multiply(10, 20);
정리
유틸리티 성격의 기능(수학 계산, 로깅, 설정 조회 등)처럼 상태를 저장할 필요가 없다면 정적 클래스가 적합합니다. 반면, 각 객체마다 고유한 데이터를 유지해야 한다면 비정적 클래스를 사용하는 것이 올바른 선택입니다.