Overview
일반적으로 코드의 흐름은 위에서 아래로 향합니다. 제어문을 사용하면 코드의 흐름을 개발자가 원하는 방향으로 바꿀 수 있습니다. 제어문은 if
문, switch
문을 사용하는 조건문과 for
문, while
문, do while
문을 사용하는 반복문으로 분류된다.
- 조건문 :
if
문, switch
문 - 반복문 :
for
문, while
문, do while
문
학습 목표
- 조건문 기초, 실습
- if 와 else if , else, switch를 이해하고 활용할 수 있다.
- 논리연산자(&&, ||, ! …)를 활용하여 복잡한 조건을 간결하게 작성할 수 있다.
- 조건문 문제로 배우는 알고리즘
- 복잡한 조건문을 활용하여, 실생활에서 마주하는 문제를 해결하기 위한 알고리즘을 구현할 수 있다.
- 반복문 기초 / 실습
- 반복문을 활용하여 단순한 기능을 반복하여 수행할 수 있다.
- 반복문과 문자열, 숫자를 이용해 반복적으로 코드를 실행시킬 수 있다.
- 반복문을 다양하게 응용하여 활용할 수 있다.
- for문과 while문의 공통점과 차이점을 이해할 수 있다.
- 반복문에 조건문을 적용하여 특정 조건에서만 코드가 실행되도록 할 수 있다.
- 이중 for문이 무엇인지 이해하고 활용할 수 있다.
1. 조건문
1.1. if 문
if
문의 소괄호 안에는 boolean
값으로 평가될 수 있는 조건식을 넣어주고- 중괄호 안의 실행 블록에는 조건식이 참일 때 실행하고자 하는 코드 작성
1
2
3
| if (조건식) {
//조건식이 참이라면 실행되는 블록입니다.
}
|
블록(block): 중괄호({}
)를 이용해 여러 문장을 하나의 단위로 묶음
1.2. if…else문
if...else
문은 조건식의 결과에 따라 실행블록을 선택if
문의 조건식이 true
이면 해당 블록이 실행되고, 조건식이 false
이면 다음으로 넘어가 else if
문의 조건식을 검사else if
문의 모든 조건식이 false
라면, 나머지 경우를 의미하는 else
블록이 실행
1
2
3
4
5
6
7
8
9
10
| if(조건식1) {
//조건식1이 참이라면, 실행되는 블록입니다.
}
else if (조건식2) {
//조건식1이 참이 아니면서 조건식2가 참일 때, 실행되는 블록입니다.
}
else {
//조건식1과 2가 모두 참이 아닐 때, 실행되는 블록입니다.
//else문은 생략 가능합니다.
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| package com.company;
import java.util.Scanner;
public class Main {
static Scanner myInput = new Scanner(System.in);
public static void main(String[] args) {
String dice = myInput.nextLine(); //주사위 번호 입력값을 받아옵니다.
if (dice.equals("1")) { // 입력한 주사위 번호가 1이면 다음 블록을 실행
System.out.println("1번"); // 콘솔에 "1번"을 출력
}
else if (dice.equals("2")) {
System.out.println("2번");
}
else if (dice.equals("3")) {
System.out.println("3번");
}
else if (dice.equals("4")) {
System.out.println("4번");
}
else if (dice.equals("5")) {
System.out.println("5번");
}
else if (dice.equals("6")) {
System.out.println("6번");
}
else {
System.out.println("없는 숫자! " + dice);
}
}
}
|
1.3. Switch문
- 변수가 어떤 값을 갖느냐에 따라 실행문이 선택
- 변수의 값에 따라서 실행문이 결정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| package com.company;
import java.util.Scanner;
public class Main {
static Scanner myInput = new Scanner(System.in);
public static void main(String[] args) {
String dice = myInput.nextLine(); //주사위 번호 입력
switch (dice) {
case "1":
System.out.println("1번");
break; //다음 case를 실행하지 않고, switch문 탈출!
case "2":
System.out.println("2번");
break;
case "3":
System.out.println("3번");
break;
case "4":
System.out.println("4번");
break;
case "5":
System.out.println("5번");
break;
case "6":
System.out.println("6번");
break;
default: //switch문의 괄호 안 값과 같은 값이 없으면, 여기서 실행문 실행
System.out.println("없는 숫자! " + dice);
break;
}
}
}
|
- 괄호 안의 값과 동일한 값을 갖는
case
로 가서 실행문을 실행 - 만약 괄호 안의 값과 동일한 값을 갖는
case
가 없으면 default
로 가서 실행문을 실행(default
는 생략 가능) case
안의 실행문을 실행하고 실행이 완료되면 break
를 통해서 switch
문을 탈출- fall through:
break
문을 작성하지 않으면 switch
문을 탈출하지 않고 모든 case
문을 실행하게 되어 원하는 방식으로 동작하지 않음 switch
문에는 int
뿐만 아니라, char
타입 변수도 사용가능하고, 자바 7부터는 String
타입의 변수도 올 수 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| // 직급을 입력받아 값에 따라 해당하는 월급을 출력하는 예제
package com.company;
public class Main {
static Scanner userInput = new Scanner(System.in);
public static void main(String[] args) {
String yourPosition = userInput.nextLine(); //입력받기
switch(yourPosition){
case "Senior" : // Senior일 경우
System.out.println("700만원");
break;
case "Junior" : //Junior 또는 Manager일 경우
case "Manager" : //실행문이 같으면 이렇게 작성 가능
System.out.println("500만원");
break;
default:
System.out.println("300만원");
break;
}
}
}
|
자바 14에서 표준화된 향상된 switch
문(enhanced switch문)
- 여러조건에 따라,
,
로 구분하여 한 번에 처리할 수 있다. :
대신에 >
를 사용하고, break문이 생략 ( >
람다식과 유사하게 화살표를 사용하여 람다 스타일 구문이라고도 함)>
를 사용했다면 실행문이 2개 이상이거나, 반환값이 존재할 경우 중괄호 블록({ }
)을 사용( :
을 사용하면, 실행문이 여러개라 할지라도 중괄호 블록({ }
)을 사용하지 않아도 됨 )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| //직급별 월급 출력하기
package com.company;
public class Main {
static Scanner userInput = new Scanner(System.in);
public static void main(String[] args) {
String[] positionList = {"Manager", "Senior", "Junior"};
String yourPosition = userInput.nextLine(); // 입력 받기
switch (yourPosition) {
case "Senior" -> System.out.println("700만원");
case "Junior", "Manager" -> System.out.println("500만원");
}
}
}
|
2. 반복문
반복문은 코드들이 반복적으로 실행되도록 할 때 사용
for
문 (반복횟수를 알고 있을 때 주로 사용)while
문 (조건에 따라 반복할 때 주로 사용)do-while
문
2.1. for문
조건식이 참인 동안 주어진 횟수만큼 실행문을 반복적으로 수행
1
2
3
4
5
6
7
8
9
10
| public class Main {
public static void main(String[] args) {
int sum = 0;
// for (초기화; 조건식; 증감식)
for(int num = 0; num < 10; num++) {
sum += num;
}
System.out.println(sum); // 1~9의 합인 45가 출력됩니다.
}
}
|
향상된 for문 (Enhanced for 문)
향상된 for
문은 반복실행을 하기 위해 카운터 변수와 증감식을 사용하지 않는다.
배열 및 컬렉션 항목의 개수만큼 반복하고 자동적으로 for
문을 빠져나간다.
1
2
3
4
5
6
7
8
9
10
11
12
13
| public class EnhancedForLoop {
public static void main(String[] args) throws Exception {
String[] names = {"kimcoding", "javalee", "ingikim"};
for(String name : names) { // 배열에서 꺼낸 항목을 저장할 변수 선언, 콜론( : ), 그리고 사용할 배열이 작성
System.out.println(name + "님은 자바를 공부중 입니다.");
}
}
}
/*
kimcoding님은 자바를 공부중 입니다.
javalee님은 자바를 공부중 입니다.
ingikim님은 자바를 공부중 입니다.
*/
|
2.2. while문
for
문이 정해진 횟수만큼 반복한다면, while
문은 조건식이 true
일 경우에 계속해서 반복
1
2
3
4
5
| (초기화); // 필요가 없다면 생략 가능
while(조건식) {
실행문; //조건식이 참인 동안 실행
증감식; // 필요가 없다면 생략 가능
}
|
1
2
3
4
5
6
| int num = 0, sum = 0; // 정수 타입의 변수를 선언하고 초기값으로 0을 대입
while(num <= 10) { // num이 10인 경우까지 반복
sum += num; //sum = sum + num과 같은 식, 복합 대입 연산자 "+="를 사용한 표현 -> sum이 현재의 num만큼 증가하고
num++; // num이 1 증가
}
System.out.println(sum);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public class Main {
public static void main(String[] args) {
boolean run = true;
int num = 1;
while(run){ // while(true) 조건문
num++; // 실행문
System.out.println(num); // 실행문
if(num == 22) { // 조건문, num이 22가 되면 탈출! 얏호!
run = false;
}
}
}
}
|
2.3. do-while문
- 조건식에 의해 반복 실행한다는 점에서는
while
문과 동일 - 블록 내부의 실행문을 우선 실행시키고 실행 결과에 따라서 반복 실행을 계속 할지 결정
1
2
3
| do {
(1)실행문 //처음 한 번은 무조건 실행
} while((2)조건식);
|
do-while
문이 처음 실행될 때
- (1)실행문을 먼저 실행합니다.
- (1)실행문이 모두 실행되면 (2)조건식을 평가
- 그 결과가
true
이면 (1)실행문 → (2)조건식으로 반복 실행 false
이면 do-while
문을 종료
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| // 1~10 사이의 정수를 변수 randomNum에 저장하고 이 값을 맞출 때까지 반복하는 do-while문
import java.util.Scanner;
public class Main {
public static void main(String args[]){
int input = 0, randomNum = 0;
randomNum = (int)(Math.random() * 10) + 1; // 1 ~ 10 임의의 수를 생성
Scanner scanner = new Scanner(System.in);
do{
System.out.println("1과 10 사이의 정수를 입력하세요");
input = scanner.nextInt();
if(input > randomNum) {
System.out.println("더 작은 정수를 입력하세요");
} else if (input < randomNum) {
System.out.println("더 큰 정수를 입력하세요");
}
} while(input != randomNum);
System.out.println(randomNum +" 정답입니다!");
}
}
|
2.4. break문
- 반복문인
for
문, while
문, do-while
문을 실행 중지할 때 사용 switch
문에서도 break
문을 사용하여 switch
문을 종료- 대개
if
문과 같이 사용되며, if
문의 조건식에 따라 for
/ while
문을 종료 할 때 사용 - 반복문이 중첩되어 있을 경우
break
문은 가장 가까운 반복문만 종료하고, 바깥쪽 반복문에는 영향을 끼치지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| public class Main {
public static void main(String[] args) {
Outer : for (int i = 3; i < 10; i++) { // 3부터 9까지 반복 Outer라는 라벨을 붙이고, 이를 break문에 사용 한다.
for (int j = 5; j > 0; j--) { // 5부터 1까지 반복
System.out.println("i " + i + " j "+ j);
if (i == 5) {
break Outer; // 레이블문을 쓰면, 중첩된 for문 안에서도 바깥쪽 for문까지 완벽하게 빠져나올 수 있다.
}
}
}
}
}
/*
i 3 j 5
i 3 j 4
i 3 j 3
i 3 j 2
i 3 j 1
i 4 j 5
i 4 j 4
i 4 j 3
i 4 j 2
i 4 j 1
i 5 j 5
*/
|
2.5. continue문
for
문, while
문, do-while
문에서만 사용- 블록 내부에서
continue
문이 실행되면 for
문의 증감문 혹은 while
, do-while
문의 조건식으로 이동하여 작동 continue
문과 break
문의 차이점은 반복문 종료 여부continue
문은 반복문을 종료하지 않고 다음 차례로 넘어가 계속 반복을 수행,- 보통
if
문과 함께 사용하는데, if
문의 조건을 만족하는 경우 continue
문을 실행하여 그 이후의 코드를 실행하지 않고 다음 반복으로 넘어감
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| // 1 ~10까지의 수 중에서 홀수만 출력하는 코드
public class Main {
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) { //나머지가 0으로 짝수인 경우는 다시 for문의 증감문으로 이동하여 다음 반복을 실행하고, 홀수만 출력
continue; //다음 반복으로 넘어간다.
}
System.out.println(i); //홀수만 출력
}
}
}
/*
1,3,5,7,9
*/
|
Reference
Comments powered by Disqus.