ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java-22] 자바13 스위치, java13 switch 연산
    Java 2020. 11. 27. 14:48

     

    Java13 Switch case

     

    이번에 다룰 switch 문법은 java 13버전의 스위치문에 대해서 다룹니다. 만약, swich 문을 모르신다면, 기본적인 문법에 대해서 보고오시면 이해가 더 편하실 겁니다. 



    자바13 이전의 switch case 문법

     

    자바 13이전의 스위치문에서는 정확히 12버전 이하라고 얘기를 하자, 12에도 preview로 업뎃이 있긴 했었다. 이전의 자바에서 스위치는 어떻게 동작을 했을 까?

     

     

    이런 코드의 문제점은 무엇일까? 사실 문제점이라고 하기는 그렇다. 자바가 switch case 문을 만들었을 때, C와  C++에 밀접하게 연결하여 만들었고, 이런 코드가 사실 문제가 될 건 없다고 생각한다. 적어도 아직 초보개발자인 나에게는 말이다 : ) 

     

    근데 java에서 jdk12를 내놓으면서 switch case 문을 작성하면서 다음과 같이 어떤 문제점이 생겼는지 얘기해줬다. 

     

    이전 자바 switch case 문제점

    1. 불필요하게 장황하다

    • 어느정도 사실 공감은 한다. 애초에 switch 문 자체가 엄청난 로직이 있는 것도 아니고, 뭔가 장황하다는 말은, 실제로 코드를 짜보면 불필요하게 장황하다 라는 것도 일리 있는 말이다. 

    2. Error 발생시 디버깅이 어렵다.

     

     

    Java12 switch 문 x switch 연산!

     

    그럼 자바 13 이전에 12버전에서는 어떻게 해결하려 했을까? 

     

    일단 jdk 12 랑 13이랑 크게 차이나지는 않지만, 먼저 설명을 하면 lambda 연산을 사용할 수 있다. 

    Case 문에 람다  X -> Y; 람다식?

     

    이게 “case L -> “ 방식으로 문법을 작성할 수 있다. 근데 섞어서 사용하는게 불가능하다. 예를들어 

    이런 방식으로 람다로 해결하려 했는데, 저런식으로 “-> “ 와  “ : “ 를 혼동하여 사용할 수 없다. 

     

    두번째로는 multi case Label이다. 원래 저렇게 Mon, Two, Sun 3개를 해줄 수 없는데, 12 이후로는 저렇게 3가지의 조건을 걸어줄 수 있다는 단점이 있다. 벌써 case 문을 작성할게 확 줄어들었다. 

     

    case 문 안에서 assign (대입) 연산자 

     

    우리가 case 문법 안해서 변수에 간단하게 assign 해준다고 가정하자, 선언도 스위치문 안에서 해준다고 했을 때,  

    이런식으로 case 문 안에 선언하면, brace가 끝나면 case 안에 temp변수는 죽기 때문에 이 것도 좋은 방법이라고 할 수 없다. 그렇다고 변수를 외부에 선언을 하면, 

    이런식으로 사용이 가능하긴 하다. 그럼 이렇게 사용했을 때의 스위치문의 문제점은 무엇일까? 이것도 알아보았다. 

    이 정도의 문제가 발생할 수 있다. 그러면 12이후로는 이걸  어떻게 해결할까? 

    12에서는 switch 문을 통해 리턴값을 반환할 수 있다.

     

    Java Switch var 사용해보기

     

     

    이런식으로 switch 리턴값을 반환한다. 어 ? 그럼 var 로도 가능하지 않을까 해서 응용해보면

    이런식으로 var 타입을 사용해서 문제를 더 재밌게 접근할 수 있다. 

     

     

    Java 13 이후로 뭐가 추가 되었나요?



    자료가 정말 없어서 jdk로만 보다보니 좀 다를 수 있지만 일단 yield 라는 산출값을 리턴이 가능하다. 예전에는 break를 통해서 했는데 yield를 사용하여 변수 에 값을 넣을 수 있다. 

     

    이런식으로 가능하다. 나중에 break 와 yield 에 대해서 알아보도록 하자 :D

     

    댓글

Designed by Tistory.