profile Archive Of Records keep studying

JavaScript 제어문 (3) 점프문

» JavaScript

점프문

  • 프로그램에서 다른 위치로 이동하는 제어 구문
    • label문, break문, continue문…
  • 문장에 라벨을 붙이면 break문이나 continue문을 실행한 후에 점프할 수 있는 위치가 됨


1. label문

  • 제어를 직접 지정할 때 사용
  • 자바스크립트에서는 모든 문장에 라벨을 붙일 수 있지만 라벨로 점프할 수 있는 문장은 break문과 continue문
    • break문은 switch문과 반복문 안에서만 사용 가능, continue문은 반복문 안에서만 사용 가능
  • 프로그램 처리 구조에 주의해야 함
    • 너무 많이 사용하면 프로그램의 논리성이 약해지고, 순환 구조로 프로그래밍하면 무한 반복에 빠질 수 있음


· 작성 방법

라벨 이름: 문장

라벨 이름에는 모든 식별자를 사용할 수 있음


· label문의 처리 흐름 예시

loop: while(true) {
    ...
    if(confirm("종료하시겠습니까?")) break loop;
    ...
}

break loop;를 실행하면 앞과 뒤 코드와 상관없이 loop라는 라벨이 붙은 while문에서 빠져나옴





2. break문

  • 해당 블록을 강제적으로 벗어나 다음 문장을 처리하도록 할 때 사용
    • 제어를 블록 바깥으로 옮김
  • switch문이나 반복문 안에서만 사용 가능
  • break문을 실행하면 가장 안쪽에 있는 반복문이나 switch문에서 빠져나옴
  • 반복문을 완전히 벗어나게 하는 역할


· 작성 방법

// 1. 기본 작성
break;

// 2. 점프할 라벨 지정 시
break 라벨 이름;
  • 라벨을 지정한 break문은 주로 중첩된 반복문의 안쪽 반복문 안에서 전체 반복문을 빠져나올 때 사용
  • 라벨을 지정한 break문은 switch문과 반복문에서 사용 가능
  • 라벨을 지정한 break문을 실행하면 라벨이 붙은 문장 끝으로 점프
  • break문과 라벨 이름 사이에는 줄 바꿈 문자를 넣지 않도록 주의
    • 줄 바꿈 문자를 넣으면 자바스크립트 엔진이 내부적으로 세미콜론을 추가하므로 라벨을 지정하지 않은 break문으로 해석하기 때문



· 간단한 예시

1) 1부터 100까지의 수 중 3의 배수 합 구하기

var x = 0, sum = 0;

while(1) {
   x += 3; // 3의 배수
   if(x > 100) {
       break;
   }
   sum += x;
   document.writeln(x);
}
document.write("<br>1부터 100까지의 수 중 3의 배수의 합은 " + sum + "이다.");

result


2) 배열 a와 배열 b에서 같은 값을 가진 요소를 발견하면 전체 반복문에서 빠져나오기

// 방법 1
var a = [2, 4, 6, 8, 10], b = [1, 3, 5, 6, 9, 11];

loop: for(var i = 0; i < a.length; i++) {
    for(var j = 0; j < b.length; j++) {
       if(a[i] == b[j]) {
           break loop;
       }
    }
}
console.log("a[" + i + "] = b[" + j + "]");

result

// 방법 2
var a = [2, 4, 6, 8, 10], b = [1, 3, 5, 6, 9, 11];

loop: for(var x in a) {
    for(var y in b) {
       if(a[x] == b[y]) {
           break loop;
       }
    }
}
console.log("a[" + x + "] = b[" + y + "]");

result


3) 0에서 100까지 0을 포함한 3의 배수 출력 -> 20 이상인 3의 배수는 출력 제외

for(i = 0; i <= 100; i += 3) {
    if(i >= 20) {
       break;
    }
    document.writeln(i);
}

result


4) 10번의 알림값을 가지고 있으나 3번의 알림 후 실행되지 않음

for(i = 1; i <= 10; i++) {
    if(i >= 4) {
        break;
    }
    alert(i + "번째 알림입니다.");
}
alert("프로그램이 종료되었습니다.");





3. continue문

  • continue문은 라벨 지정 여부와 관계없이 반복문 안에서만 사용 가능
  • if문과 함께 많이 사용
    • if문의 조건식이 참이면 continue 이후의 문장을 처리하지 않고 제어를 반복문의 시작 위치로 옮기는 역할
  • 제어를 반복문의 시작 위치로 이동시킴
  • continue문을 실행하면 반복문 실행을 멈추고 반복을 새로 시작
    • 이때의 동작이 반복문에 따라 다름
      • while문: 반복문의 처음으로 되돌아가 조건식을 다시 평가 / true면 반복문 처음부터 실행
      • do~while문: 중간을 건너뛰고 반복문의 마지막 조건식 평가 / true면 반복문 처음부터 실행
      • for문: 반복식을 실행한 후에 조건식 평가 / true면 반복문 이어서 실행
      • for~in문: 반복문의 처음으로 되돌아감 / 지정한 변수에 할당되어 있는 프로퍼티의 다음 프로퍼티를 대상으로 작업 실행


· 작성 방법

// 1. 기본 작성
continue;

// 2. 점프할 라벨 지정 시
continue 라벨 이름;



· 간단한 예시

1) for 중첩문과 함께 사용할 때

var i, j;
outloop: // label name
for(i = 0; i < 3; i++) {
    inloop: // label name
    for(j = 0; j < 3; j++) {
        if(i === 1 && j === 0) {
            continue outloop;
        }
     document.write("i = " + i + ", j = " + j + "<br>");
    }
}

result


2) 1부터 100까지 수 중 3의 배수의 합 구하기

for(var x = 1, sum = 0; x <= 100; x++) {
   if(x % 3 != 0) {
       continue;
   }
   sum += x;
   document.writeln(x);
}

document.write("<br>1부터 100까지의 수 중 3의 배수의 합은 " + sum + "이다.");

result


3) 배열 a 안에서 값이 0 이상인 요소의 값을 모두 더하기

// 방법 1
var a = [2, 5, -1, 7, -3, 6, 9];
for(var i = 0, sum = 0; i < a.length; i++) {
    if(a[i] < 0) {
        continue;
    }
    sum += a[i];
}
console.log(sum); // -> 29

// 방법 2
var a = [2, 5, -1, 7, -3, 6, 9],
    sum = 0;
for(var x in a) {
	if(a[x] < 0) {
		continue;
	}
	sum += a[x];
}
console.log(sum);

result