개발자

Kotlin when 문법 사용에 대해서

2023년 03월 23일조회 177

안녕하세요. 현재 Kotlin 으로 프로젝트를 진행하면서 의문이 생겼는데, 어떻게 검색해야 할지 감이 잡히지 않아 질문하게 되었습니다. 보통 Java 를 사용할 땐 switch 사용을 지양하라고 종종 나오는데, 이에 대응하는 Kotlin 의 when 도 switch 와 같이 지양하는 것이 좋은가 의문이 생겼습니다. 선배님들은 어떻게 생각하시나요?

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 2

인기 답변

이양일님의 프로필 사진

안녕하세요! Java 에서 switch 문을 무작정 사용하게 되면 확장이 어려워지고 Open-Closed Principle 규칙을 해할 수 있으며 신규로 추가되는 케이스에 대해 누락할 경우 오류나 버그가 유발될 가능성이 있어 유지보수에 신경을 써야합니다. 다만 이건 switch 문에만 해당하는 문제는 아니며, 특정 타입값이나 enum 등으로 동일한 분기처리를 여러곳에서 행하게 될경우 SubClass 를 분기가 되는 조건에 맞게 구현함으로써 앞서 설명드린 문제를 개선해 볼 수 있습니다. 이에 대해 자세한 설명이 나와있는 글을 공유드리니 참고하시면 좋겠습니다. - https://makolyte.com/refactoring-the-switch-statement-code-smell/ 하지만 이거 때문에 Java 의 switch 를 무조건 안써야 한다는건 맞지 않는것 같고요, 케이스에 따라 쓸수도 있고 안쓸수도 있다고 생각됩니다. 추가적으로 아직은 프리뷰 기능이긴 합니다만, Java 17 부터 제공되는 확장된 패턴 매치 기능을 통해 switch 문을 좀 더 다양하게 활용할 수 있을것으로 보고 있습니다. 이와 관련된 내용은 baeldung 에서 정리된 예제(https://www.baeldung.com/java-switch-pattern-matching#patterns-for-switch)를 참고해주세요. 너무 Java switch 문에 대해서만 말씀드렸는데 Kotlin 의 when 은 Java 14 부터 개선된 switch 기능과 거의 유사하다고 생각됩니다. 또한 개인적으로 생각하는 Java 14 버전 switch 와 Kotlin when 의 강력한 기능중 하나는 새로운 enum 타입이 추가되었을 때 when 절에 포함되어있지 않으면 컴파일 단에서 이를 체크한다는 점입니다.(단, java 의 경우 default, kotlin 의 경우 else 문이 없어야 합니다.) 이러한 기능을 잘 활용한다면, 경우에 따라 switch 와 when 도 충분히 쓸만한 기능이라고 생각이 듭니다. 부디 저의 짧은 지식이 도움이 되셨길 바랍니다.🙏

심성헌님의 프로필 사진

심성헌

작성자

Back-end Engineer2023년 03월 23일

안녕하세요! 먼저 늦은 시간에 디테일한 답변 남겨주셔서 감사합니다. 말씀해주신 내용 덕분에 어느정도 갈피를 잡게 된 것 같아요. switch 문 사용이 OCP 에 위배될 수 있다고 생각 못해봤는데 왜 사용하지 않는 것을 지양하는지 다시 한 번 생각할 수 있게 되었습니다. 남겨주신 참고 아티클 천천히 읽으면서 더 깊게 공부 해보겠습니다! 다시 한 번 감사의 말씀 전하면서, 좋은 하루로 마무리 하실 수 있길 바라겠습니다. :)

커리어리 AI 봇님의 프로필 사진

Kotlin에서는 when을 switch와 비슷한 역할을 하도록 만들어졌지만, 몇 가지 차이점이 있습니다. 첫째, when은 표현식(expression)이 될 수 있습니다. 이것은 switch와 달리 when이 조건을 만족하는 첫 번째 블록의 결과를 반환하고, 그 값을 변수에 할당할 수 있다는 것을 의미합니다. 둘째, when에서는 else를 사용할 수 있습니다. 이것은 모든 조건을 만족하지 않을 때 실행할 코드를 제공합니다. switch에서는 이를 처리하기 위해 일반적으로 default 블록을 사용합니다. 셋째, when에서는 조건으로 객체를 사용할 수 있습니다. 이것은 switch에서 불가능한 것입니다. 따라서, Kotlin에서는 when을 적극적으로 사용해도 좋습니다. switch와 달리 when은 더 강력하며 표현력이 좋기 때문에 더 많은 상황에서 사용할 수 있습니다.

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!