일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 슈퍼마리오
- 게임기어
- Apple II
- mobilesuit
- 닌텐도
- fpga
- snes
- 닌텐도스위치
- 티스토리챌린지
- 게임보이
- 새턴
- MSX
- Saturn
- PC엔진
- analogue
- 모빌슈트
- Game Gear
- 컨트롤러
- mister
- ensemble
- 슈퍼패미컴
- 메가드라이브
- 패미컴
- 앙상블
- ps4
- 3DS
- GOG
- 오블완
- 메트로이드
- 건담
- Today
- Total
Just a Blog
개인적인 코틀린(Kotlin) 정리 (1) - 구문, var/val, 타입추론 본문
1. 구문
(1) expression 가능
값을 평가/계산하는 expression을 구문에 사용할 수 있다. 'a * a'는 순수히 a * a 값을 나타내는 표현(expression)이기 때문에 에러가 나지 않는다(대신 값을 evaluation하는 것 외에 다른 일은 일어나지 않는다).
fun main(args: Array<String>) {
var a = 1
a * a
println(a)
}
이런 특성으로 Kotlin에서는 다음과 같이 함수(function)을 expression으로 선언할 수도 있게 된다.
fun square(s:Int) = s * s
(2) 각 구문에 세미콜론(;)은 생략 가능하다 (써도 그만 안써도 그만)
var a = 1
println(a)
(3) 구문 블럭
Java와 동일하게 '{', '}'를 양쪽에 사용해서 구문들을 블럭으로 묶을 수 있다.
if (a > 3) {
...
}
이러한 블럭은 변수에 함수를 할당할 때도 사용할 수 있다.
val exp = { println("A"); println("B") }
2. var/val
(1) var
프로그램 내에서 동적으로 값이 변하는(mutable) 지시자(identifier)에는 'var'를 사용하여 선언한다(아마도 'variable'(변수)의 약자일 듯). Java에서 일반적으로 사용하던 변수와 유사하다.
var a = 1
a = a + 11
(2) val
프로그램 내에서 한번 할당되고 변하지 않을 대상을 지정하는 지시자에는 'val'을 사용하여 선언한다(아마도 'value'(값)의 약자일 듯).
val a = 23
값이 변하지 않는다고 해서 Java의 상수와 동일하다고 생각하면 안된다. val 지시자로 지정된 변수는 컴파일 타임에 지정되지 않고 프로그램이 실행될 때 지정될 수 있기 때문이다. 예를 들어 다음의 코드에서 val로 지정된 변수 'text'는 프로그램 실행 후 사용자가 어떤 콘솔 입력을 해야 그 값이 정해진다.
fun main(args: Array<String>) {
print("input:")
val text = readLine()!!
println(text)
}
3. 타입추론(type inference)
(1) var 혹은 val로 지시한 변수에 값을 직접 입력하거나 문법적으로 타입을 예상할 수 있는 경우, 타입을 명시할 필요가 없으며 컴파일러가 자동으로 타입을 추론한다.
var a = 1 (지정된 '1'이라는 값을 보고 변수 a를 Int로 추론)
val num = a * 10 (지정된 a * 10 값의 타입을 보고 변수 num을 Int로 추론)
val t = readLine()!! (readLine() 함수의 리턴 타입을 보고 변수 t를 String으로 추론)
(2) 값을 지정하지 않으면 컴파일러가 타입을 추론할 수 없기 때문에 그 때는 타입을 명시해야 한다.
var x (x의 타입을 추론할 수 없다)
var x:Int? = null (':Int?'를 명시함으로써 x가 Int 타입의 null임을 알 수 있다)
<<참고>>
var x = null ((Kotlin 1.3 기준) x의 구체적 타입을 추론할 수 없을 것 같지만 x를 Nothing 타입으로 추론한다)