50
loading...
This website collects cookies to deliver better user experience
LABEL1:
for (int i = 0; i < 1e6; i++) {
for (int j = 0; j < 1e6; j++) {
if (j > 1e3) break LABEL1;
}
}
LABEL1:
for (let i = 0; i < 1e6; i++) {
for (let j = 0; j < 1e6; j++) {
if (j > 1e3) break LABEL1;
}
}
goto
문의 악명이라면 언어 기초를 배운 너희들도 익히 알고 있을 것이다. 굳이 C 언어를 안 배우더라도 주위에서 goto
문에 대한 탄식을 쉽게 접할 정도다.break
문으로 빠져나가게끔 하는 식으로만 지원하도록 디자인했다.continue
문에도 레이블 지원하는데? 라고 하는 개발자가 분명 있을 것이다. 이건 나중에 다루도록 하겠다.public void doWork() {
// 전에 뭐 좀 처리하자.
if(조건에 맞는 처리 시) {
// 공통 처리
// 조건에 맞는 처리 하고 싶다.
} else {
// 공통 처리만 한다.
}
// 공통적인 후처리 좀 하자.
}
public void doWorkWithLabel() {
// 전에 뭐 좀 처리하자.
LABEL1: {
// 공통 처리
if (이건 조건에 안맞는듯) break LABEL1;
// 조건에 맞는 처리 하고 싶다.
}
// 공통적인 후처리 좀 하자.
}
if
구문과 label
구문을 사용한 점이 차이점 되시겠다.break LABEL
문으로 레이블 블록을 종료하면 된다. 공통 처리는 한 곳에만 넣어도 되고, 조건에 안맞으면 바로 공통 후처리를 수행한 후 메소드를 종료한다.public boolean doWorkAndResult() {
if (처리 대상인가?) {
// 전에 뭐 좀 처리하자.
if(이건 스킵해야돼) {
return true;
} else {
// 이건 처리해야돼.
}
// 공통적인 후처리 좀 하자.
return true;
} else return false;
}
close()
메소드 등으로 해제하는 등의 여러 마무리 작업이 있을 것이다. 이걸 if
와 중단 구문으로만 의지하면 커버리지가 심히 안나오는 사태가 생긴다.label
구문으로 손쉽게 해결해준다.public boolean doWorkAndResult() {
if (처리 대상인가?) {
// 전에 뭐 좀 처리하자.
LABEL1: {
if(이건 스킵해야돼) break LABEL1;
// 이건 처리해야돼.
}
// 공통적인 후처리 좀 하자.
return true;
} else return false;
}
label
쓰기 싫다면 쓰지 않아도 된다. 쓰지 않는다면 아래와 같은 코드가 나올 것이다.public boolean doWorkAndResult() {
if (처리 대상인가?) {
// 전에 뭐 좀 처리하자.
if(! 이건 스킵해야돼) {
// 이건 처리해야돼.
}
// 공통적인 후처리 좀 하자.
return true;
} else return false;
}
label
구문처럼, 반복문 외에서도 label
구문이 빛을 발하려면 중첨된 블록이 존재하는 것이 좋다. 가장 대표적인 예가 중첩된 if
문이겠지. if
문도 적당히 써야 하는데 이걸 if
문으로 의지한다면 콜백 지옥과 같은 구문을 만날 수 있다. 이걸 label
문이 해결해준다를 보여주기 위해 간단한 예제를 보여주었다.continue label
문에 대해 설명하겠다. 이건 한글 문서 찾아보기 힘들 터이니 내가 친절하게 설명해주겠다.continue
문은 goto
문처럼 블록을 처음부터 다시 실행해주지 않고, 상태를 유지하면서 다시 레이블 구문을 실행하도록 해준다.continue label
구문을 넣는다면,continue label
일 써봐야 일반 continue
문과 다를 게 없다. 이건 break label
도 마찬가지. 즉, 반복문을 잇거나 종료할 때 하는 기능과 똑같다고 보면 된다.let c=0;
first: for (let i=0;i<1000;i++) {
for(let j=0;j<1000;j++){
if(j==2) continue first;
c++;
if(j==3) break first;
}
};
console.log(c);
console.log
메소드를 통해 출력할 변수 c
값의 결과를 도출하고, 증명하기 바란다.