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)로 변환되기 때문이에요. 이를 위한 세 가지 요구사항이 있습니다:
- 리터럴
12와triple의 첫 인자 모두Int타입으로 알려져 있다. - 클래스
IntExtender가using 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으로 컨텍스트에 가져오기, 확장 대상이 같은 이름의 필드를 가지지 않기. 필드가 있으면 필드가 우선합니다.
가독성 효과
중첩 함수 호출을 연결 호출로 바꿔 가독성을 크게 개선할 수 있어요.