-
2. 코틀린에서 코드를 제어하는 방법Kotlin/자바 개발자를 위한 코틀린 입문 2023. 7. 6. 14:26
5. 코틀린에서 제어문을 다루는 방법
1. if문
- Java와 동일
2. Expression과 Statement
- Java에서 if-else는 Statement이지만, Kotlin에서는 Expression 이다.
ㆍStatement : 프로그램의 문장, 하나의 값으로 도출되지 않는다.
ㆍExpression : 하나의 값으로 도출되는 문장
- java : if 문을 하나의 값으로 취급하지 않는다. - Statement
- java : 삼항 연산자는 하나의 값으로 취급한다. - Expresstion 이면서 Statement
- Kotlin 에서는 if-else를 expression으로 사용할 수 있기 때문에 3항 연산자가 없다.
- 간단한 TIP
ㆍ어떠한 값이 특정 범위에 포함되어 있는지, 포함되어 있지 않은지
// java if (0 <= score && score <= 100) {
// kotlin if (score in 0..100) {
3. switch와 when
// kotlin when (값) { 조건부 -> 어떠한 구문 조건부 -> 어떠한 구문 else -> 어떠한 구문 }
- 조건부에는 어떠한 expression이라도 들어갈 수 있다. (ex. is Type)
fun startsWithA(obj: Any): Boolean { return when (obj) { is String -> obj.startsWith("A") // smart cast else -> false } }
- 여러개의 조건을 동시에 검사할 수 있다 (, 로 구분)
fun judgeNumber(number: Int) { when (number) { 1, 0, -1 -> println("어디서 많이 본 숫자이다.") else -> println("1, 0, -1이 아닙니다.") } }
- 값이 없을 수도 있다 - early return 처럼 동작
fun judgeNumber2(number: Int) { when { number == 0 -> println("주어진 숫자는 0입니다.") number % 2 == 0 -> println("주어진 숫자는 짝수입니다.") else -> println("주어진 숫자는 홀수 입니다.") } }
- when 은 Enum Class 혹은 Sealed Class 와 함께 사용할 경우, 더욱더 진가를 발휘한다.
정리
- if / if - else / if - else if - else 모두 Java와 문법이 동일하다
- 단 Kotlin에서는 Expression으로 취급된다.
ㆍ때문에 Kotlin에서는 삼항 연산자가 없다.
- Java의 switch는 Kotlin에서 when으로 대체되었고, when은 더 강력한 기능을 갖는다.
6. 코틀린에서 반복문을 다루는 방법
1. for-each문
// java List<Long> numbers = Arrays.asList(1L, 2L, 3L); for (long number : numbers) { System.out.println(number); }
// kotlin val numbers = listOf(1L, 2L, 3L) for (number in numbers) { println(number) }
2. 전통적인 for 문
// java // 2. for(int i = 1; i <= 3; i++) { System.out.println(i); } for(int i = 3; i >= 1; i--) { System.out.println(i); } // 3. for (int i = 1; i <= 5; i += 2) { System.out.println(i); }
// kotlin // 2. for (i in 1..3) { println(i) } for (i in 3 downTo 1) { println(i) } // 3. for (i in 1..5 step 2) { println(i); }
3. Progression 과 Range
- .. 연산자 : 범위를 만들어 내는 연산자
ㆍ1..3 : 1부터 3의 범위
ㆍ3 downTo 1 : 시작값 3, 끝값 1, 공차가 -1인 등차수열
ㆍ1..5 step 2 : 시작값 1, 끝값 5, 공차가 2인 등차수열
- downTo 와 step도 함수이다! (중위 호출 함수)
ㆍ변수.함수이름(argument) 대신 변수 함수이름 argument
- 한 줄요약 : Kotlin에서 전통적인 for문은 등차수열을 이용한다!
4. while 문
- while 문과 do-while문은 java와 같다.
정리
- for each 문에서 Java는 : Kotlin은 in을 사용한다.
- 전통적인 for문에서 Kotlin은 등차수열과 in을 사용한다.
- 그 외 for문 문법은 모두 동일하다
- while 문과 do while 문은 동일하다.
7. 코틀린에서 예외를 다루는 방법
1. try catch finally 구문
- try catch 구문은 문법적으로 동일하다!
- try catch finally 역시 동일하다.
2. Checked Exception 과 Unchecked Exception
- Kotlin에서는 Checked Exception과 Unchecked Exception을 구분하지 않는다.
ㆍ모두 Unchecked Exception 이다.
3. try with resources
- Kotlin에서는 try with resources 구문이 없다.
ㆍ대신 use 라는 inline 확장함수를 사용해야 한다.
정리
- try catch finally 구문은 문법적으로 완전히 동일하다.
ㆍkotlin에서는 try catch 가 expression이다.
- kotlin에서 모든 예외는 Unchecked Exception 이다.
- kotlin에서는 try with resources 구문이 없다. 대신 코틀린의 언어적 특징을 활용해 close를 호출해준다.
8. 코틀린에서 함수를 다루는 방법
1. 함수 선언 문법
fun max(a: Int, b: Int) = if (a > b) a else b
- =을 사용하는 경우 반환 타입 생략가능
- block {} 을 사용하는 경우에는 반환 타입이 Unit이 아니면, 명시적으로 작성해주어야 한다.
- 함수는 클래스 안에 있을 수도, 파일 최상단에 있을 수도 있다.
ㆍ또한, 한 파일 안에 여러 함수들이 있을 수도 있다.
2. default parameter
fun repeat( str: String, num: Int = 3, useNewLine: Boolean = true ) { for (i in 1..num) { if(useNewLine) { println(str) }else { print(str) } } }
- 밖에서 파라미터를 넣어주지 않으면 기본값을 사용하자!
repeat("Hello World", useNewLine = false)
- 매개변수 이름을 통해 직접 지정
ㆍ지정되지 않은 매개변수는 기본값 사용
3. named argument (parameter)
printNameAndGender(name = "박현민",gender = "male")
- builder를 직접 만들지 않고 builder의 장점을 가지게 된다.
- Kotlin에서 Java 함수를 가져다 사용할 때는 named argument를 사용할 수 없다.
ㆍ코틀린에서 Java 코드를 쓸 때, JVM 상에서 Java가 바이트 코드로 변환됐을 때 parameter 이름을 보존하고
있지 않다 보니깐 코틀린에서는 그 이름을 통해서 가져오는 named argument를 쓸 수 없다.
4. 같은 타입의 여러 파라미터 받기 (가변인자)
fun printAll(vararg strings: String) { for (str in strings) { println(str) } }
printAll("A", "B", "C") val array = arrayOf("A", "B", "C") printAll(*array)
- 배열을 바로 넣는 대신 스프레드 연산자(*)를 붙여주어야 한다.
정리
- 함수의 문법은 Java와 다르다!
접근지시어 fun 함수이름(파라미터): 반환타입 { }
- 함수의 문법은 Java와 다르다!
- body가 하나의 값으로 간주되는 경우 block을 없앨 수도 있고 block이 없다면 반환 타입을 없앨 수도 있다.
fun max(a: Int, b: Int): Int = if (a > b) a else b fun max(a: Int, b: Int) = if (a > b) a else b
- 함수 파라미터에 기본값을 설정해줄 수 있다.
- 함수를 호출할 때 특정 파라미터를 지정해 넣어줄 수 있다.
- 가변인자에는 vararg 키워드를 사용하며, 가변인자 함수를 배열과 호출할 때는 *를 붙여주어야 한다.
'Kotlin > 자바 개발자를 위한 코틀린 입문' 카테고리의 다른 글
5. 추가적으로 알아두어야 할 코틀린 특성 (0) 2023.07.29 4. 코틀린에서의 FP (0) 2023.07.26 3. 코틀린에서의 OOP (0) 2023.07.10 1. 코틀린에서 변수와 타입, 연산자를 다루는 방법 (0) 2023.07.05