나는 왜 Java에서 Kotlin으로 넘어갔을까?
나는 안드로이드 개발자다. 그리고 Kotlin은 Goolge I/O 2017에서 Android의 공식 언어로 지정됐다. 여러가지 배경이 있겠지만 Android에서 지원하는 Java 버전은 Java7 또는 8(사실 이것도 옛말이고 Android14 preview에서 OpenJDK17을 지원한다.)이 기본이었기 때문에 최신 트렌드에 맞는 개발이 어려웠다. 그런 와중에 Kotlin은 그동안의 밀린 트렌드를 한번에 해결해 줄 수 있었다. Google 입장에서는 10년에 걸친 Oracle과의 소송전에서 마침내 이기긴 했지만 그동안에 Java로 부터 어느정도 독립하고 싶은 마음이 있었을 것이라 본다. 어쨌든 안드로이드 개발자 입장에서는 Java의 대안으로 Kotlin을 거부할 이유가 없었다.
Kotlin은 정말 매력적인 언어이다.
Kotlin은 개발자라면 한번 쯤 꿈꿔볼 깔끔하고 세련된 코딩을 가능하게 한다. Java처럼 장황하지도 않고 제법 세련되었는데 이는 Kotlin이 함수형 프로그래밍을 지원하는 멀티패러다임 언어이기 때문에 가능하다. 그리고 이로 인해 Java에서는 생각지도 못한 문법으로 깔끔하고 세련되게 코딩할 수 있다는 점은 나의 개발 힙스터부심을 자극하기에 충분했다. Kotlin에서는 “혹시 이렇게도 되지 않을까?”하면 “역시나!” 하고 되는 것이 나뿐만 아니라 여러 Java개발자 들의 가려움을 정확하게 해소해주지 않았나 싶다.
단순히 세련된 것 뿐만 아니라 제법 다양한 기능을 제공하고 있다. Extension, sealed class, scope function, coroutine, operator overriding 등 굉장히 편리하고 멋진 기능들을 제공해주고 있다. 물론 최신 Java에서 Kotlin을 많이 따라잡아서 이 편의 기능 중 상당 부분을 제공하고 있다. (애초에 선발주자였던 Java가 Kotlin을 따라잡는 이 상황 자체가 Kotlin과 Java의 관계를 단적으로 설명한다고 볼 수 있겠다. 그럼에도 불구하고 최신 Java를 세팅할 노력이 차라리 Kotlin 도입하는 것에 비해 큰 메리트가 없다. 적어도 Kotlin이 최신 Java보다 뒤떨어 질만한 점이 딱히 없다는 것도 한몫 한다.
굳이 이렇게 장황하게 Kotlin의 장점에 침이 마르게 칭찬한 이유는
지금 부터 소개할 이 책에서는 굳이 Kotlin을 집중하여 소개하는 내용이 없기 때문이다.
Java에서 Kotlin으로
한빛 미디어 서평단 활동의 일환으로 책을 제공 받고 작성된 리뷰입니다.
이 책은 Koltin에 관한 책이 아니라 Kotlin으로 리팩터링 하는 방법
에 관한 책이다. 그래서 오히려 “Kotlin의 결”을 느낄 수 있다. 바꿔말하자면 어떤 코드가 Kotlin스러운 건지
를 배울 수 있는 책이다.
단순히 Java코드를 Kotlin으로 컨버팅 하는 것이 아닌 Java스럽게 상상한 코드를 Kotlin스럽게 표현하는 방법을 배울 수 있다. 코딩 스타일의 차이를 넘어 함수형 프로그래밍으로 개발하는 법, Kotlin의 빌드 특성에 따른 더 나은 성능으로 개발하는 법 등 이미 Kotlin을 학습한 사람이더라도 충분히 배울 점들이 많이 있다.
나의 Kotlin 리팩터링 경험담
Kotlin을 학습하는데에도 노력이 필요하다. 당연한 이야기 같겠지만 막상 Kotlin 문법을 처음 공부할 땐 생각보다 오래 걸리지 않았다. 그러나 막상 그 이후에 코딩을 해보면 Kotlin을 Java처럼 짜고 있는 스스로를 발견했다. 이는 마치 C언어로 개발을 시작한 내가 Java와 같은 OOP 언어를 처음 접했을 때와 비슷한 양상이었다. Kotlin을 제법 Kotlin스럽게 짜는데 까지는 생각보다 오랜 시간과 경험이 필요했다.
또한 Null Safe Zone의 현실에 부딪히곤 했다. 분명 Kotlin은 Null-Safe 하다고 하는데 막상 처음 Kotlin을 기존 Java 코드와 상호운용해보면 오히려 NullPointerException이 더 자주 발생했다. 이 역시 Java와 Kotlin의 상호 운용에서 흔히 겪는 실수들이다. 순수 Kotlin으로 짠다면 비교적 Null-Safe하게 짤 수 있지만 Java와 상호운용이라면 조심해야 하는 지점들이 있다.
이 책에서는 내가 겪은 이 두가지 문제에 대한 해답이 모두 들어있었다.
Kotlin 리팩터링 전략
Kotlin으로 리팩터링 하는 과정에서 흔히 겪는 케이스들을 정리하여 소개하고 있다. 예를 들면 Optional 에서 Nullable 타입으로 바꾸는 방법, Beans(POJO)에서 value로, Kotlin collection을 활용하는 방법 등 그리고 이 방법들 지레짐작으로, 혹은 개인의 선호도를 기준으로 하는 것이 아니라 ‘왜 Kotlin은 이렇게 리팩터링 해야하는지’를 아주 명확한 근거를 가지고 소개한다. 그래서 이 점에서도 많은 공부가 된다. 특히 업무상 코드 리뷰를 하는 개발자라면 많은 도움이 될 것이다.
개인적으로는 아래 챕터에서 그동안 내가 갖고있던 오해와 궁금증을 많이 해결할 수 있어서 이 부분은 꼭 읽어보시길 추천드린다. 아래 챕터들을 읽으면서 아직 나에게도 Java 개발자스러운 부분이 일부 남아있었다는 점을 깨달을 수 있었기 때문이다. 물론 나머지 챕터들도 굉장히 알찬 내용들이지만 아래 챕터는 Kotlin 개발자들 모두에게 꼭 추천하고 싶은 내용들이라 강조 드린다.
- 챕터 6 자바에서 코틀린 컬렉션으로
- 챕터 13 스트림에서 이터러블이나 시퀀스로
- 챕터 16 인터페이스에서 함수로
- 챕터 19 예외 던지기에서 값 반환으로
이런 분들에게 추천 드립니다.
Java로 시작해서 Kotlin을 학습하고 계신 분들에게 꼭 추천드린다. Kotlin의 몇 안되는 단점은 ‘여전히 Java처럼’ 짤 수 있다는 것이다. 그래서 처음 Kotlin을 접할 때 Java스러움에서 벗어나지 못하는 경우가 흔히 있다. 이 책을 통해 ‘같은 JVM이지만 왜 Kotlin에서는 이렇게 짜야하는지’를 파악할 수 있기 때문에 추천드린다.
또한 Kotlin을 이미 알고 있더라도 내가 Kotlin을 제대로 사용하고 있는지를 다시 한번 돌아볼 수 있다는 점에서 오히려 Kotlin을 잘 사용하고 계신 분에게 더 도움이 많이 될 수도 있을 것 같다. 내 Kotlin 코드가 정말로 최적화 되어 있는지, Kotlin의 장점을 100% 살리고 있는지를 파악하실 수 있을 것이다.
마지막으로 Kotlin을 공부하느라 애쓰고 있던 2018년의 나에게도 꼭 추천해주고 싶다. 이 책이 있었다면 나도 조금은 덜 힘들지 않았을까? 하는 생각이 든다.