코틀린의 기본 문법
코틀린 기본문법에서 확인이 가능하다.
시작하기
JDK를 설치 후에 인텔리 j를 이용하여 새로운프로젝트 - JAVA - kotlin 해서 시작할 수 있음.
예제 코드
fun main(args: Array<String>) {
println("HelloWorld!")
println("HelloWorld!")
println("HelloWorld!")
println("HelloWorld!")
println("HelloWorld!")
}
함수정의
- 함수는 fun 키워드로 정의
fun sum(a: Int, b: Int) : Int {
return a + b
}
- 함수 몸체가 식(Expression)인 경우 return 생략 가능
- 이런경우 return type이 추론됨
fun sum(a: Int, b:Int) = a + b
리턴값 없는 함수
- 리턴 할 값이 없을 경우 Unit(Object) 으로 리턴 함
- Unit은 Java에서 void 리턴 역할
fun printKotlin() : Unit {
println("Hello kotlin")
}
- Unit은 생략 가능
fun printKotlin() {
println("hello kotlin")
}
지역 변수 정의
- val : 읽기 전용 변수
- 값의 할당이 1회만 가능, Java의 final과 유사
val a: Int = 1 // 즉시 할당
val b = 2 // Int type 추론
val c: Int // 컴파일 오류, 초기화가 필요함
c= 3 //읽기 전용
- var: Mutable 변수
var x = 5
x += 1
- 주석은 비슷하다.
- 블럭 주석이 중첩이 가능하다
문자열 템플릿
-String Interpolation(문자열 보간법)
var a = 1
val s1 = "a is $a"
a = 2
val s2 = "${s1.replace("is","was")}, but now is $a"
조건문
fun maxOf(a: Int, b:Int): Int {
if(a > b) {
return a
} else {
return b
}
}
- 조건식으로 사용 가능
fun maxOf(a:Int, b:Int) = if (a > b) a else b
nullable
- 값이 null이 될 수 있는 경우 타입에 nullable 마크를 명시해야함.
fun parseInt(str:String): Int? {
// 정수가 아닌 경우 null을 리턴
}
- nullable 타입의 변수를 접근 할 때는 반드시 null 체크를 해야함.
- 그렇지 않으면 컴파일 오류가 발생됨
fun printProduct(arg1: String, arg2: String) {
val x : Int? = parseInt(arg1)
val y : Int? = parseInt(arg2)
if(x != null && y != null) {
println(x*y)
} else {
println("either '$arg1' or '$arg2' is not a number")
}
}
자동 타입 변환
- 타입 체크만 해도 자동으로 타입 변환이 됨
fun getStringLength(obj: Any):Int? {
if(obj is String) {
//obj가 String으로 바로 형변환이 됨
return obj.length
}
return null
}
#When expression
fun describe(obj: Any): String =
when(obj) {
1 -> "One"
"Hello" -> "Greetin"
is Long -> "Long"
!is String -> "Not a String"
else -> "unknown"
}
// switch case 문과 비슷하지만 조건식에 아무거나 와도 상관없음. 강력한기능
ranges
- In 연산자를 이용해서 숫자 범위를 체크 가능
val x = 3
if(x in 1..10) {
println("fits in range")
}
-range를 이용한 for loop
for(x in 1..5) {
print(x)
}
collections
- 컬렉션도 in으로 loop 가능
val items = listOf("apple", "banana", "kiwi")
for(item in items) {
println(item)
}
- in으로 해당 값이 collection에 포함되는지 체크 가능
val items = setOf("apple","banana","kiwi")
when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}
-람다식을 이용해서 컬렉션에 filter, map 등의 연산 가능
val fruits = listOf("banana","avocado","apple","kiwi")
fruits
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach{println(it)}