E193: Volatile on Val

E193: Volatile on Val

이 경고는 불변 값인 val@volatile 애노테이션을 붙였을 때 나와요. 가변 필드가 아닌 값에 volatile을 거는 건 거의 실수라고 볼 수 있답니다.

출처: Scala 3 Reference

본문

@volatile 애노테이션은 스레드 간 변경 사항의 가시성을 보장해 주기 때문에, 가변 필드(var)에만 의미가 있어요. 반면 val은 불변이고 초기화 중에 단 한 번만 값이 할당되기 때문에, volatile 애노테이션은 아무 효과가 없고 사실상 실수일 가능성이 높아요.

예시 (Example)

다음 코드처럼 @volatileval에 붙이면 경고가 발생해요.

class Example:
  @volatile val x: Int = 42

에러 (Error)

-- [E193] Syntax Warning: example.scala:2:16 -----------------------------------
2 |  @volatile val x: Int = 42
  |                ^
  |                values cannot be volatile

해결 방법 (Solution)

volatile 필드가 정말 필요하다면 var을 사용해요.

class Example:
  @volatile var x: Int = 42

값이 불변 상태로 남아야 한다면 @volatile 애노테이션을 제거하면 돼요.

class Example:
  val x: Int = 42