타입 섹션

타입 섹션 (Type sections)

Nim에서 타입을 정의하려면 type 키워드로 시작하는 타입 섹션(type section)을 사용해요. 하나의 타입 섹션 안에는 여러 타입 정의를 담을 수 있고, 타입들은 서로를 참조하는 재귀(recursive) 구조로도 선언할 수 있어요. 이 문서는 타입 섹션을 선언하는 문법과 그 규칙을 다뤄요.

출처: Nim Manual: Type sections

본문

타입 섹션은 type 키워드로 시작해요. 타입 섹션은 여러 개의 타입 정의(type definition)를 담을 수 있고, 각 타입 정의는 타입에 이름을 붙입니다. 타입 정의는 재귀적이거나 심지어 서로 재귀적(mutually recursive)일 수도 있어요. 다만 서로 재귀적인 타입은 하나의 타입 섹션 안에서만 정의할 수 있다는 점을 기억해야 해요. 또 objectenum 같은 명목적(nominal) 타입은 타입 섹션 안에서만 정의할 수 있어요.

type # example demonstrating mutually recursive types
  Node = ref object  # an object managed by the garbage collector (ref)
    le, ri: Node     # left and right subtrees
    sym: ref Sym     # leaves contain a reference to a Sym
  
  Sym = object       # a symbol
    name: string     # the symbol's name
    line: int        # the line the symbol was declared in
    code: Node       # the symbol's abstract syntax tree

위 예시에서 NodeSym을 참조하고, Sym은 다시 Node를 참조해요. 이처럼 서로를 참조하는 타입을 하나의 type 섹션 안에서 선언할 수 있어요. ref object는 가비지 컬렉터(garbage collector)가 관리하는 객체 타입을, 일반 object는 값으로 다뤄지는 객체 타입을 나타내요.

더 알아보기 (Learn more)