컨버터

컨버터

컨버터(converter)는 일반 proc와 거의 똑같지만, "암묵적으로 변환 가능한"(implicitly convertible) 타입 관계를 강화해 준다는 점이 달라요. 쉽게 말해, 컨버터를 정의해 두면 Nim 컴파일러가 필요할 때 그 타입 변환을 알아서 해주는 거죠. 자세한 건 Convertible relation 섹션에서 볼 수 있어요.

출처: Nim Manual

본문

직접 예시를 보는 게 빠르겠네요.

# bad style ahead: Nim is not C.
converter toBool(x: int): bool = x != 0

if 4:
  echo "compiles"

여기서 converter toBool(x: int): bool을 정의했기 때문에, if 4:처럼 int 값이 bool이 필요한 자리에 오면 컴파일러가 toBool 컨버터를 불러서 자동으로 bool로 바꿔줘요. 그래서 이 코드는 컴파일이 됩니다. (주석에도 있듯이 Nim is not C. — 이런 식으로 암묵 변환에 과하게 의존하는 건 C 스타일의 안 좋은 습관이라는 걸 기억하세요.)

컨버터는 가독성을 위해 명시적으로 호출할 수도 있어요.

한 가지 꼭 알아둬야 할 점이 있어요. 암묵적인 컨버터 체이닝(converter chaining)은 지원되지 않습니다. 타입 A에서 타입 B로 가는 컨버터와, 타입 B에서 타입 C로 가는 컨버터가 각각 있다고 해도, A에서 C로 가는 암묵 변환은 제공되지 않아요. 즉 컨버터는 한 단계까지만 자동으로 적용된다는 뜻이에요.

더 알아보기 (Learn more)