alias

alias

타입 이름이 길어질 때, 그 긴 이름을 매번 적는 건 여간 번거로운 일이 아니에요. Crystal의 alias는 그런 경우 타입에 다른 이름을 붙여줘서, 짧고 읽기 좋은 코드를 만들 수 있게 도와줘요.

출처: Crystal 공식 문서

본문

alias를 쓰면 타입에 다른 이름을 붙일 수 있어요.

alias PInt32 = Pointer(Int32)

ptr = PInt32.malloc(1) # : Pointer(Int32)

별칭을 쓸 때마다 컴파일러가 그 별칭을 가리키는 실제 타입으로 바꿔줘요.

별칭은 긴 타입 이름을 반복해서 쓰지 않게 해주는 데 유용할 뿐 아니라, **재귀적 타입(recursive type)**을 표현할 때도 쓰여요.

alias RecArray = Array(Int32) | Array(RecArray)

ary = [] of RecArray
ary.push [1, 2, 3]
ary.push ary
ary # => [[1, 2, 3], [...]]

재귀적 타입의 실제 사례 하나가 바로 json이에요. JSON 값은 숫자·문자열 같은 단순한 값일 수도, 배열이나 객체처럼 자기 자신을 다시 포함하는 값일 수도 있죠.

module Json
  alias Type = Nil |
               Bool |
               Int64 |
               Float64 |
               String |
               Array(Type) |
               Hash(String, Type)
end

더 알아보기

  • 타입에 별칭을 붙이면 컴파일러가 그 별칭을 실제 타입으로 치환한다는 점을 기억해 두면 좋아요.
  • 재귀적 타입(Array(Type)처럼 자기 자신을 참조하는 타입)은 alias 없이는 선언하기 어려워요.