Java Switch์ ๋ํ ์ฝ๊ฐ์ ์ด๋ก
๋น์ ์ด ๊ฐ๋ฆผ๊ธธ์ ๋ฉ์ถฐ ์ ๊ธฐ์ฌ๋ผ๊ณ ์์ํด ๋ณด์ธ์. ์ผ์ชฝ์ผ๋ก ๊ฐ๋ฉด ๋ง์ ์๊ฒ ๋ฉ๋๋ค. ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ๋ฉด ์ง์์ ์ป์ ์ ์์ต๋๋ค. ์ด ์ํฉ์ ์ฝ๋๋ก ์ด๋ป๊ฒ ํํํ ๊น์? ์ด๋ฌํ ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ธฐ ์ํด if-then ๋ฐ if-then-else์ ๊ฐ์ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์ด๋ฏธ ์๊ณ ๊ณ์ค ๊ฒ์ ๋๋ค .
if (turn_left) {
System.out.println("You will lose your horse");
}
if (turn_right) {
System.out.println("You will gain knowledge");
}
else
System.out.println("So you're just going to stand there?");
๊ทธ๋ฌ๋ ๊ธธ์ด ๋๋ก ๊ฐ๋ผ์ง๋ ๊ฒ์ด ์๋๋ผ ์ด ๊ฐ๋๋ก ๊ฐ๋ผ์ง๋ค๋ฉด? "์์ ํ ์ค๋ฅธ์ชฝ์ผ๋ก", "์ฝ๊ฐ ์ผ์ชฝ์ผ๋ก", "์กฐ๊ธ ๋ ์ผ์ชฝ์ผ๋ก" ๋ฑ ์ด 10๊ฐ์ ๊ฐ๋ฅํ ๋๋ก๊ฐ ์์ต๋๊น? ์ด ๋ฒ์ ์์ "if-then-else " ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์ปค์ง์ง ์์ํด ๋ณด์ธ์!
if (option1)
{โฆ}
else if (option2)
{โฆ}
โฆ
else if (optionN) ...
๋๋ก์ 10๋ฐฉํฅ ๋ถ๊ธฐ์ ์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค(์ฌ๊ธฐ์ ์ต์
์ ์๊ฐ ํ์ ๋์ด ์๋ค๋ ๊ฒ์ด ์ค์ํฉ๋๋ค). ์ด๋ฌํ ์ํฉ์ ์ํด Java์๋ switch ๋ฌธ์ด ์์ต๋๋ค.
switch (ExpressionForMakingAChoice) {
case (Value1):
Code1;
break;
case (Value2):
Code2;
break;
...
case (ValueN):
CodeN;
break;
default:
CodeForDefaultChoice;
break;
}
์ด๊ฒ์ด ์ง์ ์ด ์๋ํ๋ ๋ฐฉ์์
๋๋ค.
- ExpressionForMakingAChoice๊ฐ ํ๊ฐ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ switch ๋ฌธ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ค์ ValueX์ ๋น๊ตํฉ๋๋ค(๋์ด๋ ์์๋๋ก).
- ExpressionForMakingAChoice๊ฐ ValueX์ ์ผ์นํ๋ฉด ์ฝ๋ก ๋ค์์ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค.
- break ๋ฌธ์ ๋ง๋๋ฉด switch ๋ฌธ ์ธ๋ถ๋ก ์ ์ด๊ฐ ์ด์ ๋ฉ๋๋ค.
- ExpressionForMakingAChoice๊ฐ ValueX์ ์ผ์นํ์ง ์์ผ๋ฉด ์ ์ด๊ฐ CodeForDefaultCase๋ก ์ ๋ฌ๋ฉ๋๋ค.
-
switch ๋ฌธ์์ ExpressionForMakingAChoice์ ์ ํ์ ๋ค์ ์ค ํ๋์ฌ์ผ ํฉ๋๋ค.
- ๋ฐ์ดํธ , ์งง์ , char , int .
- Byte , Short , Character , Integer (๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ์ ๋ํผ).
- ๋ฌธ์์ด .
- ์ด๊ฑฐํ .
- ๊ธฐ๋ณธ ๋ธ๋ก ์ ์ ํ ์ฌํญ์ ๋๋ค. ์ด๊ฒ์ด ์๊ณ ExpressionForMakingAChoice๊ฐ ์ด๋ค ValueX์๋ ์ผ์นํ์ง ์์ผ๋ฉด ์ด๋ค ์์ ๋ ์คํ๋์ง ์์ต๋๋ค.
- break ๋ฌธ ์ ํ์ํ์ง ์์ต๋๋ค. ์๋ ๊ฒฝ์ฐ ์ฝ๋๋ break๊ฐ ์ฒ์ ๋ํ๋ ๋๊น์ง ๋๋ switch ๋ฌธ์ด ๋๋ ๋๊น์ง ๊ณ์ ์คํ๋ฉ๋๋ค(case ๋ฌธ์์ ์ถ๊ฐ ๋น๊ต ๋ฌด์) .
- ์ฌ๋ฌ ์ ํ์ ๋ํด ๋์ผํ ์ฝ๋๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฌ๋ฌ ๊ฐ์ ์ฐ์์ ์ธ case ๋ฌธ์ ์ง์ ํ์ฌ ์ค๋ณต์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ด์ Java์์ switch ๋ฌธ์ด ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ฑฑ์ ํ์ง ๋ง์ธ์. ์ด๋ก ์ ๋๋ฌ์ต๋๋ค. ๋ค์ ์๋ฅผ ๋ณด๊ณ ๋๋ฉด ๋ชจ๋ ๊ฒ์ด ํจ์ฌ ๋ ๋ช ํํด์ง ๊ฒ์ ๋๋ค. ๊ธ์, ์์ํ์. ํ์๊ณ์ ํ์ฑ๊ณผ ๊ด๋ จ๋ ์ฒ๋ฌธํ์ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ต์ ๊ตญ์ ์ ํ๋์ ๋ฐ๋ผ ์ฐ๋ฆฌ๋ ๋ช ์์ฑ์ ์ ์ธํ์ต๋๋ค(๊ถค๋ ํน์ฑ ๋๋ฌธ์). ์์ฑ, ๊ธ์ฑ, ์ง๊ตฌ, ํ์ฑ, ๋ชฉ์ฑ, ํ ์ฑ, ์ฒ์์ฑ ๋ฐ ํด์์ฑ๊ณผ ๊ฐ์ด ํ์์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ํ์ฑ์ด ๋ฐฐ์ด๋์ด ์์์ ๊ธฐ์ตํฉ๋๋ค. ํ์ฑ์ ์์(ํ์์ผ๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ์ ์๋์ ์ธ)๋ฅผ ์ทจํ๊ณ ํ์ฑ ๋๊ธฐ์ ์ฃผ์ ๊ตฌ์ฑ ์์๋ฅผ List <String> ๋ก ๋ฐํํ๋ Java ๋ฉ์๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.. ์ผ๋ถ ํ์ฑ์ ๋๊ธฐ ๊ตฌ์ฑ์ด ๋น์ทํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ๊ธ์ฑ๊ณผ ํ์ฑ์ ์ฃผ๋ก ์ด์ฐํํ์๋ฅผ ํจ์ ํ๊ณ ์์ต๋๋ค. ๋ชฉ์ฑ๊ณผ ํ ์ฑ์ ๋๊ธฐ๋ ์์์ ํฌ๋ฅจ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ์ฒ์์ฑ๊ณผ ํด์์ฑ์ ๋ง์ง๋ง ๊ฐ์ค ์์ ๋ฉํ์ ์ถ๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ์ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
List<String> result = new ArrayList<>();
switch (seqNumberFromSun) {
case 1: result.add("No atmosphere");
break;
case 2:
case 4: result.add("Carbon dioxide");
break;
case 3: result.add("Carbon dioxide");
result.add("Nitrogen");
result.add ("Oxygen");
break;
case 5:
case 6: result.add("Hydrogen");
result.add("Helium");
break;
case 7:
case 8: result.add("Methane");
result.add("Hydrogen");
result.add("Helium");
break;
default:
break;
}
return result;
}
๋์ผํ ๋๊ธฐ ๊ตฌ์ฑ์ ๊ฐ์ง ํ์ฑ์ ๋ํด ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ์์์ ์ ์ํ์ญ์์ค. ์ฐ์์ ์ธ case ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ํํ์ต๋๋ค . ๊ณ ํฅ ํ์ฑ์ ๋๊ธฐ ๊ตฌ์ฑ์ ์ป์ผ๋ ค๋ฉด ์ธ์๋ก 3์ ์ฌ์ฉํ์ฌ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
getPlanetAtmosphere(3).
System.out.println(getPlanetAtmosphere(3)) returns ["Carbon dioxide", "Nitrogen", "Oxygen"].
break ์คํ: break ๋ฌธ์ ๋ชจ๋ ์ ๊ฑฐํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ํ๋ฒ ํด๋ด
์๋ค:
public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
List<String> result = new ArrayList<>();
switch (seqNumberFromSun) {
case 1: result.add("No atmosphere");
case 2:
case 4: result.add("Carbon dioxide");
case 3: result.add("Carbon dioxide");
result.add("Nitrogen");
result.add ("Oxygen");
case 5:
case 6: result.add("Hydrogen");
result.add("Helium");
case 7:
case 8: result.add("Methane");
result.add("Hydrogen");
result.add("Helium");
default:
}
return result;
}
System.out.println(getPlanetAtmosphere(3)) ์ ๊ฒฐ๊ณผ๋ฅผ ์ธ์ํ๋ฉด ๊ณ ํฅ ํ์ฑ์ด ์ด๊ธฐ์ ์ ํฉํ์ง ์๋ค๋ ๊ฒ์ ์๊ฒ ๋ฉ๋๋ค. ์๋๋ฉด? ์ค์ค๋ก ํ๋จํ์ญ์์ค : [ "์ด์ฐํํ์", "์ง์", "์ฐ์", "์์", "ํฌ๋ฅจ", "๋ฉํ", "์์", "ํฌ๋ฅจ"] . ์ ์ด๋ฐ ์ผ์ด ์ผ์ด๋ฌ์ต๋๊น? ํ๋ก๊ทธ๋จ์ ์ฒซ ๋ฒ์งธ ์ผ์น ํ switch ๋ธ๋ก ์ด ๋๋ ๋๊น์ง ๋ชจ๋ case ๋ฌธ์ ์คํํฉ๋๋ค .
break ๋ฌธ์ ๊ณผ๋ํ ์ต์ ํ
break ๋ฌธ๊ณผ ์ฌ๋ก๋ฅผ ๋ค๋ฅด๊ฒ ๋ฐฐ์ดํ์ฌ ๋ฐฉ๋ฒ์ ๊ฐ์ ํ ์ ์์ต๋๋ค .
public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
List<String> result = new ArrayList<>();
switch (seqNumberFromSun) {
case 1: result.add("No atmosphere");
break;
case 3: result.add("Nitrogen");
result.add ("Oxygen");
case 2:
case 4: result.add("Carbon dioxide");
break;
case 7:
case 8: result.add("Methane");
case 5:
case 6: result.add("Hydrogen");
result.add("Helium");
}
return result;
}
์ฝ๋๊ฐ ์ ์ ๊ฒ ๊ฐ์ฃ ? ์ฌ๋ก ์ง์ ์ ์์๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ฌํธ์ฑํ์ฌ ์ด ์ง์ ์๋ฅผ ์ค์์ต๋๋ค . ์ด์ ๊ฐ ์ ํ์ ๊ฐ์ค๊ฐ ๋จ ํ ์ค์ ์ฝ๋๋ก ๋ชฉ๋ก์ ์ถ๊ฐ๋ฉ๋๋ค. ๋ง์ง๋ง ์์ ์ ์ ๊ณต๋ ์ฝ๋๋ ์๋ ๋ฐฉ์์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๊ฒ์
๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค. ๊ทธ๋ฌํ Java ์ฝ๋์ ์์ฑ์(๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๋ ๊ณ ์ฌํ๊ณ )๊ฐ ์ด๋ฅผ ์ ์งํด์ผ ํ๋ ๊ฒฝ์ฐ ํด๋น ์ผ์ด์ค ๋ธ๋ก์ ํ์ฑ ๋ค์ ์๋ ๋
ผ๋ฆฌ์ switch ๋ฌธ์์ ์คํ๋๋ ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ต๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์
๋๋ค .
if์์ ์ฐจ์ด์
if ๋ฌธ๊ณผ switch ๋ฌธ์ด ์ธ๋ถ์ ์ผ๋ก ์ ์ฌํ๋ค๋ ์ ์ ๊ฐ์ํ ๋ switch ๋ฌธ์ SPECIFIC VALUE๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ผ์ด์ค ์ค ํ๋๋ฅผ ์ ํํ๋ ๋ฐ๋ฉด if ๋ฌธ์ ๋ถ์ธ ํํ์์ ๊ฐ์ง ์ ์๋ค๋ ์ ์ ์์ง ๋ง์ญ์์ค . ์ฝ๋๋ฅผ ์ค๊ณํ ๋ ์ด ์ ์ ์ผ๋์ ๋์ญ์์ค.๊ฒฐ๋ก
- if ๋ฌธ์ผ๋ก ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค์ง ์์ผ๋ ค๋ฉด ๋ ๊ฐ ์ด์์ ๋ถ๊ธฐ์ ๋ํด case ๋ฌธ์ ์ฌ์ฉํ์ญ์์ค .
- break ๋ฌธ ์ ์ฝ์ ํ์ฌ ๊ฐ ํน์ ๊ฐ(case ๋ฌธ)์ ๋ํ ๋ถ๊ธฐ์ ๋ ผ๋ฆฌ ๋ธ๋ก์ ์์ฑํ๋ ๊ฒ์ ์์ง ๋ง์ญ์์ค .
- switch ๋ฌธ์ ํํ์์ Enum ๋๋ String ๋ฟ๋ง ์๋๋ผ ์ผ๋ถ ๊ธฐ๋ณธ ์ ํ์ผ ์ ์์ต๋๋ค.
- ๊ธฐ๋ณธ ๋ธ๋ก์ ๊ธฐ์ตํ์ญ์์ค . ์์์น ๋ชปํ ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ์ญ์์ค.
- ์ฑ๋ฅ์ ์ต์ ํํ๋ ค๋ฉด ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ฐ์ ํด๋นํ๋ ์ฝ๋ ๋ถ๊ธฐ๋ฅผ ์ค์์น ๋ธ๋ก์ ์์ ๋ถ๋ถ์ผ๋ก ์ด๋ํ์ญ์์ค.
- case ๋ฌธ ๋์ ์๋ break ๋ฌธ์ ์ญ์ ํ์ฌ "์ต์ ํ"์ ๋ชฐ๋ํ์ง ๋ง์ญ์์ค . ์ด๋ฌํ ์ฝ๋๋ ์ดํดํ๊ธฐ ์ด๋ ต๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต์ต๋๋ค.
GO TO FULL VERSION