"브레이크 (프로그래밍)"의 두 판 사이의 차이
잔글 (Asadal님이 브레이크 문서를 브레이크 (프로그래밍) 문서로 이동했습니다) |
|||
(사용자 2명의 중간 판 15개는 보이지 않습니다) | |||
8번째 줄: | 8번째 줄: | ||
3. goto 문 | 3. goto 문 | ||
− | 이 중에서 break문은 제어문 수행 중 일정 조건에 의해서 제어문에서 빠저나가는 경우에 사용을 한다. | + | 이 중에서 break문은 제어문 수행 중 일정 조건에 의해서 제어문에서 빠저나가는 경우에 사용을 한다. 쉽게 말해 해당 부분을 빠져나오는 용법이라 할 수 있다. '해당 부분'이라고 표현한 이유는 break는 꼭 for문 뿐만이 아니라, switch문과 select문에서도 사용할 수 있기 때문이다. for문과 동일하게 모든 용법에서 그 쓰임이 동일하다.<ref name="제어문"><[https://edu.goorm.io/learn/lecture/2010/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-%EA%B3%A0%EB%9E%AD-%EA%B8%B0%EC%B4%88/lesson/174451/break-continue-goto%EB%AC%B8 break, continue, goto문]><<천방지축 개발노트>>,2019-02-15</ref> |
− | == | + | == 특징 == |
+ | * break문은 '직속 for문'을 빠져나오게 해준다. 여러 for문이 중첩되어 있는 상황일 때 break문을 쓰면 break문이 있는 for문만 빠져나오게 된다. 그리고 해당 for문을 빠져나온 뒤 바로 다음 문장을 실행시킨다. | ||
+ | * break문은 보통 단독으로 사용되지만, 경우에 따라 "break 레이블이름"과 같이 사용되어 지정된 레이블로 이동할 수 있다. 쉽게 말해서 해당 for문을 빠져나옴과 동시에 지정한 레이블로 이동한다는 뜻이다. 여기서 주의해야할 점은 'break 레이블이름'으로 되어있을 때 직속 for문을 빠져나와 해당 레이블로 이동하고 break문이 바로 빠져나왔떤 for문 다음 문장을 실행하게 한다.<ref name="제어문"/> | ||
+ | |||
+ | === break문과 return문의 차이 === | ||
+ | |||
+ | break문과 return문의 기능을 서로 헷갈려 하는 경우가 있는데 둘의 기능은 확연히 다르다. | ||
+ | |||
+ | break 문 특징<br> | ||
+ | 1. 가장 가까이에 있는 하나의 방복문을 벗어난다.<br> | ||
+ | break문이 실행되면 Loop가 전부 끝나지 않았음에도 해당 반복문을 즉시 탈출한다. | ||
− | + | return 문 특징<br> | |
+ | 1. 쓰여진 해당 함수에서의 탈출을 의미한다.<br> | ||
+ | 예를 들어, return문 실행 시 '반복문을 포함하는 메서드' 자체를 종료시킨다. | ||
+ | |||
+ | 2. 메서드 내에서 return이 실행되면 뒷줄에 코드가 더 있더라도 값을 반환 후 종료시킨다. | ||
+ | |||
+ | 3. 메서드의 출력값은 return 명령어로만 가능하다. | ||
+ | |||
+ | 4. 메서드의 리턴자료형이 void인 경우에는 return문이 필요없다. | ||
+ | |||
+ | 5. return;문만을 써서 메소드를 빠져나가는 방법은 리턴 자료형이 void형인 메서드에만 해당된다.<br> | ||
+ | 리턴 자료형이 명시되어 있는 메서드에서는 return;문만을 작성하면 컴파일 오류가 발생한다.<ref><[https://hoon93.tistory.com/8 break와 return의 차이 및 특징 정리]><<천방지축 개발노트>>,2019-02-15</ref> | ||
== 활용 == | == 활용 == | ||
− | + | === for 문 === | |
//기존 단일 loop | //기존 단일 loop | ||
int a = 3; | int a = 3; | ||
42번째 줄: | 63번째 줄: | ||
이렇게 사용하면 i가 1일 때 바로 break문을 타고 for문을 벗어나기 때문에 결과물이 1이 출력된다.<ref name="반복문"><[https://docu94.tistory.com/41 반복문]><<독서하는 개발자's Blog>>, 2019-03-11</ref> | 이렇게 사용하면 i가 1일 때 바로 break문을 타고 for문을 벗어나기 때문에 결과물이 1이 출력된다.<ref name="반복문"><[https://docu94.tistory.com/41 반복문]><<독서하는 개발자's Blog>>, 2019-03-11</ref> | ||
− | void foo(int i) | + | === switch 문 === |
− | { | + | void foo(int i) |
− | + | { | |
− | + | printf("안녕하세요(작동 Raimon 여기)."); | |
− | } | + | return i + 10; |
− | + | } | |
+ | |||
void iffunc(int input) | void iffunc(int input) | ||
{ | { | ||
53번째 줄: | 75번째 줄: | ||
{ | { | ||
// Do Something | // Do Something | ||
− | + | } | |
else if(foo(input) == 2) | else if(foo(input) == 2) | ||
{ | { | ||
70번째 줄: | 92번째 줄: | ||
이 예제를 보면, foo(input)의 값은 변하지 않음이 보장되어 있음에도 불구하고 동일한 함수의 호출을 여러번 하는 결과가 나타난다. 이를 switch문으로 개선하면 다음과 같다. | 이 예제를 보면, foo(input)의 값은 변하지 않음이 보장되어 있음에도 불구하고 동일한 함수의 호출을 여러번 하는 결과가 나타난다. 이를 switch문으로 개선하면 다음과 같다. | ||
− | void foo(int i) | + | void foo(int i) |
− | { | + | { |
− | + | printf("foo 함수가 실행되었습니다."); | |
− | + | return i + 10; | |
− | } | + | } |
− | + | ||
void switchfunc(int input) | void switchfunc(int input) | ||
{ | { | ||
98번째 줄: | 120번째 줄: | ||
이처럼 switch문은 foo(input)함수를 한번만 실행하고 그 결과값을 대조하게 함으로써 전체 코드의 실행 시간을 단축시킨다.<ref name="switch"><[https://ko.wikipedia.org/wiki/Switch_%EB%AC%B8 switch문]><<위키백과>></ref> | 이처럼 switch문은 foo(input)함수를 한번만 실행하고 그 결과값을 대조하게 함으로써 전체 코드의 실행 시간을 단축시킨다.<ref name="switch"><[https://ko.wikipedia.org/wiki/Switch_%EB%AC%B8 switch문]><<위키백과>></ref> | ||
− | |||
{{각주}} | {{각주}} | ||
== 참고자료 == | == 참고자료 == | ||
+ | *<[https://hoon93.tistory.com/8 break와 return의 차이 및 특징 정리]><<천방지축 개발노트>>,2019-02-15 | ||
+ | *<[https://docu94.tistory.com/41 이중루프, for문 빠져나가는 방법]><<독서하는 개발자>>,2019-03-11 | ||
+ | *<[https://ko.wikipedia.org/wiki/Switch_%EB%AC%B8 switch 문]><<위키백과>> | ||
+ | *<[https://edu.goorm.io/learn/lecture/2010/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-%EA%B3%A0%EB%9E%AD-%EA%B8%B0%EC%B4%88/lesson/174451/break-continue-goto%EB%AC%B8 break, continue, goto문]><<한 눈에 끝내는 고랭 기초>> | ||
+ | |||
+ | == 같이 보기 == | ||
+ | * [[반복문]] | ||
+ | * [[조건문]] | ||
+ | * [[객체지향 프로그래밍]] | ||
+ | * [[리턴]] | ||
+ | * [[루프]] | ||
+ | * [[브레이크]] | ||
− | + | {{프로그래밍|검토 필요}} |
2020년 8월 26일 (수) 00:55 기준 최신판
브레이크(break)는 프로그래밍 언어에서 for 또는 while 등의 반복문(Loop)을 벗어날 때 사용하는 명령어이다. 조건문인 switch문에서 벗어날 때도 사용한다. return문이 결과값을 반환하는 반면, break문은 어떤 결과값도 반환하지 않는다.
개요[편집]
반복문의 흐름제어에는 3가지 키워드가 있다.
1. break 문 2. countinue 문 3. goto 문
이 중에서 break문은 제어문 수행 중 일정 조건에 의해서 제어문에서 빠저나가는 경우에 사용을 한다. 쉽게 말해 해당 부분을 빠져나오는 용법이라 할 수 있다. '해당 부분'이라고 표현한 이유는 break는 꼭 for문 뿐만이 아니라, switch문과 select문에서도 사용할 수 있기 때문이다. for문과 동일하게 모든 용법에서 그 쓰임이 동일하다.[1]
특징[편집]
- break문은 '직속 for문'을 빠져나오게 해준다. 여러 for문이 중첩되어 있는 상황일 때 break문을 쓰면 break문이 있는 for문만 빠져나오게 된다. 그리고 해당 for문을 빠져나온 뒤 바로 다음 문장을 실행시킨다.
- break문은 보통 단독으로 사용되지만, 경우에 따라 "break 레이블이름"과 같이 사용되어 지정된 레이블로 이동할 수 있다. 쉽게 말해서 해당 for문을 빠져나옴과 동시에 지정한 레이블로 이동한다는 뜻이다. 여기서 주의해야할 점은 'break 레이블이름'으로 되어있을 때 직속 for문을 빠져나와 해당 레이블로 이동하고 break문이 바로 빠져나왔떤 for문 다음 문장을 실행하게 한다.[1]
break문과 return문의 차이[편집]
break문과 return문의 기능을 서로 헷갈려 하는 경우가 있는데 둘의 기능은 확연히 다르다.
break 문 특징
1. 가장 가까이에 있는 하나의 방복문을 벗어난다.
break문이 실행되면 Loop가 전부 끝나지 않았음에도 해당 반복문을 즉시 탈출한다.
return 문 특징
1. 쓰여진 해당 함수에서의 탈출을 의미한다.
예를 들어, return문 실행 시 '반복문을 포함하는 메서드' 자체를 종료시킨다.
2. 메서드 내에서 return이 실행되면 뒷줄에 코드가 더 있더라도 값을 반환 후 종료시킨다.
3. 메서드의 출력값은 return 명령어로만 가능하다.
4. 메서드의 리턴자료형이 void인 경우에는 return문이 필요없다.
5. return;문만을 써서 메소드를 빠져나가는 방법은 리턴 자료형이 void형인 메서드에만 해당된다.
리턴 자료형이 명시되어 있는 메서드에서는 return;문만을 작성하면 컴파일 오류가 발생한다.[2]
활용[편집]
for 문[편집]
//기존 단일 loop int a = 3; for (int i=0; i<a; i++{ System.out.println(i); }
// 결과물 0 1 2
// break 문 활용 int a = 3; for(int i=0; i<a; i++){ if(i=1){ System.out.println(i); break; } }
// 결과물 1
이렇게 사용하면 i가 1일 때 바로 break문을 타고 for문을 벗어나기 때문에 결과물이 1이 출력된다.[3]
switch 문[편집]
void foo(int i) { printf("안녕하세요(작동 Raimon 여기)."); return i + 10; } void iffunc(int input) { if(foo(input) == 1) { // Do Something } else if(foo(input) == 2) { // Do Something } else if(foo(input) == 3) { // Do Something } else { // Do Something } }
이 예제를 보면, foo(input)의 값은 변하지 않음이 보장되어 있음에도 불구하고 동일한 함수의 호출을 여러번 하는 결과가 나타난다. 이를 switch문으로 개선하면 다음과 같다.
void foo(int i) { printf("foo 함수가 실행되었습니다."); return i + 10; } void switchfunc(int input) { switch(foo(input)) { case 1: // Do Something; break; case 2: // Do Something; break; case 3 // Do Something; break; default: // Do Something; break; } }
또한 switch case문에서 case에 있는 상수 1, 2, 3 등 바이너리의 jump table에 미리 기록되어서 조건에 맞으면 jump table의 주소를 참조하여 빠르게 다음 코드를 처리할 수 있다.
이처럼 switch문은 foo(input)함수를 한번만 실행하고 그 결과값을 대조하게 함으로써 전체 코드의 실행 시간을 단축시킨다.[4]
각주[편집]
- ↑ 1.0 1.1 <break, continue, goto문><<천방지축 개발노트>>,2019-02-15
- ↑ <break와 return의 차이 및 특징 정리><<천방지축 개발노트>>,2019-02-15
- ↑ <반복문><<독서하는 개발자's Blog>>, 2019-03-11
- ↑ <switch문><<위키백과>>
참고자료[편집]
- <break와 return의 차이 및 특징 정리><<천방지축 개발노트>>,2019-02-15
- <이중루프, for문 빠져나가는 방법><<독서하는 개발자>>,2019-03-11
- <switch 문><<위키백과>>
- <break, continue, goto문><<한 눈에 끝내는 고랭 기초>>
같이 보기[편집]
이 브레이크 (프로그래밍) 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.