티스토리 뷰
제어문은 프로그램에서 프로그램의 순서를 변경하는 것입니다. 즉 순차적으로 하나씩 실행하던 것을 조건에 따라서 다른 것을 실행할 때 사용합니다. 제어문은 다음과 같은 종류가 있습니다.
- 선택 제어문 : if , switch
- 반복 제어문 : for, while, do.. while
- 제어 키워드 : break, continue
제어문 | 문장 | 기능 |
if |
• If
• if – else
• If – else if – else
|
주어진 조건에 따라서 실행문의 실행 여부 결정 |
switch |
• switch (위치변수) {
…..case 값1: ….. case 값n: ….. default : } |
위치변수의 값에 따라서 특정위치(case)의 실행문 실행 |
for |
• for ( 초기값 ; 종료조건 ; 증감 )
|
반복 횟수를 정해 놓고 반복 실행 |
while |
• while (조건) { ….. }
|
조건이 만족 할 때 까지 반복 실행 |
do .. while |
• do { ….. } while (조건)
|
한번 실행 후 조건이 만족하면 반복 실행 |
제어 키워드 | 기능 |
break |
• 제어문 탈출
|
continue |
• 반복 실행 중 건너 뛰기
|
1. if 문
특정 조건에 따라서 실행문을 실행합니다.
1. if ( 조건식 ) 실행문 A
조건식이 만족하면 실행문(명령문 A)을 실행하고 만족하지 않으면 명령문 C를 실행하는 구문으로 조조 건에 관계없이 명령문 C를 실행하고 싶을 때 사용합니다.
2. if ( 조건식 ) {
명령문 A;
} else {
명령문 B;
}
명령문 C;
- 명령문을 실행 후 조건이 참인 경우(명령문 A)와 거짓인 경우(명령문 B) 각각 다른 실행문(명령문)을 실행하고 명령문 C를 실행하고자 할 때 사용합니다.
3. If ( 조건식 ) {
명령문 A;
} else If ( 조건식 ) {
명령문 B;
} else {
명령문 C;
}
명령문 D
public class ControlIf {
public static void main(String[] args) {
int num01 = 10;
int num02 = 20;
if ( num01 < num02 ) { // num01 이 num02 보다 작으면
System.out.println(String.format("if :: %s < %s 는 만족 합니다.", num01, num02));
}
if ( num01 < num02 ) { // 조건이 만족 하면
System.out.println(String.format("if - else :: %s < %s 는 만족 합니다.", num01, num02));
} else { // 조건이 만족 하지 않으면
System.out.println(String.format("if - else :: %s < %s 는 불만족 합니다.", num01, num02));
}
int score = 88;
if ( score < 80 ) {
System.out.println(String.format(" ⓐ if - else if - else :: %s 는 80이하 입니다.", score));
} else if ( score >= 80 && score < 90 ) {
System.out.println(String.format(" ⓑ if - else if - else :: %s 는 80이상 90이하 입니다.", score));
} else if ( score >= 90 && score < 100 ) {
System.out.println(String.format(" ⓒ if - else if - else :: %s 는 90이상 1000이하 입니다.", score));
} else if ( score == 100 ) {
System.out.println(String.format(" ⓓ if - else if - else :: %s 는 100 입니다.", score));
} else {
System.out.println(String.format(" ⓔ if - else if - else :: %s 는 잘못 입력된 점수 입니다.", score));
}
}
}
- 변수 score가 80보다 작으면 ⓐ가 실행되고 80과 90 사이면 ⓑ, 90부터 99까지이면 ⓒ, 100이면 ⓓ, 조건에 모두 만족하지 않으면 ⓔ를 실행합니다.
2 switch
. 변숫값에 따라서 특정 명령문을 실행합니다.
. break를 사용해서 switch를 탈출합니다.
. case 블록에 break를 사용하지 않으면 다음 case의 값을 검사합니다. 프로그램에서 의도적으로 해야 하는 경우는 제외하고는 break를 사용해야 합니다.
public class ControlSwitch {
public static void main(String[] args) {
int num = 2;
switch(num) {
case 0:
case 1:
case 2:
System.out.println(" ⓐ 인위적을 1,2,3 수용");
break;
case 3:
System.out.println(" ⓑ num = 3");
break;
case 4:
System.out.println("num = 4");
break;
case 5:
System.out.println("num = 5");
break;
default:
System.out.println(" ⓒ num가 5 보다 큽니다.");
}
}
}
num 0, 1, 2 이면 ⓐ가 실행되고 switch문을 벗어납니다. 이런 코드는 일반적인 코드가 아니고 프로그래머의 의도적으로 사용한 것입니다. 일반적으로 switch는 case의 상수가 맞으면 해당 블록 ( 예 : ⓑ )를 실행하고 switch문을 벗어나야 합니다. 만약 변수 num 이 3이고 case 3 블록에서 break가 없으면 ⓑ가 실행되고 default의 ⓒ 까지 실행되어 프로그램의 의도에 벗어난 결과가 나올 수 있으므로 주의를 해야 합니다.
3. for
반복 횟수를 정해놓고 실행 구문을 반복할 때 사용합니다. 반복문을 벗어나기 위해서는 break문을 사용해서 for 블록을 벗어납니다. 만약 중첩 for문이면 break는 사용한 for 블록을 벗어납니다.
- for ( 초기값 ; 조건식; 증감식 )
- for ( type 요소 : Object ) : foreach
public class ControlFor {
public static void main(String[] args) {
int index ;
int num = 0;
System.out.println("==== ⓐ for 문 안에서 후위형 증감");
for ( index = 0; index < 5; index++) {
num = ++num;
System.out.println(String.format("i : %s , num : %s", index, num));
}
System.out.println("==== ⓑ for 문 안에서 전위형 증감");
num = 0;
for ( int i = 0; i < 5; i++) {
num = num++;
System.out.println(String.format("i : %s , num : %s", i, num));
}
System.out.println("==== ⓒ 문자열 한 단어 씩 출력");
String str = new String("자바 언어");
for ( int i = 0; i < str.length(); i++) {
System.out.println(String.format("i : %s , num : %s", i, str.charAt(i)));
}
System.out.println("==== ⓓ 문자열 한 단어 씩 출력 ( foreach ) ");
char[] chstr = str.toCharArray(); // 문자열을 문자 배열로 변환
for ( char c : chstr) {
System.out.println(String.format("c : %s" , c));
}
}
}
ⓐ : 변수 index의 범위는 main 함수 내에서 유효하므로 다른 for 문안에서 사용 불가
-> for 문은 블록 범위 이므로 index는 for 문에서 선언하는 것이 좋습니다.
for ( int index = 0; index < 5; i++) { … )
ⓑ : 후위 증감 연산자를 사용하였으므로 언제나 0입니다. 주의하여야 합니다.
ⓒ : String은 forEach 사용 불가합니다.
문자 하나씩 얻기 위해서 charAt 사용합니다.
ⓓ : 문자열을 한 단어 씩 처리하기 위해서는 문자 배열로 변환 ( toCharArray() )합니다. 참조형 ( Object )는 forEach 사용하는 것이 좋습니다. 모든 형을 사용할 수 있습니다.
4. while
조건식이 참인 동안 중괄호 안의 실행문을 실행합니다. 조건이 맞지 않으면 한 번도 실행이 되지 않을 수 있습니다.
또한 조건식을 잘못 사용하면 무한 루프 처리될 수 있으므로 주의가 필요합니다.
- while(조건식) { 실행문 }
public class ControlWhile {
public static void main(String[] args) {
int num = 0;
System.out.println(String.format("시작 : num : %s", num));
// ⓐ
while ( num < 5) {
num = ++num;
System.out.println(String.format("num : %s", num));
}
System.out.println(String.format("종료 : num : %s", num));
// ⓑ
while ( num < 10) {
num = ++num;
if ( num == 8 ) {
System.out.println(String.format("beak 탈출 num : %s", num));
break;
}
System.out.println(String.format("num : %s", num));
}
System.out.println(String.format("종료 : num : %s", num));
}
}
ⓐ : 전위 증감을 사용하여서 num이 5이면 while문을 벗어나게 됩니다.
- 후위 증감을 사용하면 무한 루프에 빠지게 됩니다. (주의 필요 )
ⓑ : num이 8과 같으며 break문으로 탈출합니다.
5. do.. while
한번 실행 후 while의 조건식이 만족하지 않으면 탈출합니다. 무조건 한번 실행하며, 무한 루프 처리될 수 있으므로 주의가 필요합니다. break문을 사용해서 탈출하는 로직을 만들어야 합니다.
- do { 실행문 } while(조건식)
public class ControlDoWhile {
public static void main(String[] args) {
int num = 0;
System.out.println(String.format("시작 : num : %s", num));
// ⓐ
do {
num = ++num;
System.out.println(String.format("num : %s", num));
} while ( num < 1);
System.out.println(String.format("종료 : num : %s", num));
// ⓑ
do {
num = ++num;
System.out.println(String.format("num : %s", num));
} while ( num < 5);
System.out.println(String.format("종료 : num : %s", num));
// ⓒ
do {
num = ++num;
if (num == 8) {
System.out.println(String.format("탈출 num : %s", num));
break;
}
System.out.println(String.format("num : %s", num));
} while ( num < 10);
System.out.println(String.format("탈출 종료 : num : %s", num));
}
}
ⓐ : 무조건 한번 실행
ⓑ : num을 1씩 증가하다가 조건 만족 ( num < 5 )이면 while문을 벗어납니다.
ⓒ : num 이 8이면 break문을 만나서 while문을 벗어납니다.
6. break, continue
- break : 반복문 탈출 -> 중첩인 경우 실행 중인 반복문 탈출
- continue : 다시 반복문 실행
public class ControlBreakContinue {
public static void main(String[] args) {
int num = 0;
for (int x = 0; x < 5; x++) {
if (x == 4) {
System.out.println(String.format("스킵 x : %s , num : %s", x, num));
continue;
}
for (int y = 0; y < 5; y++) {
num = ++num;
if (y == 3) {
System.out.println(String.format("탈출 x : %s , y : %s, num : %s", x, y, num));
break;
}
System.out.println(String.format("x : %s , y : %s, num : %s", x, y, num));
}
}
}
}
결과
소스 : https://github.com/hyomee/JAVA_EDU/tree/main/Control
'Java > 기본' 카테고리의 다른 글
029. 클래스 ( Class ) (0) | 2022.05.11 |
---|---|
028. 객체 지향 프로그램 ( OOPL ) (0) | 2022.05.09 |
026. 자바 : instance 연산자 (0) | 2022.03.06 |
025. 자바 : 삼항연산자 (0) | 2022.03.06 |
024. 자바 : 논리 연산자 (0) | 2022.03.06 |