본문 바로가기

프로그래밍 언어/코틀린_쌩초보를 위한 기초

쌩초보를 위한 기초_16_반복문 for while

반복문(Loops)

 

반복문은 실행 코드를 반복하여 실행하는 명령문이다.

반복문은 다음 3가지 키워드로 구현할 수 있다.

for

while

do~while

 

for Loops

 

for loop(반복)은 변수를 선언하고 조건식에 맞도록 변수 값을 반복해서 증감하는 구문이다.

범위를 나타내는 in 키워드와 함께 사용한다.

 

기본 모양은 다음과 같다.

for (매개변수 in 범위) { 반복할 내용 }

 

for문으로 1부터 10까지 더하는 함수를 만들어 본다.

변수 sum(합)을 만들고 초기값에 0을 넣어서 초기화한다.

for 매개변수는 x라고 하고 범위는 1에서10까지이다.

실행할 본체 내용은 한 줄이므로 중괄호를 생략할 수 있다.

함수가 실행되면

sum값은 최초 0이다.

다음 sum에 첫번째 x 값(1)을 더하여(0+1) 저장한다.

다음 sum에 두번째 x 값(2)을 더해서(1+2) 저장한다.

이런 식으로 x값이 10일 때까지 반복한다.

 

만약 거꾸로 10에서 1까지 내림차순으로 표현하려면 점점( .. )대신 downTo(아래로)로 바꾼다.

 

( x in 10 downTo 1 ) 

 

step 키워드는 건너뛰면서 선택할 수 있다.

 

( x in 1..10 step 2 )

 

위와 같이 표현하면 처음에는 x에 1을 넣고 그 다음에는 x에 2단계 건너뛰어 3을 넣는다.

결국 1+3+5+7+9 와 같이 홀수만 더 할 수 있다.

 

while Loops

while loop(반복)은 조건식이 true(참)인 경우 while문의 실행 부분을 무한 반복한다.

조건식이 false가 되면 실행부분을 중단하고 Loop(반복)를 빠져나간다.

그러므로 무한 반복에 빠지지 않기 위해서는 조건식에 false가 되는 코드가 있어야 할 것이다.

 

기본 모양은 다음과 같다.

 

while (조건) { 실행 부분 }

 

while문으로 1부터 10까지 더하는 함수를 만들어 본다.

조건문 안의 i에 처음 1이 들어간다.

조건이 10보다 작으므로 실행 부분으로 간다.

처음 sum 값 0에 1을 더해서 저장한다.

i값에 1을 더해서(1+1) 조건으로 간다.

 

2는 10보다 작으므로 실행 부분으로 간다.

sum값(1)에 2를 더해서 저장한다.

i값을 하나 더해서 (2+1) 조건으로 간다.

이런 식으로 마지막에 i 값이 11이 되어  while의 조건으로 가면 false(거짓)이므로 실행부분을 건너뛰어 다음 줄로 간다.

 

위 코드에서 ++는 1을 더하는 증감 연산자이다.

변수 왼쪽에 붙으면 더한 후 변수값을 반환하고

변수 오른쪽에 붙으면 변수값을 반환 한 후 1더한다.

1을 빼는 -- 연산자도 있다.

 

다른 연산자를 알아 보기 위해 1부터 5까지 곱한 값을 구하는 함수를 만들어 보자.

참고로 수학에서 어떤 수 보다 작거나 같은 모든 양의 정수의 곱을 팩토리얼(factorial, 차례곱, 계승)이라고 한다.

예를 들어 5! = 5 x 4 x 3 x 2 x 1 을 나타낸다.

 

while조건 안에 처음 factorial 값은 5이다.

5는 0보다 크므로 실행 부분으로 간다.

result값(1)에 5를 곱해서 저장한다.

factorial에 1을 뺀 값(4)을 저장하고 다시 조건으로 간다.

이런 식으로 마지막에 factorial 값이 0이 되고 while 조건으로 가면 false(거짓)이 되므로 실행 부분을 건너뛰고 다음 줄로 이동한다.

 

다음 코드를 보자.

 

위 코드는 isShopOpen이 true(참)일 동안만 while루프가 실행된다.

하지만 이런 코드는 isShopOpen이 절대로 false(거짓)이 되지 않을 경우에는 while루프가 무한반복 실행될 것이므로 버그가 생기게 된다. 그러므로 while 루프를 사용할 때는 조심해야 한다.

 

while루프를 벗어나는 방법 중 하나는 루프가 의존하고 있는 상태를 바꾸는 것이다. 

또 하나의 방법은 break를 사용하는 것이다. 위와 같은 경우 if문의 조건에서 isClosingTime이 true라면 실행할 내용을 break로 바꾸는 것이다.

 

위와 같이 하면 isClosingTime의 값이 true로 바뀌면 println 코드가 실행되지 않고 즉시 벗어나서 다음 코드로 이동하게 된다. 즉, break문은 자신이 실행하는 루프만 중단시키고 다음으로 빠져나간다.

do ~ while

 

while 루프에서는 조건을 먼저 검사한 후 실행 부분으로 가기 때문에 처음부터 조건이 false이면 실행이 한번도 안된다.

do ~ while은 먼저 실행을 한 후 조건을 검사하므로 조건이 false라도 한번은 실행한다.

 

기본 모양은 다음과 같다.

 

do {

    실행 부분

} while (조건)

 

변수 sum(합)을 0으로 초기화한다.

변수 input을 만들고 타입을 문자열로 선언한다.

 

실행 부분(do)는 아래와 같다.

 

출력하라("숫자 입력: ")

input에 readLine()함수 값을 저장하라. 값은 null이 아님

sum에 input 값을 정수로 바꾸어 더하고 저장하라.

 

while 조건은 다음과 같다

 

조건 (input값이 문자열 0 이 아니다) 가 true(참)일 동안은 계속 do 하라.

 

위 코드에서 readLine()함수는 표준입력창(콘솔창)에서 한 줄을 읽어서 반환하는(가져오는) 함수이다.

그래서 간단히 말하면 입력창에서 사용자가 숫자를 입력하면 그것이 0이 아니면 계속 더하라는 함수이다.

 

toInt() 함수는 Int타입으로 바꿔주는 함수이다.

입력창에서 들어오는 값이 문자열(String)이므로 Int(정수)타입으로 변환해야 sum변수에 더해서 넣을 수 있다.

 

코틀린 playground에서는 표준입력창을 지원하지 않기 때문에

코틀린을 만든 젯브레인사의 통합 개발 도구인 intelliJ로 실행해 보았다.

코틀린을 본격적으로 배우려면 인텔리제이를 설치하는 것이 필수다.

 실행하면 제일 먼저 do 실행부분에 있는 "숫자 입력:" 이 출력된다.

1을 입력하고 엔터키를 치면 다시 "숫자 입력:"이 출력된다.

2를 입력하고 엔터키를 치면 다시 "숫자 입력:"이 출력된다.

이번에는 0을 입력하면 조건문이 false(거짓)이므로 반복 루프를 빠져나와 다음 줄을 실행한다.

 

여기까지 반복문 Loop 에 대해 간단히 살펴보았다.

끝.