티스토리 뷰
목표
자바가 제공하는 제어문 학습하기
학습할 것
- 선택문
- 반복문
제어문 종류는 선택문과 반복문이 있는데 선택문에는 if문, switch문이 있고 반복문에는 for문, while문, do-while문이 있다.
1. 선택문(조건문)
제어문 블록 실행이 완료되었을 경우 제어문 블록을 빠져나와 정상 흐름으르 돌아가게 된다.
if문
조건식의 결과에 따라 블록 실행 여부가 결정되며 조건식이 true인 경우 블록을 실행하고 false인 경우 블록을 실행하지 않는다.
if ( 조건식 ) {
실행문;
실행문;
}
public class Example {
public static void main(String[] args) {
int score = 90;
if ( score >= 90 ) {
System.out.println("점수가 90점이거나 90점보다 큽니다.");
}
if ( score < 90 ) {
System.out.println("점수가 90점보다 작습니다.");
}
}
}
if-else문
if문은 else 블록과 함께 사용되어 조건식의 결과에 따라 실행 블록을 선택하게 된다. if문의 조건식이 true인 경우 if문의 블록이 실행되고 조건식이 false인 경우 else 블록이 실행된다. 조건식의 결과에 따라 두 블록 중 한 블록의 내용만 실행하고 전체 if문을 벗어난다.
if ( 조건식 ) {
실행문;
실행문;
} else {
실행문;
}
public class Example {
public static void main(String[] args) {
int score = 85;
if ( score >= 90 ) {
System.out.println("점수가 90점이거나 90점보다 큽니다.");
} else {
System.out.println("점수가 90점보다 작습니다.");
}
}
}
if문으로 조건식을 표현하는 것보다 if-else문을 이용하면 더욱 간결한 코딩으로 실행문을 처리할 수 있다.
if-else if-else문
조건문이 여러 개가 있는 if문이 있는데 처음 if문의 조건식이 false일 경우 다른 조건식의 결과에 따라 실행 블록을 선택하게 된다.
else if문의 수는 제한이 없고 여러 개의 조건식 중 true가 되는 블록만 실행하고 전체 블록을 벗어나게 된다. else if 블록의 마지막에는 else 블록을 추가할 수 있는데 모든 조건식이 false일 경우 else 블록을 실행하게 된다.
if ( 조건식1 ) {
실행문;
} else if ( 조건식2 ) {
실행문;
} else {
실행문;
}
public class Example {
public static void main(String[] args) {
int score = 75;
if ( score >= 90 ) {
System.out.println("점수가 90~100점 사이입니다.");
} else if( score >= 80 ) {
System.out.println("점수가 80~89점 사이입니다.");
} else if ( score >= 70 ) {
System.out.println("점수가 70~79점 사이입니다.");
} else {
System.out.println("점수가 70점 미만입니다.");
}
}
}
switch문
switch문은 if문과 마찬가지로 조건 제어문이며 변수가 어떤 값을 가지느냐에 따라 실행문이 선택된다.
switch문은 괄호 안의 값과 동일한 값을 가지는 case로 가서 실행문을 실행시키며, 만약 괄호 안의 값과 동일한 값을 가지는 case가 없는 경우에는 default로 가서 실행문을 실행시키게 된다. 여기서 default는 생략이 가능하다.
public class JEP354 {
public static void main(String[] args) {
System.out.println(getValueViaYield("a"));
System.out.println(getValueViaYield("c"));
System.out.println(getValueViaYield("e"));
System.out.println(getValueViaYield("z"));
}
// Traditional switch
private static int getValueBefore12(String mode) {
int result;
switch (mode) {
case "a":
case "b":
result = 1;
break;
case "c":
result = 2;
break;
case "d":
case "e":
case "f":
result = 3;
break;
default:
result = -1;
}
;
return result;
}
}
사용하는 자바 버전에 따라 switch문을 사용하는 방법을 구분할 수 있는데 Java 6까지는 switch문의 괄호에 정수 타입(byte, char, short, int, long) 변수나 정수값을 산출하는 연산식만 올 수 있었고, Java 7부터는 String 타입의 변수도 사용할 수 있게 되었다.
위의 코드에서 case 끝에 break가 붙어 있는 이유는 다음 case를 실행하지 말고 switch문을 빠져나가기 위한 것이다.
break가 없다면 다음 case가 연달아 실행되는데 이때는 case 값과는 상관없이 실행된다.
public class JEP354 {
public static void main(String[] args) {
System.out.println(getValueViaYield("a"));
System.out.println(getValueViaYield("c"));
System.out.println(getValueViaYield("e"));
System.out.println(getValueViaYield("z"));
}
// Java 12, multiple comma-separated labels
private static int getValueMultipleLabels(String mode) {
int result;
switch (mode) {
case "a", "b":
result = 1;
break;
case "c":
result = 2;
break;
case "d", "e", "f":
result = 3;
break;
default:
result = -1;
}
;
return result;
}
// Java 13, value breaks are superseded by 'yield' statements
// Java 12, switch expression returning value via break
/*private static int getValueViaBreak(String mode) {
int result = switch (mode) {
case "a":
case "b":
break 1;
case "c":
break 2;
case "d":
case "e":
case "f":
break 3;
default:
break -1;
};
return result;
}*/
// Java 12, switch expression returns a value via label rules (arrow)
private static int getValueViaArrow(String mode) {
int result = switch (mode) {
case "a", "b" -> 1;
case "c" -> 2;
case "d", "e", "f" -> {
// do something here...
System.out.println("Supports multi line block!");
yield 3;
}
default -> -1;
};
return result;
}
// Java 13, switch expression returns a value via yield
private static int getValueViaYield(String mode) {
int result = switch (mode) {
case "a", "b":
yield 1;
case "c":
yield 2;
case "d", "e", "f":
// do something here...
System.out.println("Supports multi line block!");
yield 3;
default:
yield -1;
};
return result;
}
}
이전 스터디에 언급했던 것처럼 Java 12부터는 case문에 콤마(,)를 사용하여 여러 조건을 하나의 case문으로 표현할 수 있으며 특정 변수를 선언하여 case문에 따른 값을 저장하는 것 외에 break문을 통해 직접 값을 return할 수 있다. 또한 화살표 함수를 사용할 수 있으며 Java 13부터는 break문을 yield문으로 대체하게 되었다.
2. 반복문
제어문 블록 실행이 완료되었을 경우 제어문 처음으로 다시 되돌아가 반복 실행하며 이것을 루핑(looping)이라고 한다.
반복문의 종류 중 for문과 while문은 서로 변환이 가능하기 때문에 반복문을 작성할 때 어느 쪽을 선택해도 좋지만,
for문은 반복 횟수를 알고 있을 때 주로 사용하고 while문은 조건에 따라 반복할 때 주로 사용한다.
for문
for(1:초기화식; 2:조건식; 4:증감식) {
3:실행문;
}
class ForLoopExample {
public static void main(String args[]){
for(int i=10; i>1; i--){
System.out.println("The value of i is: "+i);
}
}
}
The value of i is: 10
The value of i is: 9
The value of i is: 8
The value of i is: 7
The value of i is: 6
The value of i is: 5
The value of i is: 4
The value of i is: 3
The value of i is: 2
반복문을 사용할 때 주의할 점은 조건을 명확하게 지정해줘야 한다는 것이다. 조건을 잘못 지정하면 무한 루프에 빠져 반복문을 끝낼 수 없는 코드를 작성하게 될 위험이 있다.
class ForLoopExample2 {
public static void main(String args[]){
for(int i=1; i>=1; i++){
System.out.println("The value of i is: "+i);
}
}
}
Java 5부터는 배열 및 컬렉션 객체를 조금 더 쉽게 처리할 목적으로 향상된 for문을 제공한다. 향상된 for문은 반복 실행을 하기 위해 카운더 변수와 증감식을 사용하지 않으며 배열 및 컬렉션 항목의 개수만큼 반복하고 자동적으로 for문을 빠져나간다. 향상된 for문을 작성하는 형식과 실행 흐름은 다음과 같다.
class ForLoopExample3 {
public static void main(String args[]){
int arr[]={2,11,45,9};
for (int num : arr) {
System.out.println(num);
}
}
}
2
11
45
9
Beginnersbook, For loop in Java with example,
beginnersbook.com/2015/03/for-loop-in-java-with-example/
while문
for문이 정해진 횟수만큼 반복한다면 while문은 조건식이 true일 경우 계속해서 반복한다.
while(1:조건식) {
2:실행문;
}
class WhileLoopExample {
public static void main(String args[]){
int i=10;
while(i>1){
System.out.println(i);
i--;
}
}
}
10
9
8
7
6
5
4
3
2
class WhileLoopExample2 {
public static void main(String args[]){
int i=10;
while(i>1)
{
System.out.println(i);
i++;
}
}
}
Beginnersbook, While loop in Java with example,
beginnersbook.com/2015/03/while-loop-in-java-with-examples/
while문 또한 무한 루프를 방지하여 while문을 빠져나가기 위한 코드가 필요하며 이를 위해 break문을 이용할 수도 있다.
do-while문
do-while문은 조건식에 의해 반복 실행된다는 점에서는 while문과 동일하다. while문은 시작할 때부터 조건식을 검사하여 블록 내부를 실행할지 말지를 결정하지만 do-while문은 일단 블록 내부를 실행한 후 실행 결과에 따라 반복 실행을 할지 말지를 결정한다.
class DoWhileLoopExample {
public static void main(String args[]){
int i=10;
do{
System.out.println(i);
i--;
}while(i>1);
}
}
10
9
8
7
6
5
4
3
2
Beginnersbook, do-while loop in Java with example,
beginnersbook.com/2015/03/do-while-loop-in-java-with-example/
'Project > 자바 라이브 스터디' 카테고리의 다른 글
자바 라이브 스터디 #4 live-study 대시 보드 만들기 (1) | 2020.12.07 |
---|---|
자바 라이브 스터디 #4 JUnit 5 사용법 : IntelliJ에서 Gradle 프로젝트에 설정하기 (0) | 2020.12.05 |
자바 라이브 스터디 #3 연산자 (0) | 2020.11.26 |
자바 라이브 스터디 #2 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.21 |
자바 라이브 스터디 #1 JVM은 무엇이며 자바 코드는 어떻게 실행하는가 (0) | 2020.11.20 |