Lumpy Space Princess - Adventure Time
공부/Kotlin

[Kotlin] 조건문(if, when) / 반복문(for, while, forEach) / 연산자

yaebb_82 2022. 6. 12.

 

조건문

💡 IF문

: if문의 조건문이 참일 때 따라오는 구문을 실행하는 기능

: 참과 거짓을 구분하기 위해서는 비교 연산을 통해 구할 수 있다

 

 

Example

fun main() {
	var a = 7

	if(a>10){
		println("a는 10보다 크다.")
	} else{
		println("a는 10보다 작거나 같다.")
	}
}

결과 ▶︎ a는 10보다 작거나 같다. (조건에 대하여 거짓이므로 else문으로 간다.)

 

 

 

💡 비교연산자

: 부등호 → < <= > >= !=

: 등호 → ==

: is 연산자, !is 연산자 (자료형이 맞는지 체크) → a is Int (형변환까지 한번에 진행시켜줌)

 

 

 

💡 WHEN (다중 조건문)

: switch문을 좀 더 편리하게 바꾼 기능

: 하나의 변수를 여러 개의 값과 비교할 수 있다는 장점이 있다.

: 다만, 등호나 부등호의 사용은 불가능하다.

: 여러 개의 조건에 부합하더라도, 먼저 부합하는 조건이 실행됨을 유의!!

 

 

Example (main 함수에서 doWhen 함수 호출하여 사용)

fun doWhen(a:Any){
	when(a){
		1 -> println("점수 1 입니다.")
		"Dimo" -> println("Dimo의 코틀린 강좌입니다.")
		is Long -> println("Long 타입 입니다.")
		!is String -> println("String 타입이 아닙니다.")
		else -> println("어떤 조건도 만족하지 않습니다.")
	}
}

cf.) Any 자료형 : 어떤 자료형이든 상관없이 호환되는 코틀린의 최상위 자료형

 

 

Example (when의 결과를 변수로 받아 사용도 가능)

fun doWhen(a:Any){
	var result = when(a){
		1 -> println("점수 1 입니다.")
		"Dimo" -> println("Dimo의 코틀린 강좌입니다.")
		is Long -> println("Long 타입 입니다.")
		!is String -> println("String 타입이 아닙니다.")
		else -> println("어떤 조건도 만족하지 않습니다.")
	}
	println(result)
}

 

 

 

반복문

💡 조건형 반복문 (조건이 참인 경우 반복을 유지)

 

1) while문

fun main(){
	var a = 0

	while(a<5){
		println(a++)
	}
}

결과 ▶︎ 0 1 2 3 4

먼저 while의 조건식이 참인지 확인 → 참이라면 while에 따르는 구문 1회 수행(후위 증가 연산자이기 때문에 화면에 출력된 후에 장가값이 반영) → 다시 while문에 돌아와서 조건 확인 → while문이 거짓이 되는 순간 반복을 중단하고 다음 구문으로 넘어감

 

 

fun main(){
	var a = 0

	while(a<5){
		println(++a)
	}
}

결과 ▶︎ 1 2 3 4 5

전위 연산자이기 때문에 해당 구문 내에서 증가된 값을 즉시 반영한다. 증가가 먼저 된 후 화면에 출력하게 된다.

 

 

📍 증감 연산자

: 증가 연산자 (++a, a++) = 변수의 값을 1 증가시키는 역할

: 감소 연산자 (--a, a--) = 변수의 값을 1 감소시키는 역할

 

Q. 연산자가 앞에 붙는 것과 뒤에 붙는 것의 차이?

A. 전위 연산자 (++a, --a) : 연산자가 포함된 구문에서 이미 증감된 수를 반영하여 연산이 진행

A. 후위 연산자 (a++, a--) : 증가나 감소된 수를 해당 구문에서 사용하지 않고 다음 구문부터 사용

 

 

2) do...while문

: while문에 의해 조건을 체크하여 반복한다는 점은 while문과 동일

