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_xpt_y로 대체되어, 별도의 객체를 만들지 않습니다.

출처: Inline Constructors

본문

인라인 생성자

inline function new(...)은 컴파일러가 객체를 지역 변수 집합으로 대체할 수 있게 해 객체 생성을 최적화합니다. 조건: 인스턴스가 지역 함수에서만 접근되고, 호출된 인스턴스 함수가 모두 인라인되며, 다른 참조는 변수만 읽거나 쓰는 경우.

효과

new Point(1.2, 9.3)var pt_x = 1.2; var pt_y = 9.3;로 바뀌어 별도 객체를 만들지 않습니다.

더 알아보기