정적 클래스
Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 13번째.
클래스가 정적(static) 멤버만 포함하고 인스턴스를 생성할 필요가 전혀 없을 때, 클래스 전체를 static으로 선언할 수 있습니다. 이는 컴파일러에게 해당 클래스가 인스턴스화될 수 없으며 정적 멤버만 포함할 수 있음을 알려줍니다.
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}정적 클래스는 정적 멤버를 사용하는 것과 동일한 방식으로 클래스 이름을 직접 호출하여 사용합니다:
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;정적 클래스에는 중요한 제한 사항이 있습니다. new를 사용하여 인스턴스를 생성할 수 없으며, 인스턴스 생성자를 가질 수 없고, 상속될 수 없습니다. 정적 클래스는 정적 필드, 속성 및 메서드만 포함할 수 있습니다.
여러분이 사용해 온 Console 및 Math 클래스는 정적 클래스의 완벽한 예입니다. 이들은 객체 상태가 필요 없는 유틸리티 기능을 제공합니다. 정적 클래스는 인스턴스별 데이터가 필요하지 않은 관련 헬퍼 메서드나 상수를 그룹화하는 데 이상적입니다.
챌린지
쉬움객체 상태가 필요하지 않은 관련 헬퍼 메서드들을 그룹화하기 위해 정적 클래스(static class)를 사용하여 온도 변환 유틸리티를 만들어 보겠습니다.
코드를 정리하기 위해 두 개의 파일을 생성합니다:
TemperatureConverter.cs:Utilities네임스페이스 안에TemperatureConverter라는 정적 클래스를 정의합니다. 이 클래스는 다음을 포함해야 합니다:-273.15로 설정된 정적 필드AbsoluteZeroCelsius(celsius * 9 / 5) + 32공식을 사용하여 섭씨를 화씨로 변환하는 정적 메서드CelsiusToFahrenheit(double celsius)(fahrenheit - 32) * 5 / 9공식을 사용하여 화씨를 섭씨로 변환하는 정적 메서드FahrenheitToCelsius(double fahrenheit)- 온도가 절대 영도보다 높으면
true를 반환하는 정적 메서드IsAboveAbsoluteZero(double celsius)
Program.cs: 메인 파일에서 정적 클래스를 사용하여 변환을 수행합니다. 입력으로부터 섭씨 온도 값을 읽은 다음, 변환 결과와 유효성 검사 결과를 표시합니다.
하나의 입력을 받게 됩니다: 섭씨 온도 값입니다.
결과를 다음 형식으로 출력하세요:
{celsius}C = {fahrenheit}F
{fahrenheit}F = {convertedBack}C
Above Absolute Zero: {True/False}
Absolute Zero: {AbsoluteZeroCelsius}C예를 들어, 입력이 25라면 출력은 다음과 같아야 합니다:
25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15C정적 클래스는 인스턴스화할 수 없다는 점을 기억하세요. 모든 메서드는 TemperatureConverter.CelsiusToFahrenheit(25)와 같이 클래스 이름을 통해 직접 호출해야 합니다.
치트 시트
static 클래스는 정적 멤버만 포함할 수 있으며 인스턴스화할 수 없습니다. 객체 상태가 필요하지 않은 관련 유틸리티 메서드와 상수를 그룹화하는 데 사용됩니다.
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}정적 클래스 멤버는 클래스 이름을 통해 직접 액세스됩니다:
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;정적 클래스의 제한 사항:
new를 사용하여 인스턴스화할 수 없음- 인스턴스 생성자를 가질 수 없음
- 상속될 수 없음
- 정적 필드, 속성 및 메서드만 포함할 수 있음
일반적인 예로는 객체 상태 없이 유틸리티 기능을 제공하는 Console 및 Math 클래스가 있습니다.
직접 해보기
using System;
using Utilities;
class Program
{
public static void Main(string[] args)
{
// 섭씨 온도를 읽습니다
double celsius = Convert.ToDouble(Console.ReadLine());
// TODO: TemperatureConverter 정적 메서드를 사용하여 다음을 수행하세요:
// 1. celsius를 fahrenheit로 변환
// 2. fahrenheit를 다시 celsius로 변환
// 3. 온도가 절대 영도보다 높은지 확인
// 4. 절대 영도 상수를 가져오기
// TODO: 필요한 형식으로 결과를 출력하세요:
// {celsius}C = {fahrenheit}F
// {fahrenheit}F = {convertedBack}C
// 절대 영도 초과: {True/False}
// 절대 영도: {AbsoluteZeroCelsius}C
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.