• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

리턴 값 생략에 대하여

22.08.24 22:08 작성 조회수 320

1

안녕하세요 자바에서 코틀린으로 넘어가고 싶어 강의를 들으며 차근차근 공부중입니다.
인텔리제이에서 option + command + v 단축키를 사용하면
바로 리턴 타입을 알 수 있어서 자바 개발을 할 때 자주 사용 했습니다.
하지만 코틀린은 기본적으로 타입의 명시가 생략되어 있어서 그런지 같은 단축키로 리턴타입이 나오지 않더라구요

기존 자바의 경우
"ABC".startsWith("A"); 에 option + command + v 를 사용하면
boolean a = "ABC".startsWith("A"); 이렇게 startsWith()의 리턴 값이 boolean이라는 것을 알 수 있는데

코틀린의 경우

val startsWith = "ABC".startsWith("A") 이렇게 나옵니다.
제 생각에는
val startsWith: Boolean = "ABC".startsWith("A")
이런식으로 나와야 할 것 같은데 말이죠


물론 메서드에 마우스를 올리면 리턴 타입을 알 수 있지만
자바 개발하면서 익숙해진 단축키라 코틀린에서도 유용하게 활용할 수 있는지 궁금합니다.

그리고 실무에서 개발 할 때에도 리턴타입이 없다면 많이 불편할 것 같은데 아직 자바에서 벗어나지 못해하는 걱정인걸까요...?

답변 1

답변을 작성해보세요.

4

안녕하세요, lbrve님!!! 크으~~ 너무너무 좋은 질문 이십니다~!! 😊

두가지 측면으로 말씀드려보겠습니다!!

1) 말씀해주신 IntelliJ의 Introduce (Local) Variable 기능을 사용하시면 화면에 이런 창이 나오실거에요!

image

여기서 Specify type explicitly 를 마우스로 클릭하시면, 타입도 함께 나오게 됩니다!

마우스로 옮겨가시는게 불편하시다면, 맥 기준 option + T (윈도우 기준 ALT + T) 를 누르시면 해당 체크박스가 클릭없이 체크됩니다! (즉 위와 동일한 행동을 한 것으로 간주됩니다 ㅎㅎㅎㅎ)

즉 변수명을 자동 추출 할 때 마우스 혹은 키보드를 이용하셔서 타입을 함께 지정하실 수 있으셔요!! default로 타입까지 나오게 하는 것은 저도 조금 찾아봤는데 아직은 없는 것 같았습니다! 😢

2) 변수의 타입 명시

librve님께서 말씀해주신 '리턴 타입'이란 것은 함수 리턴 타입이 아니라, 아마 변수를 만들 때 쓰이는 타입을 말씀해주시는 것 같습니다!!! val startsWith: Boolean = "ABC".startsWith("A") 에서 Boolean인 거죠 ㅎㅎㅎㅎ

사람마다 다를 수 있겠지만 저의 경험을 말씀드려 보면, 저도 처음에 Java에서 Kotlin으로 넘어갈때는 타입이 없어서 조금 어색했습니다! 그런데 변수이름을 잘 짓게 되면 타입이 없더라도 크게 불편하지 않는 경우들이 있더라고요!

예를 들어 isYoung 이란 단어를 보면 이름만 보아도 Boolean의 기운이 느껴지죠!! 또한 name / age 는 이름만 보아도 각각 문자열 / 숫자 라는 기운이 느껴집니다!!

비슷하게 names는 왠지 Collection<String>일 것 같고요!! person은 왠지 Person 타입의 인스턴스 같죠 ㅎㅎㅎ

이런 경우는 개발 시간을 줄여주고, 코드도 짧아져서 가독성이 향상되는 편입니다.

하지만 모든 경우 이런 방식이 잘 동작하는 것은 아닙니다. 그래서 <Effective Kotlin>Item14. 변수 타입이 명확하지 않은 경우 확실하게 지정하라 라는 가이드도 있습니다. 예를 들어,

val data = getSomeData() 라는 코드를 보면 data가 도저히 무슨 타입인지 알 수가 없죠! 오히려 가독성이 떨어져 개발을 하는데 불편할 수 있습니다. 때문에 이럴 때는 val data: Type = getSomeData() 처럼 타입을 명시해주는 것이 좋습니다 ㅎㅎㅎ

정리드려보면, 처음에는 익숙하지 않으실 수 있으나 변수 이름을 잘 짓게 되면 이름만 보고 타입을 어느정도 유추할 수 있게 됩니다. 다만, 이리 보고~ 저리 봐도~ 타입을 유추하기 어려운 경우에는 타입을 명시적으로 적어주는 것이 좋습니다!!

lbrve님의 궁금증이 어느정도 해결 되셨을지 모르겠네요 ㅎㅎㅎㅎㅎ

또 보시다가 궁금한 점 있으시다면, 언제든 편하게 질문 부탁드립니다!! 감사합니다~ 😊😊