2 타입(Types)

2 타입(Types)

Haxe 컴파일러는 컴파일 타임에 프로그램의 타입 관련 오류를 감지하는 데 도움을 주는 풍부한 타입 시스템을 사용해요. 타입 오류란 주어진 타입에 대한 잘못된 연산을 말하는데, 예를 들어 String으로 나누기, Integer의 필드에 접근하기, 함수를 인자가 너무 적게(또는 너무 많이) 호출하기 같은 것이에요.

어떤 언어에서는 이런 추가 안전성을 위해 프로그래머가 구문 구조에 타입을 명시적으로 할당해야 하는 대가를 치러야 해요:

var myButton:MySpecialButton = new MySpecialButton(); // As3
MySpecialButton* myButton = new MySpecialButton(); // C++

Haxe에서는 명시적 타입 주석이 필요하지 않아요. 컴파일러가 타입을 추론(infer) 할 수 있기 때문이죠:

var myButton = new MySpecialButton(); // Haxe

타입 추론에 대해서는 타입 추론(Type Inference) 절에서 자세히 다룰게요. 지금은 위 코드의 변수 myButton이 클래스 MySpecialButton인스턴스로 알려진다는 정도로 충분합니다.

Haxe 타입 시스템은 일곱 가지 타입 그룹을 알고 있어요:

  • 클래스 인스턴스(Class instance): 주어진 클래스나 인터페이스의 객체
  • 열거 인스턴스(Enum instance): Haxe 열거형의 값
  • 구조체(Structure): 익명 구조체, 즉 이름이 있는 필드들의 모음
  • 함수(Function): 여러 인자와 하나의 반환으로 이루어진 복합 타입
  • Dynamic: 다른 어떤 타입과도 호환되는 와일드카드 타입
  • 추상(Abstract): 런타임에는 다른 타입으로 표현되는 컴파일 타임 타입
  • 모노모프(Monomorph): 나중에 다른 타입이 될 수 있는 미지의 타입

각 타입 그룹과 서로의 관계는 다음 장들에서 설명할게요.

정의: 복합 타입(Compound Type) — 복합 타입은 하위 타입을 가진 타입입니다. 타입 매개변수를 가진 모든 타입과 함수 타입이 여기에 포함돼요.

출처: Types

본문

타입 시스템의 목적

Haxe의 타입 시스템은 컴파일 타임에 타입 관련 오류를 잡아내는 데 목적이 있어요. 타입 오류는 예를 들어 String 값을 나누는 것, Integer에서 필드에 접근하는 것, 함수를 잘못된 인자 개수로 호출하는 것 등입니다. 이런 오류를 컴파일 단계에서 발견하면 런타임 오류를 크게 줄일 수 있어요.

타입 추론의 편의

많은 언어가 명시적 타입 주석을 요구하지만, Haxe는 타입 추론을 통해 대부분의 경우 타입을 생략할 수 있어요. 컴파일러가 문맥에서 타입을 알아내므로 코드가 간결해지면서도 타입 안전성을 유지합니다.

일곱 가지 타입 그룹

Haxe의 타입 시스템은 일곱 가지 주요 그룹을 인식합니다: 클래스 인스턴스, 열거 인스턴스, 구조체, 함수, Dynamic, 추상, 모노모프. 각 타입은 고유한 성격과 용도를 가지며, 이후 절들에서 하나씩 상세히 설명합니다.

더 알아보기