JAVA Switch-Case๋ฌธ ์กฐ๊ฑด๋ค์ ์ด๋ป๊ฒ ์ ์ฅ๋ ๊น?
๐ฉโ๐ซ ์๋ฐ ๊ฐ์๋ฅผ ์ค๋นํ๋ฉฐ ์๋กญ๊ฒ ์๊ฒ๋ ๋ด์ฉ์ ์ ๋ฆฌํฉ๋๋ค.
์กฐ๊ฑด๋ฌธ ๋ฆฌํฉํ ๋ง์ ๊ณ ๋ฏผํ๋ฉฐ ์๋กญ๊ฒ ์๊ฒ๋ ์ฌ์ค์ if-else์ switch-case๋ฌธ์ ๋ก์ง ์ํ ์ ์ฐจ์ ์ฐจ์ด์ ์ ๋๋ค.
์กฐ๊ฑด๋ฌธ์๋ if-else์ switch-case ๋ฌธ์ด ์์ฃ ?
๊ธฐ์ด์ ์ธ ๊ฑฐ์ฌ์ ๊ฐ๋ตํ๊ฒ ์๊น์๋ง ๋ณด๋ฉด ์๋์ ์ ์ฉ๋ฑ๊ธ์ ๋ฐ๋ผ ๋์ถ ํ๋ ๊ธ์ก์ด ๋ฌ๋ผ์ง๋ ์์๋ก if-else๋ฌธ, switch-case๋ฌธ์ด ๊ฐ๊ฐ ์์ต๋๋ค. (๋์ ๋ฑ๊ธ ์์ผ๋ก ๋ง๋ค๊ณ ๊ฐ์ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์์!)
if-else๋ฌธ
// ์ง๊ธ์ ์ฌ๋ผ์ง ์ ์ฉ๋ฑ๊ธ์ ๋ฐ๋ฅธ ๋์ถ ํ๋
int creditGrade = 1;
int loanLimit;
if( creditGrade == 1){
loanLimit = 1200;
} else if( creditGrade == 2 ) {
loanLimit = 900;
} else if( creditGrade == 3 ) {
loanLimit = 300;
} else {
loanLimit = 100;
}
switch-case๋ฌธ
// ์ง๊ธ์ ์ฌ๋ผ์ง ์ ์ฉ๋ฑ๊ธ์ ๋ฐ๋ฅธ ๋์ถ ํ๋
int creditGrade = 1;
int loanLimit;
switch( creditGrade ){
case 1: loanLimit = 1200;
break;
case 2: loanLimit = 900;
break;
case 3: loanLimit = 300;
break;
default:
loanLimit = 100;
}
์ฌ๊ธฐ์ ๋ด์ผํ ์ ์ด if-else๋ฌธ์ ๊ฐ ์กฐ๊ฑด๋ฌธ์ด ์ฐธ์ผ๋๊น์ง ์กฐ๊ฑด๋ฌธ๋ค์ ๋๋ฉด์ ๋ก์ง์ ๊ฒฐ์ ํ๋ค๋ ์ ์ด๊ณ , switch-case๋ฌธ์ ์ ๋ ฅ๋ฐ์ ์ผ์ด์ค์ ๋ก์ง์ผ๋ก ๋ฐ๋ก ๊ฒฐ์ ๋ฉ๋๋ค.
if-else๋ฌธ์ ๋ฐฉ ์์น๋ฅผ ๋ชฐ๋ผ์ ๋ฐฉ๋ฌธ์ ํ๋์ฉ ๋๋๋ ค๋ณธ๋ค๋ฉด switch-case๋ฌธ์ ๋ฐฉ ์์น๋ฅผ ๋ฐ๋ก ์์์ ๋ค์ด๊ฐ๋ ๋๋์ด๋๊น? ๊ทธ๋ฌ๋ โ๋ฐฉ์ด ๋ง์ ์๋กโ ๋ฐฉ๋ฌธ์ ์์๋ถํฐ ํ๋์ฉ ๋๋๋ ค๋ณด๋ if-else ๋ณด๋ค switch-case๋ฌธ์ด ๋ ์ ๋ฆฌํ ์ ๋ฐ์์,
์กฐ๊ฑด๋ฌธ 4๊ฐ ์ด์์ผ ๋๋ถํฐ if-else ๋ณด๋ค switch-case์ ์ฑ๋ฅ์ด ์ข๋ค๊ณ ํ๋ ์ด๋๋ถํฐ ์ด ์ฐจ์ด๊ฐ ๋ ๊ทน๋ํ ๋๋๋ณด๊ตฐ์.
๊ทธ๋ฆฌ๊ณ ์ ์์ค์ฝ๋์ฒ๋ผ ์กฐ๊ฑด์ ๊ฐ๋ค์ด 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ฌ์ฉํ ๋๊ฐ switch-case๋ฌธ์ ์ฐ๊ธฐ ๊ฐ์ฅ ์ ์ ํ๋ค๊ณ ํ๋๋ฐ,
(์ค์)๊ทธ ์ด์ ๋ ์๋ฐ์ปดํ์ผ๋ฌ์ ์ํด switch๋ tableswitch ๋๋ lookupswitch ๋ช ๋ น์ผ๋ก ์ปดํ์ผ๋์ด case๋ฌธ์ ์กฐ๊ฑด์ ์ซ์๋ก ๋ฐ๋๊ฒ ๋๊ณ , ์กฐ๊ฑด์ด String ๊ฐ์ฒด๋ผ๋ฉด String ๊ฐ์ฒด๋ hashCode ๋ฉ์๋์ ์ํด์ int ํ์ผ๋ก ๋ฐ๋๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํฉ๋๋ค. case๋ฌธ์ด ์ซ์์ ์์ ๊ฒ๋ถํฐ ์ ๋ ฌ์ด ๋๊ธฐ ๋๋ฌธ์ case๋ฌธ์ด ์๋๋ถํฐ ์ซ์์ด๊ณ , ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ์ด ๋์ด์๋ค๋ฉด ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ณด๋ค ๋ ๋นจ๋ฆฌ ์ํ๋๊ฒ ์ฃ ?
์ง์ ์ปดํ์ผ๋ ๋ฐ์ดํธ ์ฝ๋๋ฅผ ํ์ธํด๋ด ์๋ค.
์ปดํ์ผ๋ฌ๊ฐ ์น์ ํ๊ฒ ๋ณํํด์ค ํด๋์ค ํ์ผ์ด ์๋ ๊ณณ์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํด์ค๋๋ค.
javap -c "ํด๋์ค๋ช
".class
์คโฆ!
์ฐ์ธก์ด ํฐ๋ฏธ๋ ์ฐฝ์ธ๋ฐ, tableswitch๋ผ๋ ํํ๊ฐ ๋ณด์ ๋๋ค. value๊ฐ์ผ๋ก ๋ณด์ด๋ hashCode๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ ๋ณํํ์ฌ ์์ฑํ ๊ฐ์ฒด์ ๊ณ ์ ํ ์ ์๊ฐ์ผ๋ก, equals() ๋ฉ์๋์์ ์ด hashCode๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋น๊ตํฉ๋๋ค.
case๋ฌธ์ 1,2,3,default๊ฐ ๊ทธ๋๋ก tableswitch์ key์ ๋ค์ด๊ฐ์๋ค์. ์์๋ ์ค๋ฆ์ฐจ์์ด์์ด์, ์์์ ๋งํ ๊ฒ ์ฒ๋ผ hashCode() ๋ฉ์๋๊ฐ ํ ์ผ์ ์ค์ฌ์คฌ์ด์^^ loanLimit ๋ณ์์ ๊ฐ๋ค์ sipush๋ก ๋ค์ด๊ฐ์๋๋ฐ, sipush, istore, goto ๋ฑ ์ ๋ํด์๋ ์ถํ์ ๋ฐ๋ก ํฌ์คํ ํ๋๋ก ํ๊ฒ ์ต๋๋ค. ์์ธํ ๋ด์ฉ์ [์ค๋ผํด ๊ณต์๋ฌธ์-Compiling Switches]๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
๊ทธ๋ ๋ค๋ฉด case์ ๋ฌธ์์ด์ ๋ฃ์์ ๋๋ ์ด๋ ํ ๊น์?
case์ ๊ฐ๊ฐ โbronzeโ, โsilverโ, โgoldโ์ ๋ฌธ์์ด์ ๋ฃ์ด์ฃผ์๋๋ฐ๋, tableswitch์ key๋ 0,1,2 ๋ก ๋ฐ๋์์ต๋๋ค! ์ฌ๊ธฐ์ ๋ด์ผํ ์ ์ ์ซ์์ผ ๋๋ key์ 0์ด ์์๋๋ฐ, ์ฌ๊ธด 0๋ถํฐ ์์ํ๋ค๋ ์ ์ธ๋ฐ์..!
์ถ์ธกํ๊ธฐ๋ก๋ ์ปดํ์ผ์ hashCode() ๋ฉ์๋์์ case ์กฐ๊ฑด์ด ์ซ์์ผ ๋๋ ๋ฐ๋ก ๋ฐ๊ฟ์ฃผ๋ ๋ก์ง์ด ์ ๋๊ณ ๊ทธ๋๋ก ๋ค์ด๊ฐ์ง๋ง, ์ฌ๊ธฐ์๋ case ์กฐ๊ฑด์ด ๋ฌธ์์ด์ด๊ธฐ ๋๋ฌธ์ 0๋ถํฐ ์์ํ๋ int๊ฐ์ ๋ฃ์ด์ฃผ์๊ธฐ ๋๋ฌธ์ผ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ ๊ฒ JAVA Switch-Case๋ฌธ ์กฐ๊ฑด๋ค์ด tableswitch ํํ๋ก ์ ์ฅ๋๋ ๋ชจ์ต์ ํ์ธํ์ต๋๋ค. ๋ค์์๋ lookupswitch ํํ๋ก ์ ์ฅ๋๋ ๋ชจ์ต๋ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
Stay in touch
์๋
ํ์๋ ต๋๊น? ์ ๋ ์น๊ฐ๋ฐ๊ณผ ์์ํธ์ง์ ํ๋ devwon์ด๊ตฌ์.
์ฌ๊ธฐ๋ devwon์ ๋ธ๋ก๊ทธ์
๋๋ค. ์น๊ฐ๋ฐ(Java, Spring, Python, Django), ์์ ํธ์ง(finalcutpro) ๋ฑ ์ ์ ์ฃผ ํ๋ ๋ถ์ผ์ ๋ํ ๊ธ์ ์ฌ๋ฆฝ๋๋ค:)
์ด๋ฉ์ผ๋ก ๋ธ๋ก๊ทธ์ ์๋ก์ด ๊ธ์ ๋ฐ์๋ณด์๋ ค๋ฉด ์๋์ ์ฃผ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์!