자바 100% 호환되는걸 큰 장점으로 삼는 차세대 언어중 하나인
kotlin에 대한 사용 소감입니다.
작년에 썼던 글이라서 최신 버젼에선 혹시 달라진 점이 있지 않을까 기대되네요.
아 kotlin 작업 하고 싶은데.. 자바스크립트에서 벗어날 수가 없네요..
--------------------------------------------------------------------
kotlin은 정말 사람을 불타오르게 하는 언어다
왜 진작 배워서 적용해볼 생각을 못했을까 싶다.
자바와의 100% 호환성에서 오는 여유로움은 물론이고
inline 함수로 도모하는 다양한 편리함은 C/C++에서
자바로 오면서 잃어버렸던 것들을 완전히 되찾은 듯 하다.
코드가 너무나 아름다워진다.
inline 함수는 정말 두고두고 곱씹어 볼만한 깊은 맛이 있다.
다만 좀 짜증나는 구석도 여럿 발견된다.
1) expression에선 assignment 못하는 점
이게 kotlin 옛날 버젼에서는 가능했었는데 정식 버젼 되면서? 막힌 듯 하다.
이걸 왜 막았는지 이해가 안간다... 변수 하나 줄이고 한줄 코드 줄이는 중요한 요소인데..
뒤져보니까 smartcast 인가 뭔가가 어려워져서 이렇게 한 것 같은데...
아 그래도 너무 하잖아....
2) 함수 parameter를 var가 아니라 val (readonly)로 받는 점
이것도 좀 짜증난다. 이 역시 kotlin 옛날 버젼에서는 var로 받아서 필요에 따라
변수값 수정이 가능했던 것 같은데...
변수를 쓸데없이 하나 더 늘려써야 하는 괴로움이 있다.
var param = param 이렇게 하면 해결가능하긴 한데..
괜히 한줄 더 쓰는 문제에다가..
워닝 때문에 예쁜 소스 코드에 괜히 색깔이 더럽게 되는 안타까운 일이...
3) for문을 옛날 타입으로 쓸 수 없는 것
이건 kotlin이 좀 오버를 하는 것 같다.
for ( ; ; ) 이 구문은 시대를 뛰어넘는 최중요 핵심 구문 아닌가? 이걸 없애고
for ( in ) 과 while로 퉁치다니 언어 개발자들이 오버하는게 아닌가 싶다.
그거 넣어준다고 해서 무슨 문제가 있다고...
물론 range 타입으로 그럭저럭 흉내는 낼 수 있지만.. 실제 개발에 들어가보니
애매한 경우가 너무 많다. for ( ; ; ) 가 아니고선 깔끔하게 해결 못할 경우가
너무 많다.
4) exception 처리가 엉망인 점
자바 100% 호환이라며 exception 처리가 왜 이리 엉망인가?
자바에선 문법의 일부로 포함되어 있는 함수 정의에서의 throws 구문이
kotlin에서는 애노테이션으로 구현되어 있고, 그러다보니 있으나 없으나
아무런 동작의 차이가 없다... 자바에선 개발툴이 알려줘서 실수 안할
부분들인데 kotlin에선 실수로 exception 처리를 빠트리는 경우가 너무 많다.
실제 exception이 발생해야만 아 여기에 익셉션 있었네 처리해야지 하고
알 수 있다. 익셉션 발생을 나중에 아는 경우가 너무 많다.
이 부분이 제대로 처리 안된 채로 자바 100% 호환이라고 주장하는건 무리다.
런타임이 아니라 소스 편집중에 발생할 익셉션의 종류와 위치를 미리
알 수 있어야 한다... 자바에서도 되는게 kotlin에서 안된다니 이거 참...
게다가 NoSuchFileException같은걸 왜 kotlin에선 같은 이름으로 재정의
해놓는건지 모르겠다. 어느쪽이 import 되었는지 정확치 않다보니 당연히
catch에서 받았겠지 하고 생각했는데 못받는 경우가 빈번하다.
짜증 만발이다.
5) @JvmField 와 @JvmStatic의 귀찮음
자바 100% 호환이라지만 사람이 수동으로 신경써줘야 하는 부분이 너무 많다.
변수를 자바쪽에서 불러오기 위해서
일일이 앞에다 @JvmField와 @JvmStatic를 넣어줘야 하는 귀찮음이 힘들다.
빼먹는 경우가 너무 많다. 자바 없이 100% kotlin only로 작업하면 차라리 나을텐데...
어째 저한텐 에러 주범이더군요ㅠㅠ
저같은 사람이 많아서 그러지 않았을까 싶다는...
/Vollago
네트웍 처리를 하든 파일 입출력을 하든 디비 접속을 하든 다 자바 api니까 자바 지식 없이 배우는건
무리라고 할 수 있을 것 같습니다. 대부분의 예제/라이브러리들은 자바로 되어 있고 코틀린에선
그걸 변환해서 써야하는 입장이라서요..
구글에서 Kotlin을 안드로이드 개발 공식 언어로 추가하면서, 요즘 나오고 있는 샘플 코드들은 Kotlin으로만 나오는 경우도 많아요.
Android Studio가 공식 개발툴로 바뀌고 이클립스로 개발하는게 사장된 것처럼, 장기적으로 안드로이드 개발은 Kotlin으로 다 대체 될거 같긴 합니다.
특히 자바스크립트 요즘 분위기 보면 for ( ; ; ) 을 안쓰게 하려는 분위기인지라... 전 개인적으로 forEach 좀 별로인데...ㅠ
밑에 글로 봐선 Range로 넣는 경우가 아니면, kotlin에선 for랑 forEach랑 별 차이 없는거 같은데요.
https://medium.com/@elye.project/kotlin-for-loop-vs-foreach-7eb594960333
while 들어가기전에 선언하고, 마지막에 반복문 끝나기전에 변수 바꿔주구요
물론 이게 직관적이지는 않지만요
while을 쓰면 앞뒤로 코드가 분산되는데 이거 일일이 찾아댕기는게 좀 귀찮은 일이죠...
1줄이 3줄되는거라... 아니 사실 5줄 되는 경우도 많습니다.
for( ;; ) 쓰고 바디가 딱 1줄뿐이면 전체 코드가 딱 2줄로 끝나는데
이걸 while로 쓰면 { } 를 어쩔 수 없이 쓰게 되니까요.. (바디가 1줄로 안끝남)
2줄과 5줄(코딩 스타일에 따라 6줄)은 볼륨 차이가 크죠..
2줄로 끝나는 깔끔한 코드가 6줄로 늘어진다고 생각해보세요.. 짜증이 좀 나죠.