F.R.I.D.A.Y.

Kotlin: 11 반복문-while, do-while 본문

DEV/Kotlin

Kotlin: 11 반복문-while, do-while

F.R.I.D.A.Y. 2020. 4. 3. 23:42
반응형

 이전 시간에 for 구문에 대해 알아봤습니다. 이번엔 while, do-while 반복문에 대해 알아보겠습니다.


while 구문

 사람마다 성향 차이가 있듯이 코드를 작성하는 사람마다 선호하는 반복문이 있습니다. 그래서 여러 반복문을 제공하는 것이겠죠. 그런데 무한 반복을 하는 경우에는 while을 사용하곤 합니다.

 그런데 코틀린에서는 for 반복문과 while 반복문이 서로 완벽히 하는 일이 다른 것 같네요. for 반복문이 범위를 정해서 하도록 강제한다면, while 반복문의 경우에는 조건식(평가식)이 참(true)인 경우에만 반복하도록 합니다.

구조

코틀린 while 구문의 구조는 아래와 같습니다.

while(expression){
    //commands
}

 간단히 소개한 것처럼 expression을 평가한 결과가 참인 경우에만 반복합니다.

사용

 for 반복문에서 했듯이 1부터 10까지 출력해보겠습니다.

fun main(args:Array<String>){
	var i = 1
	
	while(i <= 10){
		println(i)
		++i
	}
	println(i)
}

 중요한 것은 이것입니다. while 구문이 끝나고 밑에 i값 출력을 한번 더 했습니다. 그랬더니 결과가 10이 아니라 11입니다. 조건식은 반복문을 한번 한번 실행할 때, 처음 평가합니다. 따라서 i의 값이 10이 되었더라도 아직 평가는 참을 반환하므로 내부 명령식 두 개[# println(i)\n++i]가 모두 실행됩니다. 실행된 이후 다시 한번 조건식을 평가하면 i가 11이므로 평가가 거짓이 나오므로 반복문을 탈출하게 됩니다.

무한 반복하기

 while 구문에서는 무한 반복을 이용할 수 있습니다.

while(true){
    //commands
}

 무한 반복을 사용하는 이유는 여러 가지가 존재하지만 어떤 대상을 반복적으로 검사할 때 사용하곤 합니다. 대표적으로

  • 컴퓨터 프로그램의 백신 검사
  • 채팅 프로그램[# 카카오톡, 라인, 메신저 등]의 채팅 메시지 수신[# 상대가 메시지를 보냈는지 수시로 확인하기]
  • 디지털시계

 등이 있겠네요. 이들 작업은 모두 사용자가 보는 앞이 아닌 뒤에서 작업이 이루어지는데요, 뒤에서 작업하는 프로그램을 백그라운드[# background] 프로그램, 실제 프로그램이 보인다면 포그라운드[# foreground] 프로그램이라고 부릅니다. 이렇게 이 포스트를 보는 브라우저들 또한 포그라운드 프로그램으로 분류할 수 있겠죠.


do-while 구문

 앞서 배운 while 구문과 비슷하면서 다른 것이 있습니다. while 반복문의 경우에는 처음부터 조건을 판단해서 해당 조건이 맞지 않다면 내부 명령을 실행하지 않지만, do-while의 경우에는 최소 한 번은 실행해야할 때 사용합니다.

구조

 do-while 반복문의 구조는 아래와 같습니다.

do{
    //commands
}while(expression)

 

사용

 사용자로부터 어떤 입력을 받을 때, 입력으로 특정한 문자열이 들어왔을 때 종료하는 경우에도 이 do-while 구문을 이용할 수 있습니다.

fun main(args:Array<String>){
	var str:String?
	do{
		print("input: ")
		str = readLine()
		println("view : $str")
	}while(str != "exit")
	println("exit")
}

exit를 입력받으면 프로그램이 종료되도록 구성됨


while과 do-while의 차이

 위에서 잠깐 설명했는데, 조건이 맞지 않으면 한 번도 실행하지 않는 while과 달리 do-while의 경우에는 조건이 달라도 한 번은 실행하도록 설계되었습니다. 그래서 아래 코드를 돌리면 while은 실행되지 않더라도 do-while은 실행되죠.

// while
while(false){
    println("while loops")
}

// do-while
do{
    println("do-while loops")
}while(false)

똑같이 조건이 false이지만 do-while은 실행되는 모습


Next.

 

Kotlin: 12 흐름 제어하기

책에서는 <04-3 흐름의 중단과 반환> 영역입니다. 책은 람다식(Lambda expression), 인라인 함수(inline function) 등 구성에 대해서는 이미 나왔습니다. 프로그램을 처음 배운다면 람다식이나 인라인 함수 등은..

pang2h.tistory.com

# index

728x90
반응형

'DEV > Kotlin' 카테고리의 다른 글

Kotlin: 13 예외 처리  (1) 2020.04.05
Kotlin: 12 흐름 제어하기  (0) 2020.04.04
Kotlin: 10 반복문-for  (0) 2020.04.03
Kotlin: 09 분기 제어-when  (0) 2020.04.02
Kotlin: 08 분기 제어-if  (0) 2020.04.01
Comments