@Fn: 함수 타입을 직접 만들어 주는 내장 함수

@Fn: 함수 타입을 직접 만들어 주는 내장 함수

이번에는 Zig의 내장 함수 @Fn을 살펴볼게요. 인자로 주는 타입 정보를 바탕으로, 우리가 원하는 형태의 함수 타입을 컴파일 타임에 만들어 주는 함수예요. 출처: Zig Documentation

본문

보통은 함수를 직접 정의하면 그 타입도 저절로 따라오죠. 그런데 때로는 "이런 시그니처를 가진 함수 타입"을 그 자체로 하나의 값처럼 얻고 싶을 때가 있어요. 그럴 때 쓰는 게 @Fn이에요.

@Fn은 다음과 같이 선언해요.

@Fn(
    comptime param_types: []const type,
    comptime param_attrs: *const [param_types.len]std.lang.Type.Fn.ParamAttributes,
    comptime ReturnType: type,
    comptime attrs: std.lang.Type.Fn.Attributes,
) type
  • param_types로 매개변수들의 타입을, ReturnType으로 반환 타입을 지정해요.
  • 각 매개변수에 붙일 속성(attribute)은 param_attrs로, 함수 전체에 붙일 속성은 attrs로 넘겨요.
  • 이 모든 인자는 comptime이라서 컴파일 타임에 확정되어야 해요.

@Fn은 인자로 주어진 속성들을 반영한 함수 타입을 반환해요. 즉 "이런 인자를 받고 이런 값을 돌려주는 함수"라는 타입 자체를 만들어 주는 거죠. 실제 함수의 동작을 정의하는 게 아니라, 그 함수가 가져야 할 모양만 규정한다는 점이 핵심이에요.

반환 타입이 type이라는 것에 주목해 보면, 이 함수가 타입을 만들어 내는 metaprogramming 용도로 쓰인다는 게 좀 더 와 닿을 거예요.

더 알아보기 (Learn more)

  • 함수 타입이 실제로 어떻게 쓰이는지 궁금하다면 Functions 섹션을 함께 보면 좋아요.