리턴 값 생략에 대하여
557
3 asked
안녕하세요 자바에서 코틀린으로 넘어가고 싶어 강의를 들으며 차근차근 공부중입니다.
인텔리제이에서 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")
이런식으로 나와야 할 것 같은데 말이죠
물론 메서드에 마우스를 올리면 리턴 타입을 알 수 있지만
자바 개발하면서 익숙해진 단축키라 코틀린에서도 유용하게 활용할 수 있는지 궁금합니다.
그리고 실무에서 개발 할 때에도 리턴타입이 없다면 많이 불편할 것 같은데 아직 자바에서 벗어나지 못해하는 걱정인걸까요...?
Answer 1
4
안녕하세요, lbrve님!!! 크으~~ 너무너무 좋은 질문 이십니다~!! 😊
두가지 측면으로 말씀드려보겠습니다!!
1) 말씀해주신 IntelliJ의 Introduce (Local) Variable 기능을 사용하시면 화면에 이런 창이 나오실거에요!

여기서 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님의 궁금증이 어느정도 해결 되셨을지 모르겠네요 ㅎㅎㅎㅎㅎ
또 보시다가 궁금한 점 있으시다면, 언제든 편하게 질문 부탁드립니다!! 감사합니다~ 😊😊
수업노트
0
53
1
싱글톤과 스프링
0
71
2
get() = 3
0
49
2
강사님
0
74
1
강의 복습하면서 생긴 질문
1
94
1
Kotlin과 Java의 현업에서의 활용
0
124
2
data class와 자바의 Lombok을 이용한 DTO 클래스 차이 질문
0
74
1
코틀린에서 상속 시, 주의점에 대한 질문
1
95
3
내용 이해 질문
0
56
1
자바와 코틀린의 함수형 프로그래밍,
1
91
1
플랫폼 타입 설명 문의
2
76
2
널 아님 단언 관련 질문
0
83
1
강의 중 질문
0
79
2
범위 비교 질문
1
91
2
타입캐스팅 궁금한점 질문드립니다.
1
239
2
코틀린 val 질문
0
166
2
완강 후 Kotlin 이런저런 질문 드려봅니다!
3
408
2
확장함수 스타일 질문
0
139
2
확장 프로퍼티 질문
1
156
1
update 함수를 만든다는게 어떤 의미인지 예시가 궁금합니다!
1
283
1
java class의 NotNull 어노테이션 인식
1
262
1
[16강] 확장함수 관련 질문입니다!
1
132
2
리턴타입 사용시 any를 사용해도 괜찮은가요?
1
139
1
안녕하세요 scope function 에 receiver 가 없는 경우
1
169
1

