3.7.4 해석 순서(Resolution Order)

3.7.4 해석 순서(Resolution Order)

해석 순서는 한정되지 않은 식별자(unqualified identifiers)가 관련될 때 중요해져요. 이들은 foo(), foo = 1, foo.field 형태의 표현식(expressions)입니다. 마지막 경우는 특히 haxe.ds.StringMap 같은 모듈 경로를 포함하는데, 여기서 haxe는 한정되지 않은 식별자예요.

여기서 해석 순서 알고리즘을 설명하는데, 이는 다음 상태에 의존해요:

그림: 식별자 i의 해석 순서

식별자 i가 주어졌을 때, 알고리즘은 다음과 같아요:

  1. itrue, false, this, super, null이면 그에 해당하는 상수로 해석하고 멈춤.
  2. 접근 가능한 이름이 i인 지역 변수가 있으면 그것으로 해석하고 멈춤.
  3. 현재 필드가 static이면 6으로 감.
  4. 현재 클래스나 그 부모 클래스 중 하나에 이름이 i인 필드가 있으면 그것으로 해석하고 멈춤.
  5. 현재 클래스 타입을 첫 인자로 하는 정적 확장이 사용 가능하면 그것으로 해석하고 멈춤.
  6. 현재 클래스에 이름이 i인 static 필드가 있으면 그것으로 해석하고 멈춤.
  7. import된 static과 정적 확장 중에서 동작을 결정하고, 그 클래스에서 열거 열거 생성자/필드를 해석.
  8. import된 모듈에서 이름이 i인 타입을 찾으면 그것으로 해석하고 멈춤.
  9. import된 타입에서 이름이 i인 타입을 찾으면 그것으로 해석하고 멈춤.
  10. i가 필드 또는 메서드 이름이고 타입이 Dynamic이거나 알려지지 않았으면 Dynamic 필드 접근으로 해석하고 멈춤.
  11. i가 추상(abstract)이라면 @:resolve 메타데이터를 사용해 동작을 결정.
  12. i가 언어(해석되지 않은) 형태의 지원을 받는 매크로(macro)라면 매크로 형식으로 해석.
  13. 위의 그 어느 것도 해당하지 않으면 해석 실패 오류를 보고하고 멈춤.

만약 untyped로 표시된 표현식에 식별자가 나타나면, 해석 순서는 10번으로 바로 간다.

출처: Resolution Order

본문

해석 순서란

한정되지 않은 식별자의 해석은 정해진 순서(아래에서 위 우선)로 수행돼요. 이는 지역 변수, 클래스 필드, static, import, 정적 확장 등의 다양한 소스를 검사합니다. 가장 우선순위가 높은 것부터 지역 변수 → 상수 → 클래스 멤버 → static → import 순서입니다.

순서의 핵심

식별자가 상수(true/false/this/super/null)인지, 지역 변수인지, 현재 클래스/부모의 멤버인지 순차적으로 확인하고, 발견되면 그 자리에서 멈춥니다. static 필드, import된 static 확장, import된 모듈/타입으로 점점 범위를 넓혀 갑니다.

untyped 특수 처리

untyped 표현식 안에서는 해석 순서가 10번(Dynamic 필드 접근)으로 바로 점프해요.

더 알아보기