Java에는 final 키워드가 존재하지만, C#에는 이에 해당하는 키워드가 직접적으로 없습니다. 대신 C#에서는 동일한 기능을 구현하기 위해 sealed 또는 readonly 키워드를 사용합니다.
C#의 readonly 키워드란?
readonly 키워드는 변수에 값을 한 번만 할당할 수 있도록 제한합니다. 즉, 읽기 전용(read-only)으로 표시된 필드는 객체가 생성되는 시점(생성자 호출 시)에 단 한 번만 값을 설정할 수 있으며, 이후에는 변경이 불가능합니다.
이는 Java의 final 필드와 매우 유사한 동작 방식으로, 한 번 초기화된 값이 프로그램 실행 중에 실수로 변경되는 것을 방지하여 코드의 안정성을 높여줍니다.
readonly 사용 예제
class Employee {
readonly int age;
Employee(int age) {
this.age = age; // 생성자에서 한 번만 할당 가능
}
void ChangeAge() {
// age = 27; // 컴파일 오류 발생!
}
}위 예제에서 age 필드는 readonly로 선언되었습니다. 생성자를 통해 값이 할당된 이후에는 다른 메서드에서 값을 변경하려고 하면 컴파일 오류가 발생합니다. 주석 처리된 age = 27; 부분의 주석을 해제하면 바로 오류를 확인할 수 있습니다.
readonly vs sealed: 언제 무엇을 사용할까?
두 키워드는 용도가 조금 다릅니다.
- readonly: 클래스의 필드(변수)에 적용하여, 값이 한 번 할당된 후 변경되지 않도록 합니다. Java의
final변수와 가장 유사합니다. - sealed: 클래스에 적용하여 해당 클래스가 상속될 수 없도록 합니다. Java의
final class와 같은 역할입니다.
따라서 Java의 final 키워드를 C#으로 옮길 때는, 변수인 경우 readonly, 클래스인 경우 sealed를 사용하면 됩니다.