코틀린 기본 문법
reference by Kotlin 공식 문서
Kotlin 구조
1
2
3
4
5
6
7
8
9
package kotlinproject
fun main(){
println("Hello World")
}
.kt 확장자를 가진다.
package, import 선언부는 자바와 동일
함수의 fun 키워드로 시작한다.
리턴 타입은 함수명() 뒤쪽에 명시
코틀린은 문장의 끝을 세미콜론으로 명시하지 않음
변수 타입, 정의 및 초기화
데이터 타입에 관계 없는 상수는
val
, 변수는var
로 선언데이터 타입을 명시하지 않아도 할당 해주는 값에 따라 자동으로 결정됨
val
는 자바와 final
과 같으므로 다른 값으로 재 할당할 경우 위와 같이 오류가 난다.
위의 경우는 var
키워드로 num 변수를 int 형으로 타입을 정하였는데,
아래에서 String으로 타입을 재할당 시도를 하여서 컴파일 오류가 나는 경우
변수 정의
코틀린에서 변수를 선언할 때 초기화를 하지 않고 정의만 할 경우 아래와 같이 타입을 명시해줘야 함
변수 초기화
초기화는 아래와 같이 타입에 맞는 값을 할당해주면 된다
함수 정의
두 개의 Int 타입 파라미터를 전달 받아 Int 타입을 반환하는 함수
1
2
3
4
5
fun sum (a: Int, b: Int) : Int{
return a+b
}
직접 값을 할당해주는 함수
1
2
3
4
5
6
7
8
9
10
fun sum(a: Int, b: Int) = a + b
fun main(){
var a = 10
var b = 20
println(sum(a,b))
}
리턴 값이 없는 함수는 Unit (자바의 void)으로 정의
1
2
3
4
5
6
7
8
9
10
11
12
fun print(a: Int, b: Int): Unit{
println("$a + $b = ${a+b}")
}
fun main(){
var a = 10
var b = 20
print(a,b)
}
Unit 리턴 타입은 생략 가능
1
2
3
4
5
fun print(a: Int, b: Int){
println("$a + $b = ${a+b}")
}
스트링 템플릿
자바에서 String 클래스가 가지고 있는 format 메서드와 유사한 기능을 한다.
1
2
3
4
5
6
7
8
9
10
11
12
fun main() {
var a = 1
val str1 = "a is $a"
a = 2
var str2 = "${str1.replace("is", "was")}, but now is $a"
println(str1)
println(str2)
}
조건문
조건문 사용법은 자바와 동일
1
2
3
4
5
6
7
8
fun max(a: Int, b: Int): Int{
if(a > b)
return a
else
return b
}
하지만 코틀린에서는 아래와 같이 표현식으로 나타낼 수 있음
1
2
3
fun max(a: Int, b: Int) = if (a > b) a else b
NULL
Null값을 허용하는 경우 타입 뒤에 ? 를 명시해주면 된다.
1
2
3
4
5
fun parseInt(str :String) : Int? {
return str.toInt() // 리턴 타입이 기본적으로 Int형이고, null일 수 도 있음
}
자동 형 변환
반대의 경우
반복문
for-each문
인덱스를 사용하는 경우
While문
When 표현식
when 표현식은 자바의 switch 문과 유사하다
Range
1
2
3
4
5
6
7
8
9
10
11
// Java
for(int i=0; i<10; i++){
...
}
// Kotlin
for(i in 0..x){ //0부터 1씩 증가하면서 x보다 작거나 같을 때까지
...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Java
for(int i=0; i<10; i+=2){
...
}
// Kotlin
for(i in 0.. 9 step 2){ // 0 ~ 9까지 2씩 증가
...
}
for(i in 9 downTo 0 step 2){ // 9 ~ 0까지 2씩 다운
}
인덱스가 특정 범위를 벗어 났는지 확인하려면 아래와 같이 ! 연산자를 in과 함께 사용