
var: 일반적인 변수, 변경 가능
val: 선언시에만 초기화가 가능한 변수로 중간에 값 변경 불가능
Kotlin은 기본 변수에서 null을 허용하지 않음 - null pointer exception 원천적으로 차단
? 예약어 사용시에는 nullable 변수로 선언 가능
var a: Int? = null
암시적 형변환 지원하지 않음
명시적 형변환: 변환될 자료형을 개발자가 직접 지정
암시적 형변환: 변수를 할당할 시 자료형을 지정하지 않아도 자동으로 형변환
fun main() {
var a: Int = 54321
var b: Long = a.toLong()
}
listOf: 읽기전용 리스트 - add, remove 사용 불가능
MutableList: 읽기/쓰기 가능한 리스트 - add, remove 사용가능
서로 형변환 가능
변수나 함수들을 선언할 때나 연산이 이루어 질 때 자료형을 코드에 명시하지 않아도 자동으로 자료형 추론 가능
fun main() {
var a = 123 // int 형
var b = 1234L // long 형
var e = 0xABCD // 16진수
var f = 0b0101010 // 2진수
var g = true // boolean
}
fun main() {
print(add(5,6,7))
}
fun add(a: Int, b: Int, c: Int): Int {
return a+b+c
}
단일 표현식 함수
fun add(a: Int, b: Int, c: Int) = a + b + c
타입 추론이 가능하므로 반환형 생략 가능
if 문은 다른 언어의 문법과 비슷
if(a>10) {
println("big")
1
} else {
println("small")
2
}
switch문은 when으로 사용
fun main() {
val value = 3
dowhen(value)
}
fun doWhen(a: Int) {
when(a) {
1 -> println("1")
2 -> println("2")
else -> println("3")
}
}
kotlin에서 if문과 when문은 리턴값을 가질 수 있다. (대신 삼항연산자 지원x)
조건문의 블럭 내에 여러 줄의 식이 있을 경우 리턴값은 마지막줄
while(a < 5) {
println(a++
}
최초 한번은 조건 없이 do 에서 구문 실행 후 while로 조건 체크하면서 반복
do {
print(a++)
}while(a < 5)
for(i in 0..9) { //0~9까지 반복
print(i)
}
for(i in 0..9 step 3) { //0~9까지 3단위로 반복
print(i)
}
for(i in 9 downTo 0) { //9에서 0으로 1씩 감소 하면서 반복
print(i)
}
다중 반복문에서 break나 continue가 적용되는 반복문을 label을 통해 지정할 수 있는 기능
loop@for(i in 1..10) {
for(j in 1..10) {
if(i == 1 && j == 2) break@loop
}
}
loop가 달린 반복문 기준으로 break
이름이 없어도 함수 역할을 하는 익명 함수
{ x, y -> x + y }
val multi = {x : Int, y: Int -> x * y}
println(multi(10,20))
val multi2: (Int, Int) -> Int = {x: Int, y: Int ->
println("x*y")
x*y
} // 마지막 표현식 반환
multi2: 변수를 함수처럼 사용 가능
(Int, Int) -> Int: 람다식의 선언 자료형은 람다식 매개변수에 자료형이 명시된 경우 생략 가능
{x: Int, y: Int: 선언 자료형이 명시되어 있으면 생략 가능
x * y}: 함수의 내용과 결과 반환, 표현식이 여려 줄인 경우 마지막 표현식 반환