본문 바로가기
프로그래밍 놀이터/Kotlin, Coroutine

[Kotlin Tutorial] Kotlin 기초 #2 - Chap2. Kotlin basics

by 돼지왕 왕돼지 2017. 7. 25.
반응형

 [Kotlin Tutorial] Kotlin 기초 #2 - Chap2. Kotlin basics



참조 : Kotlin in Action

!in, 2, Casting, character range, checked exception, closed inclusive, collection, Comparable, do-while, downto, Exception Handling, Exceptions in Kotlin, expression, For, for each, for-each loop, fun keyword, function, function throw exception, half closed range, IllegalArgumentException, in, in map, index, is, iterate, Iterating over maps, Iterating over numbers: ranges and progressions, Iterating over things:


2.4. Iterating over things: "While" and "For" loops


-

Kotlin 에서 for loop 은 for-each loop 하나밖에 없다.




2.4.1. The “while” loop


-

Java 와 동일




2.4.2. Iterating over numbers: ranges and progressions


-

일반적인 for loop 를 쓰려면 range 를 쓰면 된다.

Range 는 closed, inclusive 하다 즉 아래의 예에서는 1과 10 모두를 포함한다.

val oneToTen = 1..10



-

val hundredToOneWithStep2 = 100 downTo 1 step 2

// 1..100 step -2 와 동일하다



-

Half closed range 를 만드려면 “until” 을 쓰면 된다.

0 until size // size 는 포함되지 않는다

// 0..size-1 과 동일하다




2.4.3. Iterating over maps


-

Character 로도 range 를 만들 수 있다.

‘A’..’F’



-

for ( (letter, binary) in binaryMap ){

    // .. do something

}

Map 은 위와 같이 iteration 돌면 된다.



-

Map 의 key 접근은 literal 방법으로도 가능하다

binaryMap[character] = binary

// binaryMap.put(character, binary); 와 동일



-

List 류도 withIndex 함수를 통해 다음과 같이 iteration 돌릴 수 있다.

for ( (index, element) in list.withIndex() ){ // ( index, element ) 는 pair

    // .. do something

}




2.4.4. Using “in” to check collection and range membership


-

in, !in 을 통해서 range 나 collection 에 내용물이 있는지 확인할 수 있다.

fun isLetter(c: Char) = c in ‘a’..’z’ || c in ‘A’..’Z’

fun isNotDigit(c: Char) = c !in ‘0’..’9’



-

Comparable interface 를 구현한 class 는 이 in, !in 을 사용하는 range 안에 들어갈 수 있다.

"Kotlin" in "Java".."Scala" // true




2.5. Exceptions in Kotlin


-

기본은 Java 와 동일하다.

throw 는 expression 이기 때문에 다음과 같이 쓸 수 있다.

val percentage = 

    If (number in 0..100)

        number

    else

        throw IllegalArgumentException(“A percentage must be between 0 and 100 : $number”) // new 필요없음




2.5.1. “try”, “catch”, and “finally”


-

기본은 Java 와 동일.

Kotlin 에선 function 정의에 throws 문으로 check exception 을 만드는게 없다.


cf) 실제 exception 이 발생하는 케이스 (대표적으로 IOException) 이 거의 없기 떄문에 checked exception 으로 exception 을 강제하지 않는다.

그리고 필요한 경우, 즉 실제 exception 이 왕왕 발생할 수 있는 케이스에만 programmer 가 선택해서 catch 를 하면 된다는 것이다.

Java 의 checked exception 을 사용하는 함수를 호출하는 경우도 마찬가지로 catch 는 optional 이다.

catch 안 해도 compile 은 잘 된다.



-

Java7 의 try-with-resources 는 지원하지 않는다.

Library function 에 있다.

try (InputStream in = new FileInputStream(inFile); OutputStream out = new FileOutputStream(outFile)){

...

} catch(IOException ex){


}

// in, out 자동으로 종료됨




2.5.2. “try” as an expression


-

try 도 expression 이다. 단 curly brace 는 항상 필요하다

fun readNumber(reader: BufferedReader){

    val number = try{

        Integer.parseInt(reader.readLine())

    } catch ( e: NumberFormatException ){

        return

    }

    println(number)

}




2.6. Summary

-

fun keyword 는 function 설정에 사용된다. val 과 var 은 read-only 와 mutable variable 정의에 사용한다.



-

String template 은 지저분한 string 조합을 방지해준다.

$변수이름 혹은 ${ 변수 } 형태로 쓰면 된다.



-

Kotlin 에서는 Value object class ( 데이터만 가진 class ) 들을 쉽게 표현 가능하다.



-

if 는 return 값이 있는 expression 이다.



-

when 구문은 switch 와 비슷하지만 더 강력하다.



-

is 로 type check 를 하면 명시적으로 casting 할 필요가 없다. 

Smart cast 가 알아서 해준다.



-

for, while, do-while loop 은 java 와 비슷하다.

그러나 for 문은 더 편리하다. 특히 map 을 iterate 하거나, collection 을 index 와 함께 iterate 하기 좋다



-

1..5 와 같은 range 를 만드는 것이 간단하다.

그리고 range 를 사용하면 편리한 in, !in 을 사용할 수도 있다.



-

Exception handling 은 java 와 매우 유사하다.

단, Kotlin 은 exception 을 function 에 throw 표기할 필요가 없다.





반응형

댓글