본문 바로가기

Java Programming

Switch문

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Switch는 If나 For, While들과 같이 조건문이라는걸 잘 아실겁니다.
그중에 Switch 조건문에 대해서 한번 자세하게 알아봤는데요.

제가 몰랐던 독특한 부분들에 대해서 배우게 된걸 소개하도록 하겠습니다.

일단 소스코드를 보시죠.




제가 직접 스위치문을 테스트를 해봤습니다.
저는 콘솔창에 1을 입력했구요.
당연히 grade라는 object에 "D"가 입력될거라고 생각했었죠.
(다시한번 테스트의 필요성을 느낍니다)

콘솔창에는 다음과 같은 결과를 보였습니다.
하지만 결과값을 전혀 달랐습니다.


도대체 뭐가 틀렸을까? 고민하던 도중에 case 레이블
(case 뒤에 붙은 1,2,3,4를 레이블이라고 한답니다~)에 해당하는 명령문을 수행하고 나면
반드시 break를 붙여 줘야 한다는 겁니다. 그래야 switch문을 빠져나간다는 거지요.

JVM이 switch문을 실행할때 대상의 수식의 값을 결정하는데 각 case의 레이블과 비교를 한후에
일치하는 레이블의 명령문을 수행하고 나면
그 이하의 case 레이블에 해당하는 명령문을 차례대로 수행해 준다는 겁니다.

그렇기때문에 위에 예제 대로라면 grade에 D와 C와 B와 A를 차례로 대입해주고
결국 최후의 grade의 값이 A가 되어버리는 거지요.


이렇게 해줘야 올바른 결과를 기대할수 있다는 겁니다 ^-^/

Agile Java 책의 Switch문 사용 예제를 보니 이상한 점이 있었습니다.


이런 메소드가 있었는데요..
헉 Break가 없는 잘못된 소스코드를 왜 그대로 올려놓았을까?
라고 생각했지만 아무리 이 책이 오타가 많고 번역이 허접하다고 해도..
소스코드까지 완전히 틀린걸 쓰지는 않더군요.

return의 경우는 break의 역할까지 수행해 준다고 합니다.
그러니까 return이 수행이 되고 switch문을 빠져 나가게 되는거지요.

몰랐던 부분이지만 굉장히 신기했습니다. -ㅅ-/

6번째줄에 있는 default는 수식이 case 레이블에 해당하는것이 없을경우에 수행하는 레이블입니다~