C#에서는 값을 고정하기 위해 readonly와 const 두 가지 키워드를 제공합니다. 두 키워드 모두 '변경 불가능한 값'을 다룬다는 공통점이 있지만, 값이 할당되는 시점과 사용 방식에서 중요한 차이가 있습니다. 이 글에서는 각 키워드의 특징과 실제 코드 예제, 그리고 두 키워드의 차이점을 비교표로 정리해 드립니다.
readonly 키워드란?
readonly 키워드는 필드가 선언될 때 또는 해당 클래스의 생성자(constructor) 안에서 단 한 번만 값을 할당할 수 있는 읽기 전용 필드를 정의합니다. 런타임에 값이 결정되기 때문에 실행 환경에 따라 달라지는 값이나 생성자 매개변수로 전달된 값을 저장할 때 유용합니다.
const 키워드란?
const 키워드는 프로그램 전체에서 변하지 않는 컴파일 타임 상수를 정의합니다. const 필드는 반드시 선언과 동시에 값을 할당해야 하며, 이후에는 어떤 경우에도 값을 변경할 수 없습니다.
코드 예제
다음은 C#에서 readonly와 const 키워드를 올바르게 사용하는 예제입니다.
using System.IO;
using System;
public class Program {
public const int VALUE = 10; // const: 선언과 동시에 초기화
public readonly int value1; // readonly: 생성자에서 초기화
Program(int value){
value1 = value;
}
public static void Main() {
Console.WriteLine(VALUE);
Program p1 = new Program(11);
Console.WriteLine(p1.value1);
}
}
실행 결과
10 11
const 필드는 선언 시 지정한 값 그대로 출력되고, readonly 필드는 생성자를 통해 전달된 값이 출력되는 것을 확인할 수 있습니다.
readonly와 const의 주요 차이점
| 번호 | 구분 | readonly 키워드 | const 키워드 |
|---|---|---|---|
| 1 | 목적 | 읽기 전용(readonly) 필드를 만들 때 사용합니다. | 상수(constant) 필드를 만들 때 사용합니다. |
| 2 | 할당 시점 | 런타임(runtime)에 값이 결정되는 상수입니다. | 컴파일 타임(compile time)에 값이 결정되는 상수입니다. |
| 3 | 값 변경 | 선언 후 생성자를 통해서라면 값을 다시 설정할 수 있습니다. | 선언 이후에는 절대 값을 변경할 수 없습니다. |
| 4 | 선언 위치 | 메서드 내부에는 선언할 수 없으며, 클래스 수준의 필드로만 정의됩니다. | 메서드 내부에서도 지역 상수로 선언할 수 있습니다. |
| 5 | 값 할당 방식 | 인스턴스 변수로 선언되며, 생성자에서 값을 할당하는 것이 일반적입니다. | 반드시 선언과 동시에 값을 할당해야 합니다. |
어떤 것을 선택해야 할까?
값이 프로그램 작성 시점부터 확정되어 있고 절대 변하지 않는다면(예: 원주율, 최대 연결 수 등) const가 적합합니다. 반면, 구성 파일이나 데이터베이스 설정처럼 실행 시점에 결정되는 값이라면 readonly(또는 static readonly)를 사용하는 것이 좋습니다. 두 키워드의 차이를 정확히 이해하면 더 안전하고 유지보수하기 쉬운 C# 코드를 작성할 수 있습니다.