5.9 var와 final

5.9 var와 final

var 키워드는 쉼표 ,로 구분된 여러 변수를 선언할 수 있게 해요. 각 변수는 유효한 식별자(identifier)를 가지며 선택적으로 할당 연산자 = 뒤에 값 할당을 가질 수 있어요. 변수는 명시적 타입 힌트도 가질 수 있습니다.

var a; // declare local `a`
var b:Int; // declare variable `b` of type Int
// declare variable `c`, initialized to value 1
var c = 1;
// declare an uninitialized variable `d`
// and variable `e` initialized to value 2
var d,e = 2;

지역 변수의 스코프 동작과 변수 섀도잉은 블록(Blocks)에서 설명합니다.

Haxe 4.0.0 이후 — Haxe 4에서 표현식 수준에 대체 키워드 final이 도입되었어요. var 대신 final로 선언된 변수는 값을 한 번만 할당할 수 있습니다.

class Main {
  static public function main() {
    final a = "hello";
    var b = "world";
    trace(a, b); // hello, world
    b = "Haxe";
    trace(a, b); // hello, Haxe

    // the following line would cause a compilation error:
    // a = "bye";
  }
}

final은 배열이나 객체처럼 불변(immutable)이 아닌 타입에서는 의도한 효과가 없을 수 있음을 주목하는 것이 중요해요. 변수에 다른 객체가 할당될 수는 없지만, 그 객체의 내부 상태는 여전히 변경될 수 있으므로, final 변수의 값이 실제로 변하지 않는다는 보장은 제한적입니다.

출처: var and final

본문

var 선언

var로 쉼표 구분 여러 변수를 선언할 수 있어요. 각 변수는 식별자, 선택적 타입 힌트, 선택적 초기화 값을 가집니다. 타입 초기화 없이 선언하면 초기화되지 않은 변수가 됩니다.

final 선언

Haxe 4의 final은 var 대신 쓰여 한 번만 값이 할당될 수 있는 변수를 선언해요. final a = "hello"; 후에 a = "bye"는 컴파일 오류입니다.

final의 제한

final은 가리키는 객체를 바꿀 수 없게 하지만, 배열·객체의 내부 상태 변경은 막지 못해요.

더 알아보기