타입 섹션
타입 섹션 (Type sections)
Nim에서 타입을 정의하려면 type 키워드로 시작하는 타입 섹션(type section)을 사용해요. 하나의 타입 섹션 안에는 여러 타입 정의를 담을 수 있고, 타입들은 서로를 참조하는 재귀(recursive) 구조로도 선언할 수 있어요. 이 문서는 타입 섹션을 선언하는 문법과 그 규칙을 다뤄요.
본문
타입 섹션은 type 키워드로 시작해요. 타입 섹션은 여러 개의 타입 정의(type definition)를 담을 수 있고, 각 타입 정의는 타입에 이름을 붙입니다. 타입 정의는 재귀적이거나 심지어 서로 재귀적(mutually recursive)일 수도 있어요. 다만 서로 재귀적인 타입은 하나의 타입 섹션 안에서만 정의할 수 있다는 점을 기억해야 해요. 또 object나 enum 같은 명목적(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
위 예시에서 Node는 Sym을 참조하고, Sym은 다시 Node를 참조해요. 이처럼 서로를 참조하는 타입을 하나의 type 섹션 안에서 선언할 수 있어요. ref object는 가비지 컬렉터(garbage collector)가 관리하는 객체 타입을, 일반 object는 값으로 다뤄지는 객체 타입을 나타내요.
더 알아보기 (Learn more)
- Nim Manual — 객체 타입, 열거형, 튜플, distinct 타입 등 타입 전반에 대한 공식 매뉴얼
- Nim Manual: Type sections — 이 문서의 원문 섹션