정적 타입 시스템: 컴파일 시점의 안전성 보장
Cangjie 언어는 정적 타입 시스템을 채택하여 모든 변수, 함수, 표현식의 타입이 컴파일 시점에 결정됩니다. 이는 다음과 같은 이점을 제공합니다:
| 이점 | 설명 |
|---|---|
| 타입 안전성 | 타입 불일치로 인한 런타임 오류 사전 방지 |
| 유지보수성 향상 | 명확한 인터페이스 계약과 조기 오류 발견 |
| 성능 최적화 | 컴파일러의 타입 기반 최적화 가능 |
| 개발 도구 지원 | 정확한 자동 완성 및 리팩토링 기능 |
Cangjie 언어의 기본 데이터 타입은 다음과 같이 세분화되어 있습니다:
| Cangjie 타입 | 설명 |
|---|---|
| Int8, Int16, Int32, Int64 | 다양한 비트 너비의 정수 타입 |
| Float32, Float64 | 단정밀도 및 배정밀도 부동소수점 |
| String | 문자열 타입 |
| Bool | 불리언 타입 |
타입 불일치 시 컴파일 오류가 발생합니다:
let numberValue: Int32 = "123" // ❌ 컴파일 오류: 타입 불일치
타입 추론: 효율적인 개발 경험
Cangjie는 강력한 타입 추론 기능을 제공하여 코드 작성을 간소화합니다.
1. 변수 정의 시 타입 추론
초기값 할당 시 타입을 자동으로 추론합니다:
let numericValue = 123 // Int64로 추론
var textValue = "hello" // String으로 추론
let flagValue = true // Bool로 추론
2. 함수 반환값 타입 추론
함수 본문의 마지막 표현식을 기반으로 반환 타입을 추론합니다:
func sum(x: Int, y: Int) {
x + y
}
복잡한 함수의 경우 명시적 타입 선언을 권장합니다.
3. 제네릭 매개변수 추론
제네릭 함수 사용 시 타입 매개변수를 자동으로 추론합니다:
func transform(input: Array<T>, converter: (T) -> R) -> Array<R> {
// 변환 로직
}
let result = transform([1, 2, 3]) { element -> element.toString() }
// Array<String> 타입으로 추론
Cangjie 타입 추론 지원 현황
| 시나리오 | 추론 지원 | 비고 |
|---|---|---|
| 변수 초기화 | ✅ | 초기값 할당 시 추론 |
| 함수 반환값 | ✅ | 단순 함수에서 추론 |
| 제네릭 매개변수 | ✅ | 자동 추론 지원 |
| 람다 표현식 | 🟡 | 컨텍스트에 의존적 |
| 클래스 멤버 변수 | ❌ | 명시적 선언 필요 |
실전 예제: 타입 추론 활용
func getFirstEvenNumber(numbers: Array<Int>) -> Int? {
for number in numbers {
if number % 2 == 0 {
return number
}
}
return nil
}
func main() {
let numberList = [1, 3, 5, 8, 9, 10]
let firstEven = getFirstEvenNumber(numberList)
when (firstEven) {
is Int -> print("첫 번째 짝수: ${firstEven}")
else -> print("짝수를 찾을 수 없음")
}
}
이 예제에서:
- numberList는 Array
로 추론 - firstEven은 Int? (널 가능 타입)로 추론
- when 표현식이 추론된 타입을 기반으로 패턴 매칭 수행