관리 메뉴

Bbaktaeho

코틀린(Kotlin) 7. 추론 본문

프로그래밍 (Programming)/코틀린 (Kotlin)

코틀린(Kotlin) 7. 추론

Bbaktaeho 2019. 1. 24. 10:39
반응형

추론)

기본 타입 변수를 선언할 때 타입을 지정하지 않으면 초기화되는 값을 기준으로 코틀린 컴파일러가 적합한 타입을 추론해준다.

정수의 경우는 Int 타입, 실수의 경우는 Double 타입으로 추론한다.

1
2
3
4
5
6
7
8
9
10
fun main(args: Array<String>) {
    val a = 10
    val b = 10.0
    val c = 10f
    val d = 10L
    println(a.javaClass)
    println(b.javaClass)
    println(c.javaClass)
    println(d.javaClass)
}
cs

위의 코드를 실행하면

int

double

float

long

으로 출력된다. 변수들을 만들 때 타입을 명시하지 않아도 초기화 값을 기준으로 추론해주기 때문이다. 타입을 명시하지 않더라도 변수들은 추론한 타입으로 정해졌기 때문에 다른 타입의 값으로 변경 불가능하다.

1
2
var c = 10f
//c=10 정수형 리터럴로 변경할 수 없다
cs

참고로 코틀린의 모든 클래스의 조상은 Any 클래스이다. 따라서 변수의 타입을 Any로 지정하면 어느 값이든 저장, 참조할 수 있다.

1
2
3
var c : Any = 10f
= 10
= "슈퍼클래스"
cs

유용해 보이나 내부적으로 새로운 객체가 생성되므로 메모리 낭비와 성능 저하 등 문제가 발생할 수 있다. 참고로 알아두자.

코틀린 컴파일러는 기본 타입 외에 객체나 함수를 사용할 때도 타입을 추론하고 제네릭 타입을 사용하는 배열과 컬렉션에서도 추론한다.

1
2
3
4
5
6
7
8
9
fun main(args: Array<String>) {
    val s = cout2("땡")
    println(s)
}
fun cout2(s : String= s+s+s
/*fun cout2(s : String) : String //위와 같은 함수
{
    return s+s+s
}*/
cs

main()을 보면 변수 s가 함수 cout2()의 리턴 값을 받고 있다. 함수의 리턴 타입은 String이므로 변수 s의 타입도 String이 된다.

또한 cout2()선언부에서 리턴 타입을 지정하지 않았음에도 String으로 추론해준다.


반응형