본문 바로가기
C#

[C#, Dart] Dart와 C#에서의 변경 불가능한 변수: `final`과 `readonly` 비교

by Minius 2024. 7. 1.
반응형

Dart에서 final 키워드의 의미와 사용법

Dart에서 final 키워드는 변수를 한 번만 할당할 수 있도록 제한하는 데 사용됩니다. final로 선언된 변수는 단 한 번 초기화될 수 있으며, 초기화된 후에는 값이 변경될 수 없습니다. 이는 주로 상수 또는 변경되지 않아야 하는 값을 정의할 때 사용됩니다. 다음은 final 키워드의 주요 특징과 사용 예입니다:

주요 특징

  1. 초기화 후 변경 불가: final 변수는 한 번 초기화된 후 값을 변경할 수 없습니다.
  2. 런타임 상수: final 변수는 컴파일 시점이 아닌 런타임 시점에서 값을 할당할 수 있습니다.
  3. 지연 초기화: final 변수는 선언 시 즉시 초기화하지 않고 나중에 한 번만 초기화할 수 있습니다.

사용 예

void main() {
  final String name = "John";
  final int age;

  // 지연 초기화
  age = 30;

  print("Name: $name");
  print("Age: $age");

  // 아래 코드는 컴파일 오류를 발생시킵니다.
  // name = "Doe";  // 오류: 'name'은 final 변수입니다.
  // age = 35;      // 오류: 'age'는 이미 할당되었습니다.
}

요약

  • final 키워드는 변수를 한 번만 초기화할 수 있도록 제한합니다.
  • 선언 시 초기화하거나, 나중에 한 번만 초기화할 수 있습니다.
  • 초기화된 후에는 값을 변경할 수 없습니다.

이러한 특성 덕분에 final 키워드는 코드에서 상수를 정의하거나, 한 번 초기화된 후에는 변하지 않는 값을 나타내는 데 유용하게 사용됩니다.


C#에서 readonly 키워드의 의미와 사용법

C#에서도 Dart의 final과 유사한 기능을 하는 키워드가 있습니다. C#에서 이와 유사한 기능을 제공하는 키워드는 readonly입니다. readonly 키워드를 사용하여 필드를 선언하면, 해당 필드는 객체가 생성된 후 초기화할 수 있지만, 한 번 초기화된 후에는 변경할 수 없습니다. 이는 주로 상수처럼 사용되지만, 객체가 생성된 후에 값을 설정할 수 있는 경우에 유용합니다.

readonly 키워드 사용 예제

using System;

class Person
{
    public readonly string Name;
    public readonly int Age;

    // 생성자에서 readonly 필드 초기화
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public void DisplayInfo()
    {
        Console.WriteLine($"Name: {Name}");
        Console.WriteLine($"Age: {Age}");
    }
}

class Program
{
    static void Main()
    {
        // 객체 생성 시 readonly 필드 초기화
        Person person = new Person("John", 30);
        person.DisplayInfo();

        // 아래 코드는 컴파일 오류를 발생시킵니다.
        // person.Name = "Doe";  // 오류: 'Person.Name'은 readonly 필드입니다.
        // person.Age = 35;      // 오류: 'Person.Age'는 readonly 필드입니다.
    }
}

const 키워드와의 차이점

C#에는 const 키워드도 있지만, 이는 컴파일 시간 상수를 정의하는 데 사용됩니다. const 필드는 반드시 선언과 동시에 초기화되어야 하며, 런타임에 값을 변경할 수 없습니다.

class Constants
{
    public const int MaxValue = 100;

    public void DisplayConstant()
    {
        Console.WriteLine($"MaxValue: {MaxValue}");
    }
}

class Program
{
    static void Main()
    {
        Constants constants = new Constants();
        constants.DisplayConstant();

        // 아래 코드는 컴파일 오류를 발생시킵니다.
        // Constants.MaxValue = 200;  // 오류: 'Constants.MaxValue'은 상수입니다.
    }
}

요약

  • readonly 키워드는 변수를 한 번만 초기화할 수 있도록 제한하며, 런타임에 객체가 생성된 후 초기화할 수 있습니다.
  • const 키워드는 컴파일 시간에 초기화되어야 하며, 런타임에 값을 변경할 수 없습니다.

따라서, C#에서는 readonly 키워드를 사용하여 Dart의 final과 유사한 기능을 구현할 수 있습니다.


이 블로그 포스트에서는 Dart의 final 키워드와 C#의 readonly 키워드를 비교하고, 각각의 사용법과 예제를 통해 그 차이점을 설명했습니다. 이를 통해 각 언어에서 변경 불가능한 변수를 어떻게 선언하고 사용하는지에 대한 이해를 높일 수 있을 것입니다.

댓글