프로그래밍VB.NET 개발자

Visual Basic에서 상수(정수, 읽기 전용)를 올바르게 선언하고 사용하는 방법은 무엇이며, 이들 간의 차이점은 무엇이며, 사용할 때 피해야 할 함정은 무엇인가요?

Hintsage AI 어시스턴트로 면접 통과

답변.

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는 컴파일 시에 알려진 값(문자열과 숫자 포함)에만 사용할 수 있습니다.
  • ReadOnly는 생성자에서 초기화를 허용하며, 객체의 생애 동안 불변성을 보장합니다.
  • Const는 항상 정적이며, ReadOnly는 인스턴스마다 다를 수 있습니다.

함정 질문.

런타임에 가져온 값에 대해 Const를 선언할 수 있나요 (예: 파일에서)?

아니요 — Const는 컴파일 시점에 값을 요구합니다. 런타임 초기화에는 ReadOnly를 사용해야 합니다.

ReadOnly 필드는 생성자 이후에 수정될 수 있나요?

아니요 — 초기화 시점에만 변경이 가능하며(선언 시 또는 생성자에서), 이후에는 읽기 전용으로만 접근할 수 있습니다.

수학 계산에서 float/double 값을 위해 Const를 사용해야 할까요?

예, 값이 미리 알려져 있을 경우에만 사용해야 합니다. 그러나 다른 어셈블리에서 사용할 경우, Const의 값을 변경하려면 모든 종속 모듈을 다시 컴파일해야 하며, 컴파일러가 값을 직접 삽입하기 때문입니다.

일반적인 오류 및 안티 패턴

  • 실제로 상수가 아닌 값에 대해 Const 사용
  • 생성자 이후에 ReadOnly를 잘못 할당 — 컴파일 오류로 이어짐
  • Const/ReadOnly 없이 코드에 마법 숫자의 파생된 값을 저장

실생활 예시

부정적인 사례

개발자가 상수(Const)를 선언하여 나중에 다양한 환경(dev/prod)에서 변경해야 할 폴더 경로를 사용했습니다. 그 결과 폴더를 변경하려면 이 Const를 사용하는 모든 프로젝트를 다시 빌드해야 했습니다.

장점:

  • 변수에 대한 명확한 설명

단점:

  • 변경 시 모든 모듈 다시 빌드 필요
  • 유연성 부족

긍정적인 사례

경로를 위해 ReadOnly를 구현하고, 환경 구성을 고려하여 생성자에서 초기화했습니다. 값은 전체 애플리케이션을 다시 빌드하지 않고도 설정을 통해 쉽게 변경할 수 있습니다.

장점:

  • 유연성
  • 유지 관리 용이성

단점:

  • 코드 구조가 복잡해짐 (생성자 필요)