제어문
프로그램의 흐름을 제어할 수 있도록 도와주는 실행문
- Decision-Making Statements: if, if-else, switch
- Looping Statements: for, while, do-while
- Branching Statements: break, continue, return
Decision-Making Statements
if statement
if (condition) { /* code */ }
condition이 true일 때 code블럭 실행
if-else statement
if (condition) { /* code1 */ }
else { /* code2 */ }
condition이 true이면 code1 실행, 아니면 code2 실행
switch statement
switch/case 문
아래와 같은 switch문이 있을 때..
public enum Day { SUNDAY, MONDAY, TUESDAY,
WEDNESDAY, THURSDAY, FRIDAY, SATURDAY; }
// ...
int numLetters = 0;
Day day = Day.WEDNESDAY;
switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
numLetters = 6;
break;
case TUESDAY:
numLetters = 7;
break;
case THURSDAY:
case SATURDAY:
numLetters = 8;
break;
case WEDNESDAY:
numLetters = 9;
break;
default:
throw new IllegalStateException("Invalid day: " + day);
}
System.out.println(numLetters);
자바 12부터는 콜론(:) 대신 화살표(->) 연산자를 사용할 수 있다.
int numLetters = 0;
Day day = Day.WEDNESDAY;
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> numLetters = 6;
case TUESDAY -> numLetters = 7;
case THURSDAY, SATURDAY -> numLetters = 8;
case WEDNESDAY -> numLetters = 9;
default -> throw new IllegalStateException("Invalid day: " + day);
};
System.out.println(numLetters);
그리고 자바 13부터는 break 대신 yield를 사용한다.
Day day = Day.WEDNESDAY;
int numLetters = switch (day) {
case MONDAY:
case FRIDAY:
case SUNDAY:
System.out.println(6);
yield 6;
case TUESDAY:
System.out.println(7);
yield 7;
case THURSDAY:
case SATURDAY:
System.out.println(8);
yield 8;
case WEDNESDAY:
System.out.println(9);
yield 9;
default:
throw new IllegalStateException("Invalid day: " + day);
};
System.out.println(numLetters);
case TUESDAY -> 7;에서 7을 System.out.println(7)이나 "Seven" 등으로 바꾸면 int type이 아니므로 에러가 발생한다. 위에서는 콜론(:)이 있는 구문에서 yield가 빠지면, 런타임 에러가 발생한다. 하지만 아래와 같이 화살표(->) 연산자를 사용할 경우에는 yield가 빠지면, 컴파일 에러가 발생하여 미리 알 수 있기 때문에 화살표(->) 연산자를 사용할 것을 권장한다. yield 예약어는 case 라벨(:)에도 사용 가능합니다.
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> {
System.out.println(6);
yield 6;
}
case TUESDAY -> {
System.out.println(7);
yield 7;
}
case THURSDAY, SATURDAY -> {
System.out.println(8);
yield 8;
}
case WEDNESDAY -> {
System.out.println(9);
yield 9;
}
default -> {
throw new IllegalStateException("Invalid day: " + day);
}
};
열거 타입(enum)을 사용하는 이유
static int switchError(String s) {
return switch (s) {
case "MONDAY", "FRIDAY", "SUNDAY" -> 6;
case "TUESDAY" -> 7;
case "THURSDAY, SATURDAY" -> 8;
case "WEDNESDAY" -> 9;
default -> -1;
};
}
위의 메서드에서 default를 주석 처리하면 "'switch' expression does not cover all possible input values" 에러 메시지를 볼 수 있다. 가능한 모든 값에 대하여 일치하는 case 라벨이 하나라도 없으면 위와 같은 에러를 볼 수 있습니다.
따라서 default를 사용하거나, 필요한 값들로 열거 타입(enum)을 만들어서 사용해야 합니다.
Looping Statements
while (expression) { statement; }
do { statement; } while (expression)
for (초기값; 조건; 방향&간격) { statement; }
for (<type> <instance>: <type-iterable>) { statement; }
Branching Statements
break statement
while, for 또는 switch문을 끝낼 수 있는 구문이다.
continue statement
loop문에서 continue문이 실행되면 그 아래 코드들은 스킵한 뒤에 다음 스텝의 루프를 실행한다.
'Java' 카테고리의 다른 글
[Java] 클래스 Class (0) | 2023.04.28 |
---|---|
[Java] JUnit5 (0) | 2023.04.26 |
[Java] 연산자 (0) | 2023.04.19 |
[Java] Primitive Type Array to Stream (0) | 2023.04.19 |
[Java] String / StringBuffer / StringBuilder 차이점 & 성능 비교 (0) | 2023.04.18 |
댓글