반응형
해당 글에서는 Kotlin의 Control flow 중 조건식, RANGE, 반복문에 대해서 알아봅니다
💡 [참고] Kotlin의 문법들에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
주제 | 링크 |
Kotlin 기본 문법 이해하기 -1 : 주요 특징 및 문법 이해(변수 및 데이터 타입, 캐스팅, Null) | https://adjh54.tistory.com/607 |
Kotlin 기본 문법 이해하기 -2 : Control flow (조건식, RANGE, 반복문) | https://adjh54.tistory.com/608 |
Kotlin 기본 문법 이해하기 -3 : 클래스, 인터페이스, 구현체 | https://adjh54.tistory.com/609 |
Kotlin 기본 문법 이해하기 -4 : 함수, 파라미터, 스코프 함수 | https://adjh54.tistory.com/610 |
1) 조건식(Conditional expressions)
💡 조건식(Conditional expressions)
- 조건식의 경우는 프로그램의 흐름을 제어하는 중요한 구문입니다.
1. if 문
💡 if 문
- Kotlin에서 조건에 따라 코드의 실행 흐름을 제어하는 기본적인 구문입니다.
- Kotlin의 if 문은 다른 언어와 달리 표현식으로 사용될 수 있어, 값을 반환할 수 있는 특징이 있습니다.
특징 | 설명 |
조건부 실행 | 조건에 따라 코드 블록을 실행합니다. |
표현식으로 사용 | 표현식으로 사용되어 값을 반환할 수 있습니다. |
다중 조건 처리 | else if와 else를 사용하여 여러 조건을 처리할 수 있습니다. |
다중 라인 코드 실행 | 중괄호 {}를 사용하여 여러 줄의 코드를 실행할 수 있습니다. |
💡 if문 기본구조
구성 요소 | 설명 |
if (조건) | 주요 조건을 검사합니다. 이 조건이 참이면 해당 블록의 코드가 실행됩니다. |
else if (다른 조건) | 추가적인 조건을 검사합니다. 이전 조건들이 거짓이고 이 조건이 참일 때 실행됩니다. |
else | 모든 이전 조건이 거짓일 때 실행되는 기본 블록입니다. |
{ } | 각 조건에 대한 코드 블록을 정의합니다. 여러 줄의 코드를 포함할 수 있습니다. |
if (조건) {
// 조건이 참일 때 실행되는 코드
} else if (다른 조건) {
// 다른 조건이 참일 때 실행되는 코드
} else {
// 모든 조건이 거짓일 때 실행되는 코드
}
💡 if문 사용예시
1. 반환 값이 없는 경우: 단순히 조건에 따라 다른 메시지를 출력합니다.
2. 반환 값이 있는 간단한 경우: 조건에 따라 "양수", "음수", "0"을 반환합니다.
3. 반환 값이 있는 복잡한 경우: 조건에 따라 메시지를 출력하고 a 또는 b 값을 반환합니다.
fun conditionIfExp(x: Int, y: Int a: Int, b: Int) {
// 사용예시 -1 : 반환 값이 존재하지 않는 경우
if (a > b) {
println("a가 b보다 큽니다")
} else {
println("a가 b보다 크지 않습니다")
}
// 사용예시 -2 : 반환 값이 존재하는 경우 1
val result = if (x > 0) "양수" else if (x < 0) "음수" else "0"
// 사용예시 -3 : 반환 값이 존재하는 경우 2
val max = if (a > b) {
println("a is larger")
a
} else {
println("b is larger")
b
}
// 사용예시 -4 : 삼항연산자를 사용하기
// val resultVal1 = x > y ? a : b // X 사용불가
val resultVal2 = if (x > y) a else b
}
[ 더 알아보기 ]
💡 Kotlin에서 삼항연산자도 지원하는 건가?
- Kotlin에서는 전통적인 삼항 연산자 (condition ? ifTrue : ifFalse)를 지원하지 않습니다.
- 대신, if-else 표현식을 사용하여 동일한 기능을 구현할 수 있습니다.
- 아래와 같이 삼항연산자를 사용하면 오류가 발생하기에 if ~ else 표현식을 통해서 구현하면 됩니다.
2. WHEN 문
💡 WHEN 문
- Kotlin에서 조건에 따라 코드의 실행 흐름을 제어하는 기본적인 구문입니다.
- Java에서의 switch 문을 대체하며 더 강력하고 유연한 기능을 제공합니다.
특징 | 설명 |
다중 조건 검사 | 여러 조건을 한 번에 검사할 수 있습니다. |
표현식으로 사용 | 값을 반환할 수 있는 표현식으로 사용될 수 있습니다. |
다양한 조건 검사 가능 | 특정 조건에 대한 범위 내에서 값을 검사하거나 혹은 타입에 대한 검사에 대해서 수행할 수 있습니다. |
💡 when 문의 기본 구조
- 평가하려는 값에 대해서는 ‘()’안에 넣습니다 : expression
- 중괄호(’{}’) 안에는 분기를 넣습니다. 즉, 평가하는 값의 조건에 대한 분기처리 부분을 의미합니다.
- 각 검사가 성공했을 때 수행할 작업을 ‘→’을 통해서 구분합니다.
구성 요소 | 설명 |
expression | 평가할 표현식 (선택적) |
value1, value2 등 | 일치하는 값 |
in range | 범위 내의 값 검사 |
is Type | 타입 검사 |
else | 모든 조건이 일치하지 않을 때의 기본 처리 |
when (expression) {
value1 -> { /* 코드 블록 */ }
value2 -> { /* 코드 블록 */ }
value3, value4 -> { /* 코드 블록 */ }
in range -> { /* 코드 블록 */ }
is Type -> { /* 코드 블록 */ }
else -> { /* 기본 코드 블록 */ }
}
💡 when 문의 사용예시
1. 기본적인 when 문 : x의 값에 따라 다른 메시지를 출력합니다
2. 값을 반환하는 when 문 : when 문이 값을 반환합니다
3. 타입 검사를 위한 when 문 : when 문을 사용하여 x의 타입을 검사합니다.
4. 함수 호출문 : checkType 함수를 다양한 타입의 인자로 호출하여 각각의 결과를 보입니다.
fun conditionWhenExp(x: Int, y: Int) {
// 사용예시 -1 : 기본적인 when 문 사용
when (x) {
1 -> println("x is 1")
2 -> println("x is 2")
else -> println("x is neither 1 nor 2")
}
// 사용예시 -2 : 값을 반환하는 when 문
val result = when (x) {
0, 1 -> "x is 0 or 1"
in 2..10 -> "x is between 2 and 10"
else -> "x is outside the range"
}
// 사용예시 -3 : 타입 검사를 위한 when 문
fun checkType(x: Any) = when (x) {
is Int -> println("x is an Integer")
is String -> println("x is a String")
is List<*> -> println("x is a List")
else -> println("x is of unknown type")
}
// 사용예시 -4 : 함수를 호출하여 값을 출력합니다.
checkType(5) // 출력: x is an Integer
checkType("Hello") // 출력: x is a String
checkType(listOf(1, 2, 3)) // 출력: x is a List
checkType(3.14) // 출력: x is of unknown type
}
반응형
2) RANGE
💡 RANGE
- Kotlin에서 RANGE는 특정 범위의 값을 나타내는 개념입니다.
- 주로 '..' 연산자를 사용하여 정의하며, 시작 값과 끝 값을 포함합니다.
- 반복문이나 조건문에서 유용하게 사용됩니다.
1. 기본 RANGE 생성
💡 기본 RANGE 생성
- 아래와 같이 숫자에 대한 범위, 문자에 대한 범위를 출력할 수 있습니다.
// 정수 범위: 1부터 5까지의 연속된 정수를 나타냄
val intRange = 1..5
// 문자 범위: 알파벳 소문자 a부터 z까지의 연속된 문자를 나타냄
val charRange = 'a'..'z'
// 날짜 범위: 2024년 1월 1일부터 12월 31일까지의 날짜를 나타냄
val dateRange = LocalDate.of(2024, 1, 1)..LocalDate.of(2024, 12, 31)
// 시간 범위: 오전 9시부터 오후 5시까지의 시간을 나타냄
val timeRange = LocalTime.of(9, 0)..LocalTime.of(17, 0)
println("Integer Range: $intRange")
println("Character Range: $charRange")
println("Date Range: $dateRange")
println("Time Range: $timeRange")
// 출력 결과:
// Integer Range: 1..5
// Character Range: a..z
// Date Range: 2024-01-01..2024-12-31
// Time Range: 09:00..17:00
2. RANGE 사용 예시
💡 RANGE 사용 예시
1. for 루프에서 사용: 1부터 5까지의 숫자를 반복하여 출력합니다.
2. if 문에서 사용: 변수 x가 1에서 10 사이의 값인지 확인합니다.
3. when 문에서 사용: 변수 x의 값이 1에서 5 사이인지, 또는 6에서 10 사이인지 확인합니다.
// 1. for 루프에서 사용
for (i in 1..5) {
println(i) // 1, 2, 3, 4, 5 출력
}
// 2. if 문에서 사용
val x = 3
if (x in 1..10) {
println("x는 1에서 10 사이에 있습니다.")
}
// 3. when 문에서 사용
when (x) {
in 1..5 -> println("x는 1에서 5 사이에 있습니다.")
in 6..10 -> println("x는 6에서 10 사이에 있습니다.")
}
3. RANGE 관련 함수
💡 RANGE 관련 함수
- 아래와 같은 연산자를 활용하여 범위 내의 값에 대해서 출력을 합니다.
연산자 | 설명 |
.. | 시작값부터 끝값까지 포함하는 범위를 생성합니다. |
until | 끝값을 포함하지 않는 범위를 생성합니다. |
step | 범위의 증가 또는 감소 단계를 지정합니다. |
downTo | 큰 수에서 작은 수로 감소하는 범위를 생성합니다. |
💡 사용예시
1. until: 끝 값을 포함하지 않는 범위를 생성합니다. 예시에서 1 until 5는 1, 2, 3, 4를 포함합니다.
2. step: 범위의 증가 단계를 지정합니다. 예시에서 1..10 step 2는 1, 3, 5, 7, 9를 출력합니다.
3. downTo: 큰 수에서 작은 수로 감소하는 범위를 생성합니다. 예시에서 5 downTo 1은 5, 4, 3, 2, 1을 출력합니다.
4. 범위 연산자 (..): 시작값부터 끝값까지 포함하는 범위를 생성합니다. 예: 1..5는 1, 2, 3, 4, 5를 포함합니다.
5. in 연산자: 값이 범위 내에 있는지 확인합니다. 예: 3 in a는 true를 반환합니다.
6. 괄호를 사용한 범위 연산자: 괄호를 사용하여 범위를 명확하게 지정할 수 있습니다. 예: (1..5)는 1부터 5까지의 범위를 나타냅니다.
// until: 끝 값을 포함하지 않는 범위
for (i in 1 until 5) {
println(i) // 1, 2, 3, 4 출력
}
// step: 증가 값 지정
for (i in 1..10 step 2) {
println(i) // 1, 3, 5, 7, 9 출력
}
// downTo: 역순 범위
for (i in 5 downTo 1) {
println(i) // 5, 4, 3, 2, 1 출력
}
// 범위 연산자
val a = 1..5 // 1, 2, 3, 4, 5를 포함하는 범위
val b = 5 downTo 1 // 5, 4, 3, 2, 1을 포함하는 범위
val c = 1 until 5 // 1, 2, 3, 4를 포함하는 범위 (5는 제외)
val d = 1..5 step 2 // 1, 3, 5를 포함하는 범위
println(3 in a) // true
println(6 in a) // false
// 괄호를 사용하는 범위 연산자
val e = (1..5) // 1, 2, 3, 4, 5를 포함하는 범위
val f = (5 downTo 1) // 5, 4, 3, 2, 1을 포함하는 범위
val g = (1 until 5) // 1, 2, 3, 4를 포함하는 범위 (5는 제외)
val h = (1..5 step 2) // 1, 3, 5를 포함하는 범위
println(3 in (1..5)) // true
println(6 in (1..5)) // false
4. RANGE 속성과 메서드
속성/메서드 | 설명 | 예시 |
first | 범위의 첫 번째 요소를 반환 | (1..5).first // 1 |
last | 범위의 마지막 요소를 반환 | (1..5).last // 5 |
start | 범위의 시작 값을 반환 | (1..5).start // 1 |
step | 범위의 증가 단계를 반환 | (1..10 step 2).step // 2 |
endInclusive | 범위의 포함된 끝 값을 반환 | (1..5).endInclusive // 5 |
endExclusive | 범위의 제외된 끝 값을 반환 (마지막 값 + 1) | (1 until 5).endExclusive // 5 |
isEmpty() | 범위가 비어있는지 확인 | (1..1).isEmpty() // false |
contains() | 범위에 특정 값이 포함되어 있는지 확인 | (1..5).contains(3) // true |
in 연산자 | 값이 범위 내에 있는지 확인 | 3 in 1..5 // true |
val range = 1..5
println(range.start) // 1
println(range.endInclusive) // 5
println(range.isEmpty()) // false
println(3 in range) // true
3) Kotlin 반복문
💡 Kotlin 반복문
- Kotlin에서는 다양한 방식의 반복문을 제공합니다. 주로 for 루프와 while 루프를 사용하며, 컬렉션이나 범위에 대해 쉽게 반복할 수 있는 기능을 제공합니다.
💡 [참고] Kotlin의 반복문에 대해 궁금하시면 아래의 글을 참고하시면 도움이 됩니다.
1. for 루프
💡 for 루프
- 컬렉션이나 범위를 반복할 때 사용합니다.
용어 | 설명 | 예시 | 출력 값 |
in | 범위 내의 값을 반복 | for (i in 1..5) | 1, 2, 3, 4, 5 |
.. | 시작값부터 끝값까지 포함하는 범위 | 1..5 | 1, 2, 3, 4, 5 |
until | 끝값을 포함하지 않는 범위 | 1 until 5 | 1, 2, 3, 4 |
downTo | 큰 수에서 작은 수로 감소하는 범위 | 5 downTo 1 | 5, 4, 3, 2, 1 |
step | 반복 단계 지정 | 1..10 step 2 | 1, 3, 5, 7, 9 |
@Component
class LoopComponent {
/**
* for문 반복문을 사용한 예시
*/
fun forLoop() {
// 범위를 이용한 for 루프-1 : 1이상 5이하 출력
for (i in 1..5) {
println(i) // 출력: 1, 2, 3, 4, 5
}
// 범위를 이용한 for 루프-2 : 1이상 5이하 출력
val range = 1..5
for (i in range) {
println(i) // 출력: 1, 2, 3, 4, 5
}
// 범위를 이용한 for 루프-3 : 1이상 5미만 출력
for (i in 1 until 5) {
println(i) // 출력: 1, 2, 3, 4
}
// 범위를 이용한 for 루프-4 : 5이하 1이상 출력(역순출력)
for (i in 5 downTo 1) {
println(i) // 출력: 5, 4, 3, 2, 1
}
// 범위를 이용한 for 루프-5 : 1부터 시작해서 2씩 증가하면서 10 이하의 모든 값(1, 3, 5, 7, 9)이 출력됩니다.
for (i in 1..10 step 2) {
println(i) // 출력: 1, 3, 5, 7, 9
}
// 범위를 이용한 for 루프-6 : 10부터 시작해서 -2씩 감소하면서 10 이하의 모든 값(10, 8, 6, 4, 2)이 출력됩니다.
for (i in 10 downTo 1 step 2) {
println(i) // 10, 8, 6, 4, 2 출력
}
// 범위를 이용한 for 루프 -> 1이상 5미만 출력
for (i in 1 until 5) {
println(i) // 1, 2, 3, 4 출력
}
// 컬렉션을 이용한 for 루프
val fruits = listOf("apple", "banana", "cherry")
for (fruit in fruits) {
println(fruit)
}
// 인덱스와 함께 사용
for ((index, value) in fruits.withIndex()) {
println("$index: $value")
}
}
}
2. while 루프
💡 while 루프
- 조건이 참인 동안 계속해서 코드 블록을 실행합니다.
var i = 0
while (i < 5) {
println(i)
i++
}
3. do-while 루프
💡 do-while 루프
- 코드 블록을 최소한 한 번 실행한 후 조건을 검사합니다.
var i = 0
do {
println(i)
i++
} while (i < 5)
4. 반복문 제어
💡 반복문 제어
- Kotlin에서는 break와 continue를 사용하여 반복문을 제어할 수 있습니다.
for (i in 1..10) {
if (i == 3) continue // 3일 때 다음 반복으로 건너뜁니다
if (i > 5) break // 5보다 크면 반복문을 종료합니다
println(i)
}
4) Kotlin 해당 글 주요 개념 요약
구분 | 종류 | 설명 |
조건식 | if문 | - 조건에 따라 코드 실행 흐름 제어 - 값을 반환할 수 있는 표현식으로 사용 가능 |
조건식 | when문 | - switch문과 유사 - 여러 조건을 처리할 수 있는 구문 |
조건식 | Range | - 범위를 나타내는 표현식 (1..5, 1 until 5 등) - first, last, contains() 등 다양한 메서드 제공 |
반복문 | for 루프 | - in: 범위 내 값 반복 (1..5) - until: 끝값 제외 범위 (1 until 5) - downTo: 역순 범위 (5 downTo 1) - step: 반복 단계 지정 (1..10 step 2) |
반복문 | while 루프 | - 조건이 참인 동안 계속 실행 |
반복문 | do-while 루프 | - 최소 한번 실행 후 조건 검사 |
제어문 | break, continue | - break: 반복문 종료 - continue: 다음 반복으로 건너뛰기 |
// 1. 조건식 예시
val number = 10
// if 문 사용
val result = if (number > 0) "양수" else "음수"
// when 문 사용
val grade = when (number) {
in 90..100 -> "A"
in 80..89 -> "B"
in 70..79 -> "C"
else -> "D"
}
// 2. Range 예시
val range = 1..5
println(3 in range) // true
println(range.first) // 1
println(range.last) // 5
// 3. 반복문 예시
// for 루프
for (i in 1..5) println(i) // 1,2,3,4,5
for (i in 5 downTo 1) println(i) // 5,4,3,2,1
for (i in 1..10 step 2) println(i) // 1,3,5,7,9
// while 루프
var i = 0
while (i < 3) {
println(i)
i++
}
// do-while 루프
var j = 0
do {
println(j)
j++
} while (j < 3)
// 제어문 예시
for (i in 1..5) {
if (i == 3) continue // 3을 건너뜀
if (i == 4) break // 4에서 종료
println(i)
}
오늘도 감사합니다. 😀
반응형
'Kotlin > 이해하기' 카테고리의 다른 글
[Kotlin] Kotlin 기본 문법 이해하기 -4 : 함수, 파라미터, 스코프 함수 (0) | 2024.11.23 |
---|---|
[Kotlin] Kotlin 기본 문법 이해하기 -3 : 클래스, 인터페이스, 구현체 (0) | 2024.11.23 |
[Kotlin] Kotlin 기본 문법 이해하기 -1 : 주요 특징 및 문법 이해(변수 및 데이터 타입, 캐스팅, Null) (0) | 2024.11.22 |
[Kotlin] Kotlin, Java 언어를 대체 할 수 있을까? : 기술동향, 정의, 흐름, 특징 (0) | 2023.03.20 |
[Kotlin] 앱 아키텍처 패턴(MVC, MVP, MVVM) 이해하기 (0) | 2022.09.20 |