Switch~case (Java 12 ๐บ)
Switch~case (Java 12 ๐บ)
โ Java 17 ๋ฒ์ ๊ณผ IntelliJ๋ก ๊ฐ๋ฐ์ ์งํํ๋ ์ค, ํ์ ์ ์ฐ๋ Switch ๋ฌธ์์ ๊ฒฝ๊ณ ๋ ์กฐ์ธ์ ์๋ฏธํ๋ ๋ ธ๋์ ์๋ฏธ์ฌ์ฅํ โฆ ๋ฐ์ค์ด ์๊ธด ๊ฒ์ ๋ฐ๊ฒฌํ๋ค. ์ด์ ๋ฅผ ํ์ธํด๋ณด๋ Java 12 ๋ฒ์ ์ด์๋ถํฐ Switch~case ๋ฌธ์ ๋ฌธ๋ฒ์ด ๊ฐ์ ๋์ด ์๋ ค์ฃผ๋ ๊ฒ์ด์๋ค.
๋ ์ ์ฐ๋ Switch ๋ฌธ์ ๊ฐ์ ๋ฐฉ์์ด๋ผ .. ์ ์ ํ๋คโฆ
์ด์ฐธ์ switch~case์ ๋๋ค์ ๊ณผ yield ๋ฐฉ์์ ๋ํด ํ์ตํ๋ ค ํ๋ค.
๊ธฐ์กด Switch ๋ฌธ (JAVA 11 ๋ฒ์ ๊น์ง์ ๋ฐฉ์)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
String day = "MONDAY";
int dayNumber;
switch (day) {
case "MONDAY":
dayNumber = 1;
break;
case "TUESDAY":
dayNumber = 2;
break;
default:
dayNumber = -1;
}
System.out.println(dayNumber);
๊ธฐ์กด ํ์๋๋ก switch ๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ์ ํ ๊ฒฝ์ฐ ์ ์ธ๊ณผ break , default ๋ฅผ ์ ์ ์ธ ํ์ฌ ์ฌ์ฉ ํด์ผ ํ๋ค.
๐ค ์๋ก์ด Switch ํํ์ (Java 12 + )
1
2
3
4
5
6
7
8
9
10
11
12
String day = "TUESDAY";
int dayNumber = switch (day) {
case "MONDAY" -> 1;
case "TUESDAY" -> 2;
default -> {
System.out.println("Unknown day");
yield -1;
}
};
System.out.println(dayNumber);
์๋ก์ด ๋ฌธ๋ฒ ์์๋ โ ๋ฌธ๋ฒ์ด ๋์ ๋์๊ณ case ๋ฅผ ํํ ํ๋ ๋ฐฉ์์ด ๊ฐ๊ฒฐํด ์ก๋ค . ๋ํ yield ํค์๋๋ฅผ ํตํด return ํ๋ ์์ผ๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅ ํ์ฌ ์ ์ธ์ ์ด ๊ฐ๊ฒฐํด ์ง ๊ฒ ๊ฐ๋ค.
yield ํค์๋
์ ์์ ์ฒ๋ผ ํ์ดํ ๋ฌธ๋ฒ์ ์๊ฐ์ ์ผ๋ก ์ฝ๊ฒ ์ดํด ํ ์ ์์ง๋ง ์๋ก์ด ํค์๋ yield ์ ๋ํด์๋ ์กฐ๊ธ ๋ ์์๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
์์ 1)
1
2
3
4
5
int result = switch (value) {
case 1 -> 100; // ๊ฐ๋จํ ์ผ์ด์ค
case 2 -> 200; // ํ ์ค ๋ฐํ
default -> 0; // ๊ธฐ๋ณธ ๊ฐ
};
์์ 2)
1
2
3
4
5
6
7
8
9
10
11
int result = switch (value) {
case 1 -> {
System.out.println("case 1");
yield 101; // 101 ๋ฐํ
}
case 2 -> 202; // ๊ฐ๋จํ ๋ฐํ
default -> {
System.out.println("๋ํดํธ ์ผ์ด์ค");
yield 0; // ๊ธฐ๋ณธ๊ฐ ๋ฐํ
}
};
๊ธฐ์กด์ ์ฌ์ฉํ๋ switch ๋ฌธ์ int result ~ ์์ผ๋ก switch ๋ฌธ์ ์ ์ธ ํ ์ ์์์ง๋ง 12+ ๋ฒ์ ์ด์ ๋ถํฐ ์ ์ธ ์ดํ โ ์ yield ๋ก ์ ์ธ ํ ์์ ํ๊ฒ ๋ฆฌํด์ ๋ฐ์ ์ ์์ด ๋ณด์ธ๋ค.
๊ฐ๋จํ๊ฒ ์๊ฐ ํด๋ณด๋ฉด yeild ๋ Return ์ ์ฒ๋ฆฌ ํด ์ฃผ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ , ๋ณต์กํ ๋ธ๋ญ ์ฒ๋ฆฌ์์๋ yield ๋ก ๋ช ์์ ์ผ๋ก ์ฌ์ฉ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด ๋ณด์ธ๋ค.
๊ฒฐ๋ก
| Java 11 - | Java 12 + |
|---|---|
| break ๋ฅผ ์ฌ์ฉ ํ์ฌ ๋ธ๋ญ์ ํ๋ฆ์ ์ข ๋ฃํด์ผํจ. | ์๋ฌต์ ์ธ ์ข ๋ฃ (โ ํจ์) |
| fall-through ๋ฌธ์ ๊ฐ ๋ฐ์ ํ ์ ์์ | fall-through ์ ๋ฌธ์ ๊ฐ ๋ถ๊ฐ๋ฅ ํด์ง๊ณ , ์์ ํด์ง. |
| ๋ฌธ(statement) ์ค์ฌ | ํํ์() ์ด ๊ฐ๋ฅํ์ฌ ์กฐํฉ์ด ๊ฐ๋ฅํ๋ค |
| ์ฝ๋๊ฐ ์ฅํฉ ํด์ง. | ๊ฐ๊ฒฐ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ด ๋์์ง |
| case ์ ๊ฐ์ ๋ฐํ ํ ์ ์์ | yield ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐํ์ด ๊ฐ๋ฅํด์ง |
๊ธฐ์กด์ ์ฌ์ฉํ๋ switch ๋ฌธ์ break ๋ฅผ ๊น๋จน๊ฑฐ๋ ์๋ ๋์ง ์์ fall-through ๊ฐ ๋ฐ์ ํ ์ ์์๋ค.
์ด ๋ถ๋ถ์ด ๊ฐ์ฅ ํฐ ์ฅ์ ์ผ๋ก ๋ณด์ด๋ฉฐ ๋ํ ๋ฆฌํด์ด ๊ฐ๋ฅํ๋ค๋ ๋ถ๋ถ์์ ์๋ก์ด ํํ์ด ๊ฐ๋ฅํด ์ง ๊ฒ ๊ฐ๋ค.