LowType은 다양한 코드 영역에서 타입 검사를 지원합니다.
메서드 인자 및 기본값
-
타입 정의: 메서드 인자에
greeting: String과 같이 타입을 명시하여 런타임에 타입 검사를 수행합니다. -
기본값:
greeting: String | 'Hello'와 같이 파이프(|) 기호를 사용하여 타입 정의와 함께 기본값을 제공할 수 있습니다. 인자가nil일 경우 기본값이 사용됩니다.
열거형 타입
-
배열:
Array[String]과 같이 배열 요소의 타입을 지정합니다. -
해시:
Hash[String => Integer]와 같이 키와 값의 타입을 지정합니다.
반환 값
-
타입 정의: 메서드 파라미터 뒤에
-> { String }구문을 추가하여 반환 값의 타입을 정의합니다. 반환 값이 정의된 타입과 다르면 예외가 발생합니다. -
Nilable 반환:
-> { String | nil }과 같이nil을 허용하는 반환 타입을 정의할 수 있습니다. -
다중 라인 정의: 복잡한 반환 타입 정의를 위해 여러 라인에 걸쳐
-> { T }구문을 사용할 수 있습니다.
인스턴스 변수
attr_reader, attr_writer, attr_accessor와 유사하게 type_reader, type_writer, type_accessor를 사용하여 인스턴스 변수에 타입을 정의하고 검사합니다.
-
type_reader name: String:@name변수의 값을 읽고 타입 검사. -
type_writer name: String:@name변수의 값을 설정하고 타입 검사. -
type_accessor name: String:@name변수의 값을 읽고 설정하며 타입 검사. -
기본값 지원:
type_accessor name: String | 'Cher'와 같이 기본값을 지정할 수 있습니다. -
다중 인자:
type_accessor name: String, age: Integer와 같이 여러 인스턴스 변수를 한 번에 정의할 수 있습니다.
지역 변수
-
type()메서드를 사용하여 런타임에 지역 변수에 타입을 정의합니다. 예:my_var = type MyType | fetch_my_object(id: 123). -
type()메서드와 열거형(Array[],Hash[])을 함께 사용하려면using LowType::Syntax를 포함해야 합니다.
구문 및 성능
-
Array[T]/Hash[T]: 타입 표현식 컨텍스트에서 열거형을 나타내며, 새 인스턴스 생성 시에는Array.new또는[]를 사용합니다. -
|(유니온 타입 / 기본값): 여러 타입을 허용하거나 기본값을 정의하는 데 사용됩니다. -
-> { T }(반환 타입): 메서드 정의 직후에 배치되어 반환 타입을 명시하며, 클래스 로드 시 한 번만 평가됩니다. -
value(T)(값 표현식): 타입을 값으로 취급해야 할 때 사용합니다. -
성능: 대부분의 타입 표현식은 클래스 로드 시 한 번만 평가되어 효율적이지만,
type()메서드를 통한 지역 변수 타입 검사는 런타임에 발생하여 성능에 영향을 줄 수 있습니다.
설정 및 통합
-
LowType.configure블록을 통해error_mode,output_mode,deep_type_check등 다양한 옵션을 설정할 수 있습니다. -
Sinatra와 같은 웹 프레임워크와의 통합을 지원하며, RuboCop 설정을 통해
LowType구문과의 충돌을 피할 수 있습니다.