IT_Programming/JavaScript

자바스크립트 완벽가이드 - 6.11 break

JJun ™ 2010. 7. 4. 20:38


break 문을 사용하면 break 문을 감싸고 있던 가장 안쪽의 루프나 switch 문에서 즉시 빠져 나온다.

 

문법은 다음과 같이 매우 간단하다.

break;


break의 역할은 루프나 switch에서 빠져 나오게 하는 것이므로,

위와 같은 형태로 break 문을 사용하는 것은 오직 루프나 switch 문 내부에서만 적법한 것이 된다.
자바스크립트에서는 break 키워드 뒤에 레이블 이름이 따라올 수도 있다.

break 레이블 이름;


한 가지 유의할 점은 '레이블 이름'에는 콜론 없이 오직 식별자만 쓴다는 것이다.

(콜론은 레이블 문을 정의할 때 함께 사용한다.)


break가 레이블과 함께 쓰이면, 해당 레이블 이름이 붙은 문장의 끝으로 건너뛴다. 즉, 그 문장을 종료한다. 여기서 레이블이 붙은 문장이란, 어떤 형태로든 다른 문장들을 둘러싸고 있는 문장이다. 굳이 루프나 switch 문이 아니어도 상관없으며, 심지어 레이블과 함께 쓰인 break 문이 루프나 switch 문에 포함되지 않아도 상관없다. break 문에 쓰인 레이블의 유일한 조건은 문장들의 블록을 지칭하는 이름이어야 한다는 것이다.

이 레이블이 가리키는 것이 if 문일 수도 있고, 그저 중괄호로 둘러싸 이름을 붙인 문장 블록일 수도 있다.


2장에서 논한 바 있듯이 break 키워드와 '레이블 이름' 사이에선 줄바꿈이 허용되지 않는다.

이는 자바스크립트 문법의 좀 별난 구석인데, 그 이유는 생략된 세미콜론을 자동으로 삽입하는 기능 때문이다. 만일 break 키워드와 이어지는 레이블 사이에서 줄을 나누면, 자바스크립트는 여러분이 의도한 것이 레이블 없이 홀로 쓰이는 break 문이라고 판단하여 여러분 대신 세미콜론을 삽입해준다.


switch 문 안에서 break 문을 사용하는 예제는 이미 살펴보았었다. break가 루프에서 쓰이는 경우는 그 이유가 뭐든 간에 대부분 더이상 루프를 반복할 필요가 없어서 루프를 일찌감치 끝내려고 할 때다.

루프의 종료 조건이 복잡하다면, 이를 단일 루프 표현식에 전부 밀어 넣으려 하기보다는 이들 조건의 일부분을 break 문쪽에 구현하는 것이 더 간편할 수 있다.


다음은 주어진 배열에서 특정 값을 가지는 원소를 탐색하는 코드다.

배열의 끝에 도달하면 자연스레 루프가 종료된다.

하지만 배열에서 찾으려는 값을 발견하면 break 문에 의해 루프가 종료된다.

for(1 = 0; i < a.length; i++){
if (a[i] == target)
break;
}


break 문을 레이블과 함께 쓰는 형식이 필요할 때는,

오직 중첩된 루프나 switch 문에서 지금 빠져 나오려는 문장이 가장 안쪽에 있는 것이 아닌 경우 뿐이다.
다음은 for 루프와 break 문에 레이블이 붙은 것을 보여주는 예다. 이 예의 결과가 무엇일지 한번 알아맞혀

보자.

outerloop:
for(var i = 0; i < 10; i++) {
innerloop:
for(var j = 0; j < 10; j++) {
if (j > 3) break;                 // 가장 안쪽의 루프를 중단한다.
if (i == 2) break innerloop;  // 위와 마찬가지
if (i == 4) break outerloop;  // 바깥쪽 루프를 중단한다.
document.write("i =" + i +" j =" + j +"<br>");
}
}
document.write("FINAL i =" + i +" j =" + j +"<br>");