Menu
Coddy logo textTech

정적 클래스

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를 사용하여 인스턴스를 생성할 수 없으며, 인스턴스 생성자를 가질 수 없고, 상속될 수 없습니다. 정적 클래스는 정적 필드, 속성 및 메서드만 포함할 수 있습니다.

여러분이 사용해 온 ConsoleMath 클래스는 정적 클래스의 완벽한 예입니다. 이들은 객체 상태가 필요 없는 유틸리티 기능을 제공합니다. 정적 클래스는 인스턴스별 데이터가 필요하지 않은 관련 헬퍼 메서드나 상수를 그룹화하는 데 이상적입니다.

challenge icon

챌린지

쉬움

객체 상태가 필요하지 않은 관련 헬퍼 메서드들을 그룹화하기 위해 정적 클래스(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를 사용하여 인스턴스화할 수 없음
  • 인스턴스 생성자를 가질 수 없음
  • 상속될 수 없음
  • 정적 필드, 속성 및 메서드만 포함할 수 있음

일반적인 예로는 객체 상태 없이 유틸리티 기능을 제공하는 ConsoleMath 클래스가 있습니다.

직접 해보기

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
        
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