E193: Volatile on Val
E193: Volatile on Val
이 경고는 불변 값인 val에 @volatile 애노테이션을 붙였을 때 나와요. 가변 필드가 아닌 값에 volatile을 거는 건 거의 실수라고 볼 수 있답니다.
본문
@volatile 애노테이션은 스레드 간 변경 사항의 가시성을 보장해 주기 때문에, 가변 필드(var)에만 의미가 있어요. 반면 val은 불변이고 초기화 중에 단 한 번만 값이 할당되기 때문에, volatile 애노테이션은 아무 효과가 없고 사실상 실수일 가능성이 높아요.
예시 (Example)
다음 코드처럼 @volatile을 val에 붙이면 경고가 발생해요.
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