[Kotlin] 기본 문법 1
코틀린은 ‘;’를 사용하지 않는다.
주석
-
java와 javascript와 동일함
-
// : 한줄 주석
-
/* */ : 여러 줄 주석
- 자바와 다르게 중첩이 허용됨
코틀린은 변수 타입이 뒤에 붙는다
- val temp: Int = 10
- var temp2 = 15;
코틀린은 2가지 변수 선언 방식이 있다.
-
val : 변할 수 없는 상수.
- const
- read-only
- 로컬 변수
- 초기화 이후 변할 수 없는 값
-
var : 일반적인 변수
- Int, Long등의 타입을 지정할 수도, 없을 수도 있음.
함수 생성
-
fun 키워드로 정의
-
함수 몸체가 식(Expression)인 경우 return 생략 가능
- 이런 경우 return type이 추론됨
-
리턴할 값이 없는 경우 Unit(Object)로 리턴함
- Unit은 생략 가능
-
다음과 같은 방식으로 함수를 생성
fun sum(a: Int, b: Int): Int { return a + b }
// 아래와 같이 Type을 정의하여 return을 정의하거나 fun sum(a: Int, b: Int): Int = a + b // 또는 아래와 같이 바로 return도 가능합니다. fun sum(a: Int, b: Int) = a + b
-
한 줄로 표현 가능
fun max(a: Int, b: Int): Int { if (a > b) return a else return b }
fun max(a: Int, b: Int) = if (a > b) a else b
null
-
코틀린의 기본 변수는 null을 가질 수 없다
var a: Int = 15 a = null // 문법상 오류 발생 var b: Int? = null b = null // 정상 수행
위와 같이 물음표를 추가해주었을 때만 null을 명시할 수 있다.
-
nullable : ?
-
nullable 이면 오류 발생 : !!
// ABC 객체의 .a를 return 하지만 abc가 null이면 null을 리턴합니다. fun abc(abc: ABC?): Int? { // ... return abc?.a }
Any
- type을 Any라는 키워드로 지정할 수 있음.
- Any는 Java의 Object에 해당
-
is는 instanceof 같은 행동
fun getStringLength(obj: Any): Int? { if (obj is String) { // 'obj' 가 자동으로 String 타입으로 변환됨 return obj.length } // 'obj' is still of type 'Any' // Type이 String이 아니라서 null을 return 하게 됩니다. return null }
is String이 아님을 나타낼 대는 is앞에 “!” 간단하게 부정할 수 있습니다.
Loop
-
for loop
// Kotlin val arrayList = ArrayList<String>() for (s in arrayList) { Log.d("TAG", "string : " + s) }
while loop
-
다른 언어와 같음
val items = listOf("apple", "banana", "kiwi") var index = 0 while (index < items.size){ println("item at $index is ${items[index]}") index++ }
when
- switch case 상위호환
-
when은 if문을 중첩하여 사용하지 않고 간단하게 Any와 함께 구현 가능
fun main(args: Array<String>) { cases("Hello") // String cases(1) // Int cases(System.currentTimeMillis()) // Long cases(MyClass()) // Not a string cases("hello") // Unknown } fun cases(obj: Any) { when (obj) { 1 -> println("One") "Hello" -> println("Greeting") is Long -> println("Long") !is String -> println("Not a string") else -> println("Unknown") } }
Range
-
in 연산자를 이용하여 숫자 범위를 체크 가능
-
예시
val x = 3 if(x in 1..10){ println("fits in range") }
-
range를 이용한 for loop
// Kotlin for (x in 1..5) { println(x) }
-
코틀린에서는 ranges형태를 if문에서도 사용가능
val array = arrayList<String> array.add("aaa") array.add("bbb") val x = 3 if (x !in 0..array.size - 1) println("Out: array 사이즈는 ${array.size} 요청한 x = ${x}") //위의 출력 값은 // Out: array 사이즈는 2 요청한 x = 3
collection
-
컬렉션도 in으로 loop 가능
-
예시
val items = listOf("apple", "banana", "kiwi") for (item in items){ println(item) }
-
in으로 해당 값이 collection에 포함되는지 체크 가능
-
예시
val items = listOf("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) }