ํฌ์ŠคํŠธ

Switch~case (Java 12 ๐Ÿ”บ)

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 ๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์ด ๋ถ€๋ถ„์ด ๊ฐ€์žฅ ํฐ ์žฅ์ ์œผ๋กœ ๋ณด์ด๋ฉฐ ๋˜ํ•œ ๋ฆฌํ„ด์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ถ€๋ถ„์—์„œ ์ƒˆ๋กœ์šด ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•ด ์ง„ ๊ฒƒ ๊ฐ™๋‹ค.

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.