3.1 Typedef

3.1 Typedef

익명 구조체(anonymous structures)를 이야기하면서 typedef를 잠깐 살펴봤어요. 복잡한 구조 타입에 이름을 줘서 짧게 줄이는 방법을 보았죠. 이것이 정확히 typedef가 유용한 이유예요. 구조 타입에 이름을 주는 것은 typedef의 주된 기능으로 간주될 정도이며, 그래서 둘의 구분이 다소 흐릿하게 보입니다. 많은 Haxe 사용자는 typedef가 실제로 구조체 "자체"라고 생각하기도 해요.

typedef는 다른 어떤 타입이든 이름을 줄 수 있습니다:

typedef IA = Array<Int>;

이렇게 하면 보통 Array<Int>를 쓰는 곳에서 IA를 사용할 수 있어요. 이 특정 경우에는 몇 번의 타이핑만 절약되지만, 더 복잡한 복합 타입에서는 훨씬 큰 차이를 만들 수 있습니다. 다시 말하지만, 이것이 typedef와 구조체가 그렇게 연결되어 보이는 이유예요:

typedef User = {
  var age : Int;
  var name : String;
}

Typedef는 텍스트 치환이 아니라 실제 타입이에요. 타입 매개변수(type parameters)도 가질 수 있는데, Haxe 표준 라이브러리의 Iterable 타입이 그 예시를 보여줍니다:

typedef Iterable<T> = {
  function iterator() : Iterator<T>;
}

출처: Typedef

본문

typedef의 용도

typedef는 복합 타입에 이름을 붙여 코드를 간결하게 만들고 재사용성을 높여요. 특히 구조 타입에 이름을 주는 것이 주된 용도로, Array<Int>보다 IA처럼 짧게 쓸 수 있게 해줍니다.

typedef는 실제 타입

typedef는 단순한 텍스트 치환이 아니라 진짜 타입이에요. 타입 매개변수를 가질 수도 있으므로, Iterable<T>처럼 제네릭한 구조 타입을 정의하는 데에도 쓰입니다.

구조체와의 연결

구조 타입에 이름을 주는 typedef의 특성 때문에, 많은 사용자가 typedef와 구조체를 사실상 같은 것으로 여겨요. 이름이 주어진 구조체 타입이 바로 typedef라는 인식이죠.

더 알아보기