: 최초 한 번은 조건없이 do에서 구문을 실행한 후 while로 조건을 체크한다는 선후관계차이가 있다

 

 

fun main(){
	var a = 0

	do{
		println(a++)
	} while(a<5)

}

결과 ▶︎ 0 1 2 3 4

 

 

 

💡 범위형 반복문 (반복 범위를 정해 반복을 수행)

 

1) For문

fun main(){
	for(i in 0..9){
	print(i)
	}
}

 

결과 ▶︎ 0123456789

 

: i 앞에 var는 붙이지 않아도 된다

: 기본적으로 1씩 증가하면서 for문이 반복하게 된다

: 증가할 때에 .. 를 사용하여 증가시킨다

: print는 println과 달리 문단 변경 없이 이어서 출력된다

 

 

fun main(){
	for(i in 0..9 step 3){
	print(i)
	}
}

결과 ▶︎ 0369

 

: 1씩 증가하는 것보다 더 큰 수씩 증가하고 싶을 때 step을 사용하면 된다

: 3씩 증가되었음을 확인할 수 있다

 

 

 

fun main(){
	for(i in 9 downTo 0){
		print(i)
	}
}

결과 ▶︎ 9876543210

 

: 감소는 .. 대신에 downTo 라는 키워드를 사용한다

: 기본적으로 1씩 감소하도록 할 수 있다

: 감소 역시 step을 사용하면 단계를 변경할 수 있다

 

 

fun main(){
	for(i in 'a'..'e'){
		print(i)
	}
}

결과 ▶︎ abcde

 

: for문은 char 자료형에도 사용할 수 있다

 

 

 

연산자

💡 코드의 흐름을 제어할 수 있는 키워드

  • return : 함수를 종료하고 값을 반환하는 역할
  • break : 반복문 내의 구문이 실행되는 중간에 즉시 반복문을 중단하고 다음 구문으로 넘어가는 역할
  • continue : 다음 반복 조건으로 즉시 넘어가는 역할

 

for main(){
	for(i in 1..10){
		if(i==3) break
		println(i)
	}
}

결과 ▶︎ 1 2

i가 3이 되는 순간 멈춘다

 

 

for main(){
	for(i in 1..10){
		if(i==3) continue
		println(i)
	}
}

결과 ▶︎ 1 2 3 4 5 6 7 8 9 10

i가 3이 되는 시점을 제외한 모든 숫자가 찍히게 된다

 

 

loop@for main(){
	for(i in 1..10){
		for(j in 1..10){
			if(i==1 && j==2) break@loop
			println("i: $i, j: $j")
		}
	}
}

결과 ▶︎ i: 1, j: 1

 

 

: 다중 반복문에서 코틀린은 한 가지 기능이 더 추가되었다

: break 나 continue 가 적용되는 반복문을 label을 통해 지정할 수 있는 기능이다

 

: 기존) 내부 반복문에서 조건을 체크하여 break를 하더라도,

           외부 반복문에서 다시 조건을 체크하여 모든 반복문을 수동으로 종료해야 한다

: 코틀린) 레이블이름@ 이 달린 반복문 기준으로 즉시 break 시켜준다

 

cf.) “” 안에서 변수를 출력할 때는 $를 변수 앞에 붙여주면 변수 내용으로 대체되어 출력된다

 

 

 

💡 논리 연산자

: 논리값을 연산하여 새로운 논리값을 도출할 때 쓰는 연산자

: 조건문인 if문에서 많이 사용된다

  • && (and연산자) : 둘다 true인 경우 결과값이 true
  • || (or연산자) : 둘 중 하나가 true인 경우 결과값이 true
  • ! (not연산자) : 뒤에 붙는 값을 반전시킴, true 이면 false / false 이면 true

 

fun main(){
	println(true&&false)
	println(true||false)
	println(!true)
	println(!false)
}

결과 ▶︎ false true false true

 

 

for main(){
	var a = 6
	var b = 4

	println(a>5 && b>5)

}

결과 ▶︎ false

 

 

 

반응형

댓글