6.3 정적 확장(Static Extension)

6.3 정적 확장(Static Extension)

정의: 정적 확장(Static Extension) — 정적 확장은 소스를 수정하지 않고 기존 타입을 의사(pseudo) 확장하게 해줍니다. Haxe에서는 확장 대상 타입을 첫 인자로 하는 static 메서드를 선언한 뒤 using으로 정의 클래스를 문맥에 가져와서 달성합니다.

정적 확장은 타입을 실제로 바꾸지 않고 확장할 수 있게 해주는 강력한 도구가 될 수 있어요. 다음 예제는 사용법을 보여줍니다:

using Main.IntExtender;

class IntExtender {
  static public function triple(i:Int) {
    return i * 3;
  }
}

class Main {
  static public function main() {
    trace(12.triple());
  }
}

분명히 Int는 네이티브하게 triple 메서드를 제공하지 않는데, 이 프로그램은 컴파일되고 기대대로 36을 출력합니다. 12.triple() 호출이 IntExtender.triple(12)로 변환되기 때문이에요. 이를 위한 세 가지 요구사항이 있습니다:

  • 리터럴 12triple의 첫 인자 모두 Int 타입으로 알려져 있다.
  • 클래스 IntExtenderusing Main.IntExtender를 통해 문맥에 놓인다.
  • Int는 그 자체로 triple 필드가 없다(있다면 그 필드가 정적 확장보다 우선한다).

정적 확장은 보통 문법적 설탕(syntactic sugar)으로 간주되며 실제로 그렇지만, 코드 가독성에 극적인 영향을 줄 수 있다는 점을 주목할 가치가 있어요: f1(f2(f3(f4(x)))) 형태의 중첩 호출 대신 x.f4().f3().f2().f1() 형태의 연결 호출을 작성할 수 있습니다.

출처: Static Extension

본문

정적 확장이란

using으로 가져온 클래스의 static 메서드를, 첫 인자 타입에 메서드처럼 붙여 쓸 수 있는 기능이에요. 12.triple()IntExtender.triple(12)로 변환됩니다.

요구사항

타입 일치(리터럴과 첫 인자), using으로 컨텍스트에 가져오기, 확장 대상이 같은 이름의 필드를 가지지 않기. 필드가 있으면 필드가 우선합니다.

가독성 효과

중첩 함수 호출을 연결 호출로 바꿔 가독성을 크게 개선할 수 있어요.

더 알아보기