일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- go
- Android
- Kotlin
- 자바
- node.js
- var
- ListView
- 파이썬
- 코틀린
- adapter
- Overloading
- 배열
- Java
- 리스트 뷰
- 자바스크립트
- 안드로이드
- js
- 노트북 추천
- 노트북
- Array
- 패널 교체
- 연산자
- 함수
- golang
- HP
- 싱글 스레드
- Python
- 오버로딩
- as?
- javascript
Archives
- Today
- Total
Bbaktaeho
코틀린(Kotlin) 7. 추론 본문
반응형
추론)
기본 타입 변수를 선언할 때 타입을 지정하지 않으면 초기화되는 값을 기준으로 코틀린 컴파일러가 적합한 타입을 추론해준다.
정수의 경우는 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 c = 10 c = "슈퍼클래스" | 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으로 추론해준다.
반응형
'프로그래밍 (Programming) > 코틀린 (Kotlin)' 카테고리의 다른 글
코틀린(Kotlin) 9. 연산자와 연산자 오버로딩(1) (0) | 2019.01.25 |
---|---|
코틀린(Kotlin) 8. 입력과 출력 (0) | 2019.01.24 |
Kotlin(코틀린) 6. 다차원 배열 (1) | 2019.01.24 |
Kotlin(코틀린) 5. 배열 (0) | 2019.01.24 |
Kotlin(코틀린) 4. 변수와 타입 (0) | 2019.01.24 |