6.12 인라인 생성자(Inline Constructors)
6.12 인라인 생성자(Inline Constructors)
Haxe 3.1.0 이후
생성자가 inline으로 선언되면, 컴파일러는 특정 상황에서 그것을 최적화해 없앨 수 있어요. 이를 위해 컴파일러는 객체가 지역 변수 집합으로 대체될 수 있음을 검증할 수 있어야 합니다.
- 새로 생성된 인스턴스는 지역 함수에서만 접근할 수 있어야 한다.
- 호출된 모든 인스턴스 함수는 인라인되어야 한다.
- 인스턴스에 대한 다른 모든 참조는 그 변수만 읽거나 써야 한다.
다음 예제는 생성자 인라이닝을 보여줍니다:
class Point {
public var x:Float;
public var y:Float;
public inline function new(x:Float, y:Float) {
this.x = x;
this.y = y;
}
}
class Main {
static public function main() {
var pt = new Point(1.2, 9.3);
}
}
JavaScript 출력을 보면 효과가 드러납니다:
Main.main = function() {
var pt_x = 1.2;
var pt_y = 9.3;
};
Point 인스턴스가 지역 변수 pt_x와 pt_y로 대체되어, 별도의 객체를 만들지 않습니다.
본문
인라인 생성자
inline function new(...)은 컴파일러가 객체를 지역 변수 집합으로 대체할 수 있게 해 객체 생성을 최적화합니다. 조건: 인스턴스가 지역 함수에서만 접근되고, 호출된 인스턴스 함수가 모두 인라인되며, 다른 참조는 변수만 읽거나 쓰는 경우.
효과
new Point(1.2, 9.3)이 var pt_x = 1.2; var pt_y = 9.3;로 바뀌어 별도 객체를 만들지 않습니다.