한 걸음 두 걸음
02 코틀린 기본 문법 본문
출처 : 인프런 새차원님의 kotlin 강의입니다.
https://www.inflearn.com/course/%EC%BD%94%ED%8B%80%EB%A6%B0-%EA%B0%95%EC%A2%8C-%EC%83%88%EC%B0%A8%EC%9B%90/lecture
1. 패키지
1.1 package
package demo
코드 맨 윗줄에 작성하며, 디렉토리 경로와 상관없습니다.
1.2 import
import의 경우 java와 같습니다.
2. 함수정의
2.1 func키워드 (리턴타입 명시)
fun 키워드를 사용하여 정의합니다.
fun sum(a: Int, b: Int) : Int {
return a+b
}
여기서 sum(a: Int, b: Int) : Int(리턴타입) 이 이렇게 명시되어있습니다.(생략가능합니다)
2.2 func키워드 (리턴타입 없음, body작성)
body가 없는 경우 리턴을 생략하고 =를 두어 바디를 따로 작성하지 않습니다.
fun sum(a:Int, b:Int) = a+b
2.3 Unit
리턴할 값이 없는 경우에 사용하는 void 개념입니다.
fun sum(a: Int, b: Int) :Unit {
println(a+b)
}
여기서 return타입을 명시하지 않는 경우 자동으로 Unit인 것으로 간주됩니다.
fun sum(a: Int, b: Int) {
println(a+b)
}
3. 지역변수
val이나 var을 사용합니다.
val은 읽기 전용 변수 이며,
var은 초기화시키고 변수 값을 바꾸는 것까지 모두 가능합니다.
3.1 val
final과 같은 기능을 하기 때문에, 한 번만 할당가능하며 초기화 시 값 할당이 병행되어야합니다.
val a: Int = 1
val b = 2
val c: Int로 두면 컴파일 오류가 생깁니다.
a = 10으로 하면 읽기 전용 변수를 쓰기로 사용하려는 접근이므로 컴파일 오류가 생깁니다.
3.2 var
값을 할당하면 그에 맞는 자료형이 알아서 설정됩니다.
var x = 5
x ++
4. 주석
주석은 //
와 /**/
를 사용하는 것이 동일합니다.
특이한 점은 주석을 중첩시킬 수 있다는 것입니다.
주석 내에 또 다른 주석처리가 가능합니다.
5. 문자열
java에서는 문자열을 합칠 떄 +나 StringBuilder를 활용하여 보다 효율적인 연산을 구현해야했지만 kotlin에서는$
를 사용하여 보다 손쉽게 접근합니다.
var a = 1
var string = "a is $a"
이렇게 $a로 적으면 a값이 그대로 들어가게됩니다.
var string2 = "${string.replace("is", "was")} but it change to 2 "
위와같은 연산을 하는 경우에도 연산 후에 결과값이 자동으로 toString화되어 입력됩니다.
6. 조건문
if-else문을 활용하는 방법이 같습니다.
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
7. nullable
kotlin은 null에 민감하기 때문에, 값이 null일 수 있는 경우를 명시해주어야합니다.?
를 활용하여 표시해줄 수 있습니다.
7.1 리턴값이 null일 수 있는 경우
fun sum(): Int?{
}
7.2 변수가 null일 수 있는 경우
nullable 변수에 접근하기 위해서는 아래와 같이 반드시 null값 여부를 체크하고 사용해야합니다.
그렇지 않으면 컴파일 오류가 발생합니다.
fun print(a : String, b : String){
val x : Int? = parseInt(a)
val b : Int? = parseInt(b)
//이 부분 만들어주지 않으면 컴파일 오류 발생합니다.
//null값 여부 체크
if( x != null && y != null){
println(x * y) //체크 후 접근가능
}
}
8. Any 자동 타입 변환
Any
를 활용하여 자동으로 타입이 변환되게 할 수 있습니다.
func length( a : Any ): Int?{
if( a is String) {
return a.length
}
return null
}
위와 같이 매개변수 a로 무엇이든 입력하면 그에 맞춰 형변환되어 받을 수 있으며,a is String
을 사용해 매개변수 종류별로 다른 동작을 하도록 만들 수 있습니다.
9. while
java와 완전히 동일합니다.
val items = listOf{"apple", "banana", "kiwi"}
val index = 0
while (index < items.size){
println("item at $index is ${items[index]}")
index++
}
10. when
java의 switch와 비슷합니다.
switch의 경우 하나의 자료형만 받을 수 있었는데 when의 경우 그런 제약이 없습니다.
fun describe(a : Any) String {
when ( a ){
1 return "One"
"Hello" return "Greeting"
is Long return "Long"
!is String return "Not a string"
else return "Ubknown"
}
}
body 없이 작성하면
fun describe(a : Any) String =
when ( a ){
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Ubknown"
}
11. range
in
을 활용하여 범위를 체크합니다.
for (x in 1..5){
print(x)
}
for문 뿐만 아니라 if문에서도 사용 가능합니다.
val x = 3
if(x in 1..10) {
println("in range")
}
12. Collections
12.1 For-Each 문처럼 사용가능합니다.
val items = listOf{"apple", "banana", "kiwi"}
while (a in items){
println("item at $index is ${items[a]}")
}
12.2 Set.contain처럼 사용할 수 있습니다.
val items = setOf{"apple", "banana", "kiwi"}
when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is also fine")
}
12.3 람다식을 사용하여 filter 또는 map 연산을 할 수 있습니다.
val fruits = listOf("banana","avocado","apple","kiwi")
//it에는 fruits의 요소들이 들어있습니다.(iterator)
fruits
.filter { it.startsWith("a") } //a가 포함되어있는 요소로 필터링하고
.sortedBy {it } // it를 오름차순으로 정렬시킵니다.
.map( it.toUpperCase() } // 모두 대문자로 바꾼 후
.forEach { println(it) } //남은 요소를 모두 출력합니다.
'Language > Kotlin' 카테고리의 다른 글
Kotlin 07 ] 클래스와 상속 (0) | 2019.05.20 |
---|---|
Kotlin ] 06 Package, Return and Jumps (0) | 2019.05.20 |
Kotlin 코틀린 ] 05 Control Flow (0) | 2019.05.20 |
03. kotlin basic types (0) | 2019.04.28 |
01. 코틀린을 배워야하는 이유 (0) | 2019.04.27 |