Visual Basic은 두 가지 주요 방법으로 변경 불가능한 값을 선언할 수 있습니다 — Const와 ReadOnly. Const는 컴파일러 상수에 사용되며, 그 값은 컴파일 단계에서 알려져야 합니다. ReadOnly는 선언 시점이나 생성자에서만 초기화할 수 있으며, 실행 중에는 불변성을 유지합니다.
역사적으로, VB6 이전부터 이러한 의미론은 마법 숫자를 피하고 유지 관리 작업을 쉽게 해주었습니다. VB.NET에서는 ReadOnly를 인스턴스 필드와 클래스에 도입하여 기능이 확장되었습니다.
런타임 중 결정되거나 외부 데이터에 따라 달라지는 값에 대해 Const를 사용하면 오류가 발생할 수 있습니다. 잘못된 범위 혼동도 버그를 유발합니다.
단순한 불변 값(숫자, 문자열)을 위해 Const를 사용하고, 값이 생성자에서 계산될 수 있는 경우 ReadOnly를 사용하세요. 그 후에는 읽기 전용으로만 유지됩니다.
코드 예시:
Public Class MathConstants Public Const Pi As Double = 3.1415926535 Public ReadOnly Property UtcCreated As DateTime Public Sub New() UtcCreated = DateTime.UtcNow End Sub End Class
주요 특징:
런타임에 가져온 값에 대해 Const를 선언할 수 있나요 (예: 파일에서)?
아니요 — Const는 컴파일 시점에 값을 요구합니다. 런타임 초기화에는 ReadOnly를 사용해야 합니다.
ReadOnly 필드는 생성자 이후에 수정될 수 있나요?
아니요 — 초기화 시점에만 변경이 가능하며(선언 시 또는 생성자에서), 이후에는 읽기 전용으로만 접근할 수 있습니다.
수학 계산에서 float/double 값을 위해 Const를 사용해야 할까요?
예, 값이 미리 알려져 있을 경우에만 사용해야 합니다. 그러나 다른 어셈블리에서 사용할 경우, Const의 값을 변경하려면 모든 종속 모듈을 다시 컴파일해야 하며, 컴파일러가 값을 직접 삽입하기 때문입니다.
개발자가 상수(Const)를 선언하여 나중에 다양한 환경(dev/prod)에서 변경해야 할 폴더 경로를 사용했습니다. 그 결과 폴더를 변경하려면 이 Const를 사용하는 모든 프로젝트를 다시 빌드해야 했습니다.
장점:
단점:
경로를 위해 ReadOnly를 구현하고, 환경 구성을 고려하여 생성자에서 초기화했습니다. 값은 전체 애플리케이션을 다시 빌드하지 않고도 설정을 통해 쉽게 변경할 수 있습니다.
장점:
단점: