- 프로그램의 흐름을 바꾸는 문장들을 제어문이라고 하며, 제어문에는 조건문과 반복문이 있다.
1. 조건문
- 조건식과 문장을 포함하는 블럭으로 구성되어 있다.
- 조건식의 연산 결과에 따라 프로그램의 실행 흐름을 변경할 수 있다.
1-1. if문
- `if(조건식) { // 조건식이 참일 때 수행될 문장들 }`
- 조건식이 참이면 블럭 안의 문장들이 수행되고, 거짓이면 if문 다음의 문장으로 넘어간다.
1-2. if-else문
- if-else문은 조건식이 거짓일 때 else 블럭의 문장들을 수행한다.
- 두개의 if문을 항상 if-else문으로 바꿀 수 있는 것은 아니고, 상반된 관계에 있을 때만 가능하다.
if(input == 0) {
System.out.println("0입니다.");
}
if(input != 0) {
System.out.println("0이 아닙니다.");
}
if(input == 0) {
System.out.println("0입니다.");
} else {
System.out.println("0이 아닙니다.");
}
- 아래의 if-else문은 조건식을 하나만 평가하면 되므로 더 효율적이다.
1-3. if-else if문
- 처리해야 할 경우의 수가 셋 이상인 경우 사용한다.
if(조건식1) {
// 조건식1의 연산결과가 참일 때 수행될 문장
} else if(조건식2) {
// 조건식2의 연산결과가 참일 때 수행될 문장
} else if(조건식3) {
// 조건식3의 연산결과가 참일 때 수행될 문장
} else {
// 위의 어느 조건도 만족하지 않을 때 수행될 문장
}
- 첫번째 조건식부터 순서대로 평가하여 결과가 참인 조건식을 만나면 해당 블럭을 수행하고 if-else if문 전체를 벗어난다.
- else문은 생략이 가능하며, 생략할 경우 if-else if문의 모든 블럭이 수행되지 않을 수 있다.
1-4. 중첩 if문
- if문의 블럭에 또 다른 if문을 포함할 수 있다.
if(조건식1) {
// 조건식1의 연산결과가 참일 때 수행될 문장
if(조건식2) {
// 조건식1과 조건식2의 연산결과가 모두 참일 때 수행될 문장
} else {
// 조건식1이 참이고 조건식2가 거짓일 때 수행될 문장
}
} else {
// 조건식1의 연산결과가 거짓일 때 수행될 문장
}
1-5. switch문
- 하나의 조건식으로 많은 경우의 수를 처리할 때 사용한다.
- 조건식을 먼저 계산한 후, 결과와 일치하는 case문으로 이동한다.
- 이동한 case문 아래의 문장들을 수행하다가 break문을 만나면 전체 switch문을 탈출한다.
- 중첩이 가능하다.
switch(조건식) {
case 값1 :
// 조건식의 결과가 값1과 같을 경우 수행될 문장
break;
case 값2 :
// 조건식의 결과가 값2와 같을 경우 수행될 문장
break;
default :
// 조건식의 결과와 일치하는 case문이 없을 경우 수행될 문장
}
- default문의 위치는 상관없다.
- break문을 생략할 경우 다른 break문을 만날 때까지 수행을 계속할 수 있어 주의해야 한다.
- 고의적으로 생략하기도 한다.
switch문의 제약조건
1. switch문의 조건식 결과는 정수, 문자, 문자열이어야 한다.
2. case문의 값은 정수 또는 상수만 가능하며, 중복되지 않아야 한다.
2. 반복문
- 어떤 작업이 반복적으로 수행될 때 사용한다.
- for문과 while문은 서로 변환할 수 있다.
2-1. for문
- 반복 횟수를 알고 있을 때 적합하다.
- 초기화, 조건식, 증감식, 블럭으로 이루어져 있다.
- 제일 먼저 초기화가 실행된 후 조건식, 블럭의 문장들, 증감식의 순서로 계속 반복되다가 조건식이 거짓이 되면 for문을 탈출한다.
- 초기화, 조건식, 증감식은 모두 생략 가능하다.
for(초기화; 조건식; 증감식) {
// 조건식의 결과가 참일 경우 수행될 문장
}
2-2. 중첩 for문
- for문 안에 또 다른 for문을 포함할 수 있다.
for(int i=1; i<=5; i++) {
for(int j=1; j<=10; j++) {
System.out.print("*");
}
System.out.println();
}
2-3. 향상된 for문
- JDK 1.5부터 배열과 컬렉션의 요소에 보다 쉽게 접근할 수 있도록 도입되었다.
for(타입 변수명 : 배열 또는 컬렉션) {
// 반복할 문장
}
- 타입은 배열 또는 컬렉션 요소의 타입이어야 한다.
- 매 반복마다 배열 또는 컬렉션에 저장된 값이 순서대로 읽혀서 변수에 저장된다.
- 변수를 이용하여 블럭의 문장이 수행된다.
2-4. while문
- 조건식과 블럭으로 이루어져 있다.
- 조건식이 거짓이 될 때까지 블럭 내의 문장을 반복한다.
- 조건식을 생략할 수 없다.
- 조건식이 상수는 아니지만, 변수가 고정된 값을 유지하기 때문에 특정 조건을 만족할 때 반복을 멈추도록 블럭 안에서 처리가 필요하다.
while(조건식) {
// 조건식의 결과가 참이면 수행될 문장
}
2-5. do-while문
- while문에서 조건식과 블럭의 순서를 바꾼 것이다.
- 블럭을 먼저 수행한 후 조건식을 평가하기 때문에, 블럭이 무조건 한 번은 수행된다.
int input = 0;
int answer = (int)(Math.random() * 100) + 1;
Scanner scanner = new Scanner(System.in);
do {
System.out.print("1과 100 사이의 정수를 입력하세요.");
input = scanner.nextInt();
if(input > answer) {
System.out.print("더 작은 수를 입력하세요.");
} else if(input < answer) {
System.out.print("더 큰 수를 입력하세요.");
}
} while(input != answer);
System.out.println("정답입니다.");
2-6. break문
- 자신이 포함된 가장 가까운 반복문을 벗어난다.
- 주로 if문과 함께 사용되어 특정 조건 만족시 반복문을 벗어나도록 한다.
int sum, i = 0;
while(true) {
if(sum > 100) break;
sum += ++i;
}
2-7. continue문
- 반복문 내에서만 사용될 수 있다.
- 반복문 도중 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.
- 전체 반복 중 특정 조건만 제외하고자 할 때 유용하다.
for(int i=0; i<=10; i++) {
if(i%3==0) continue; // 3의 배수는 출력되지 않도록
System.out.println(i);
}
2-8. 이름 붙은 반복문
- break문과 continue문에 이름을 지정하여 하나 이상의 반복문을 벗어나거나 건너뛰게 할 수 있다.
Loop1 : for(int i=2; i<=9; i++) {
for(int j=1; j<=9; j++) {
if(j==5) break Loop1;
}
}
남궁성 강사님의 자바의 정석 챕터4를 참고하여 작성한 글입니다.
'Java' 카테고리의 다른 글
Java :: 객체지향 II (0) | 2024.07.07 |
---|---|
Java :: 객체지향 I (0) | 2024.07.06 |
Java :: 배열 (0) | 2024.06.24 |
Java :: 연산자 (0) | 2024.06.23 |
Java :: 변수와 형변환에 대하여 (0) | 2024.06.22 |