Uknow's Lab.
article thumbnail

 

 

반복문을 반복하고 있다가, 중간에 반복문을 멈추거나,

해당 회차를 건너뛰고 싶을 때가 있습니다.

 

이럴때 쓰기 좋은 반복문의 흐름 제어 방법에 대해 알아봅시다.

 

break

for(i in 0 until 10) {
	if(i == 5) {
		break
	}
	printin(i)
}

// 출력
>> 0
1
2
3
4

 

 break는 반복문을 탈출하는 키워드입니다.

위 프로그램은 i가 0 부터 10까지 1씩 증가하지만,

i가 5가 되는 순간(i == 5) break를 걸어 반복문을 탈출하는 프로그램입니다.

 

주로 if / when문과 같이 쓰이곤 합니다.

 

 

2중 for문에서 break는 어떻게 동작할까?

for(i in 0 until 3) {
	for(j in 0 until 3) {
		if(j == 2) break
		println("$i $j")
	}
}

// 출력
>>> 0 0
0 1
1 0
1 1
2 0
2 1

 

break는 가장 가까운 for문에만 적용됩니다.

j == 2 일때, 가장 가까운 for문인 안쪽 for(j in 0 until 3)만 탈출하는 것을 볼 수 있으며,

바깥쪽 for문은 그대로 반복하는 것을 볼 수 있습니다.

 

 

continue

for(i in 0 until 5) {
	if(i == 3) continue
	if(i == 4) continue
	
	println(i)
}

// 출력
>> 0
1
2
5

 

continue는 해당 회차를 넘기는 키워드입니다.

continue 아래의 코드를 실행하지 않고 넘기고 싶을 때 사용합니다.

 

 

for문에 라벨 붙이기

first@ for(i in 0 until 3) {
        second@ for(j in 0 until 3) {
            if(j == 2) break@first
            println("$i $j")
        }
    }
}

// 출력
>>> 0 0
0 1

 

for문에 라벨링을 붙일 수 있습니다.

위 코드는 앞의 2중 for문에 라벨링을 붙인 코드입니다.

 

바깥쪽 for문은 first, 안쪽 for문은 second로 라벨링을 해줬고,

j == 2인 순간 first(바깥쪽) for문을 탈출하도록 작성했더니,

실제로 바깥쪽 for문이 break 되었습니다.

이는 continue, return 등에서도 동일하게 쓰일 수 있습니다.

 

즉, 라벨링을 통해 다중 for문에서 어떤 for문을 제어할 것인지가 가능합니다.

2중 for문을 탈출하기 위해 별도의 boolean 변수를 두어 제어했던 것 같은데,

라벨링을 통해 간편하게 제어가 가능할 것 같네요.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.