2.5.2 기본값(Default values)

2.5.2 기본값(Default values)

Haxe는 인자에 **상수 값(constant value)**을 할당해 기본값을 제공할 수 있어요:

class Main {
  static public function main() {
    // (?i : Int, ?s : String) -> String
    $type(test);
    trace(test()); // i: 12, s: bar
    trace(test(1)); // i: 1, s: bar
    trace(test(1, "foo")); // i: 1, s: foo
    trace(test("foo")); // i: 12, s: foo
  }

  static function test(?i = 12, s = "bar") {
    return "i: " + i + ", s: " + s;
  }
}

이 예제는 선택적 인자(Optional Arguments)의 예제와 매우 비슷한데, 유일한 차이는 12"bar"라는 값이 각각 함수 인자 is에 할당된다는 점이에요. 그 효과는, 호출에서 인자가 생략되면 null 대신 기본값이 사용된다는 것입니다.

Haxe의 기본값은 타입의 일부가 아니며, 함수가 인라인(inlined)되지 않는 한 호출 지점에서 대체되지 않아요. 어떤 대상에서는 컴파일러가 여전히 생략된 인자 값에 null을 전달하고 함수 내부에서 다음과 유사한 코드를 생성할 수 있습니다:

static function test(i = 12, s = "bar") {
        if (i == null) i = 12;
        if (s == null) s = "bar";
        return "i: " +i + ", s: " +s;
    }

이것은 성능이 중요한 코드에서 고려해야 할 사항이에요. 기본값 없는 해법이 더 나을 때도 있습니다.

출처: Default values

본문

기본값의 선언

함수 인자에 상수 값을 할당하면 기본값이 됩니다. 호출에서 그 인자를 생략하면 기본값이 사용됩니다. ?i = 12처럼 선택적 표기와 함께 쓸 수도 있어요.

기본값은 타입의 일부가 아님

Haxe의 기본값은 함수 타입에 포함되지 않아요. 그리고 함수가 인라인되지 않는 한, 기본값은 호출 지점에서 대체되지 않습니다. 그 대신 대상 코드에서 생략된 인자가 null인지 확인하고 기본값을 적용하는 방식으로 동작할 수 있어요.

성능 고려

인라인되지 않은 경우, 생략된 인자를 위해 null 체크와 기본값 대입이 생성될 수 있어요. 성능이 민감한 코드에서는 이 overhead를 피하기 위해 기본값 대신 명시적인 처리를 고려할 수 있습니다.

더 알아보기