최근 자바 개발에서 코틀린으로 넘어오시는 분들을 많이 볼 수 있습니다. 저 역시도 19년 첫 회사에 취업하여 자바로 안드로이드를 개발하다 20년부터는 코틀린으로 개발을 시작하였습니다.
이 글을 읽는 여러분들은 자바에서 코틀린으로 마이그레이션을 고민 중 이시거나 혹은 코틀린에 대한 공부를 원하시는 분들이라 생각됩니다. 그런 분들을 위한 도서. 자바에서 코틀린으로: 코틀린으로 리팩터링하기
도서를 읽고 리뷰를 해보도록 하겠습니다.
본 도서는 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.
시작하기 앞서
코틀린은 먼 미래가 아닙니다.
코틀린은 Stack Overflow 2022 survey 기준으로 가장 인기 있는 언어(Most popuplar technogoies) 15위, 가장 사랑/원하는 언어(Most loved, dreaded, and wanted) 11위를 기록하고 있습니다.
또한 2017년 구글에서 정식 언어로 채택하였으며, 안드로이드의 경우 Google I/O 2019에서 Kotlin-first 를 발표하였습니다.
Kotlin-first는 Jetpack 라이브러리, 샘플, 문서, 교육 컨텐츠와 같은 새로운 Android 개발 도구와 콘텐츠를 빌드할 때 Kotlin을 우선으로 디자인함을 의미하며, 자바에서도 사용할 수 있게 지원을 제공합니다.
단적인 예시로 이전에는 안드로이드 개발자 공식 문서에서 자바로 예시 소스코드를 설명하였지만 Kotlin-first
이후로는 코틀린을 기본 소스코드로 설명하고 있습니다.
코틀린을 경험하면 돌아갈 수 없습니다.
물론 사람들마다 선호하는 언어가 다르기에 코틀린을 경험하더라도 자바가 편하다고 생각하시는 분들도 있다고 생각됩니다. 하지만 필자는 물론 회사 내 백엔드 개발자분들이나 지인들 모두, 일명 코프링(코틀린 + 스프링)을 경험하고 나면 다시 자바로 돌아가 개발할 때에도 코프링 생각이 계속 난다고 할 정도로 동일한 의견을 내고 있습니다.
도서 내용
진행 방식
본 도서는 트래블레이터(Travelator)라는 국제여행을 계획하고 예약을 도와주는 가상의 애플리케이션을 기반으로 작성된 자바 소스코드 기능 하나하나 코틀린으로 리팩터링 하는 방식으로 진행되고 있습니다.
또한 단번에 변환하고 끝내는 것이 아닌, 1차적인 변환을 마친 후 아쉬운 점 및 문제없이 완료된 것 같지만 실제 프로덕트로 배포 시 발생하는 상황을 보여주며 2차, 3차 다시 리팩토링을 하면서 자바 코드를 코틀린스러운 코드로 변환하는 과정을 보여줍니다.
한 예시로 실제 경험담을 상황으로 구성하여 발생할 수 있는 문제점과 이를 해결한 방안을 함께 포함하여 설명합니다.
덩컨과 냇은 2015년 연말 연휴가 끝난 후 업무로 복귀했고, 이전에 통과하던 단위 테스트가 실패한다는 사실을 발견했다. 이유는 2015-01-01T00:00:00라는 시간을 항상 미래일 것으로 생각하고 사용했기 때문이었다. 2015년이 되자 이 시간에 대한 이전이나 이후 관계에 의존하는 모든 테스트가 실패하기 시작했다. 덩컨과 냇은 이 책에서 설명한 리팩터링을 사용해 문제가 되던 테스트를 수정했다.
- 2015년은 시간의 끝이었다
테스트 중점
개인적으로 리팩토링을 하는 행위는 새로운 기능을 만드는 행위보다 더 위험하다고 생각됩니다. 개발자의 관점에서는 더 직관적이고 효율적인 로직으로 바꿈으로써 일종의 이쁜 코드(?)로 바꾸는 행위이기에 완료하고 바뀐 코드를 볼 때 희열을 느낄 수 있습니다. 저도 리팩토링이 끝난 이후 코드를 보면 너무나 아름답다는 생각에 엄청난 희열을 느낄 때 가 있습니다.
그러나 이것은 개발자의 관점일 뿐, 리팩토링 자체는 사용자 관점에서는 크게 관련이 없습니다. 기존보다 성능이 향상되거나 crash 빈도를 줄임으로써 사용자에게 영향을 주기는 하겠지만, 요즘 디바이스의 성능은 과거에 비하면 상향평준화되었기에 성능이 2배-3배 상승하더라도 정말 n초 이상 걸리는 계산 로직을 제외하면 느끼기가 어렵습니다. 또한 crash 발생 비율이 줄었다 하더라도 '요즘 오류가 안나는 것 같네' 정도로 넘어갈 것입니다.
물론 어디서든 펑펑 터지는 crash 혹은 잘못된 로직으로 큰 부하나 비용이 발생한다면 리팩토링이 시급할 수 있겠지만, 기존 정상적으로 동작되던 기능을 단순히 더 깔끔한 로직을 위해 리팩토링하다 무결했던 기능까지 망쳐버린다면 그것만큼 큰 잘못은 없다고 생각합니다.
그렇기에 본 도서에서는 마틴 파울러의 말을 인용하면서 리팩토링 과정에서의 모든 기능들은 테스트 코드와 함께 작성을 하고 있습니다.
리팩터링을 하고 싶다면, 필수 전제조건은 탄탄한 테스트가 있어야 한다.
- 마틴 파울러
단순히 기능 로직을 자바에서 코틀린으로 리팩터링 하는 뿐만 아닌 테스트 코드도 자바에서 코틀린으로 작성하는 방법도 함께 설명하고 있습니다.
효율적인, 안전한, 더 나은 로직과 설계
각 챕터에서는 A코드를 B코드로 변경하였습니다로 끝나는 것이 아닌 변환하는 과정에서 효율적이고, 안전하고, 더 나은 로직과 설계를 위한 설명을 첨부하고 있습니다. 기초적인 내용부터 깊게 생각해 보았을 때의 내용 모두를 담고 있기에 외적으로도 배울 수 있는 여러 내용이 담겨있습니다.
한 예시로 챕터 7의 내용 중 '클라이언트 앱에서 고객의 현재 여행 정보를 받아오는 기능'을 자바에서 코틀린 코드로 리팩토링을 하는 부분이 있는데, 이때 동작과 계산에 대한 부분을 집중적으로 설명하고 있습니다.
계산이라는 행위와 동작이라는 행위는 결국 함수를 통해 구현되기에 결과가 같아 보일지언정, 동작이라는 행위가 들어간다면 리팩토링으로 인해서 각 동작이 호출되는 시점이나 호출 여부가 달라질 수 있기에 발생할 수 있는 문제점과 이를 해결하는 방법을 설명하고 계산과 동작에 대한 행위를 한번 더 생각해 보는, 그리고 어떻게 설계하는 것이 좋은지에 대한 내용이 담겨있습니다.
여러 가지 팁
챕터 중간중간에는 단순 Additional 한 내용 외에도 생각을 전환하고 발전에 도움을 주는 여러 팁들이 존재합니다. 다음은 챕터 9의 TIP 중 하나입니다.
단일식 함수를 계산에만 사용하라 우리가 단일식 함수를 계산(7.2절 ‘계산’을 보라)에만 사용하는 관습을 택한다면, 단일식 함수를 사용하는 의도를 다른 사람들에게 알릴 수 있는 수단이 생긴다. 단일식 함수를 보면 그 함수가 동작(7.3절 ‘동작’을 보라)이 아님을 알 수 있으므로 해당 함수를 더 안전하게 리팩터링 할 수 있다. 실질적으로 이 말은 단일식 함수가 Unit을 반환하거나 가변 상태를 읽거나 쓰지 말아야 한다는 뜻이다. 가변 상태를 읽거나 쓰는 것에는 I/O를 수행하는 행위도 포함된다.
- 단일식 함수를 계산에만 사용하라
저는 그동안 한 줄로 표현이 가능한 동작 역시 단일식 함수로 표현하는 경우가 있었습니다. 그러나 저자의 팀에서는 단필식 형태를 계산에만 제한하여 사용하였고 그에 대한 이유도 함께 풀이하고 있는데, 읽어보니 납득이 되며 앞으로의 개발에도 반영한다면 직관적이며 차후 자바에서 코틀린이 아니더라도 코틀린 로직을 리팩토링 할 때 에도 도움이 되겠다는 생각이 들었습니다.
이처럼 여러 팁을 통해 새로운 깨달음을 얻을 수 있었던 것 같습니다.
도서 평가
본 도서는 '자바 코드가 이렇게 코틀린 코드로 바뀌었습니다.' 하고 끝나는 것이 아닌, 기존 내장 함수들에 대한 원리와 리팩토링 과정에서 고려해야 하는 점, 개선할 수 있는 점 하나하나 단계별로 설명을 하고 있습니다.
그렇기에 현업 자바 개발자라면 코틀린을 경험하지 않았더라도 큰 어려움 없이 읽을 수 있겠지만 아직 개발 지식이 부족하거나 프로젝트 개발 경험이 적다면 각 함수가 가지고 있는 특징, 설계 방식 등에 대해 단순히 리팩토링 외적으로도 많은 생각을 하면서 읽어야 하는 어려움이 있을 것으로 보입니다.
다만 이 책을 모두 읽고 난다면, 고민하고 생각한 만큼 성장할 수 있을 것이라 생각되며, 이미 코틀린으로 개발하고 있는 개발자라 하더라도 조금 더 코틀린스러운 코드와 리팩토링을 고려할 수 있는 로직, 그리고 몰랐던 코틀린의 특징들도 배울 수 있을 것이라 생각됩니다.
마치면서
코틀린을 사용한 지 어느덧 3년이 지났기에 완벽하지는 않지만 코틀린에 대한 기본 이해도는 충분하다는 생각으로 단순히 마이그레이션 할 때에만 도움이 되지 않을까 싶었지만, 이 책을 읽으면서 자바에서 코틀린으로 넘어가는 과정에서의 기본 원리, 코틀린이 지향하는 방향, 더 나은 설계에 대해 많은 고민과 생각을 하면서 읽기 전과 후로 조금 더 성장할 수 있었던 것 같습니다.
자바 및 기타 언어를 사용하다 코틀린으로 마이그레이션을 고려하고 계시는 분이라면 본 도서를 적극 추천드립니다.
책의 제목에서도 알 수 있듯이 자바나 기본 개발 지식이 부족한 상태에서 본 도서를 읽는다면 고민과 생각을 깊게 해야 할 수 있기에 어려움을 느끼실 수 있지만, 만약 이겨내고 완독을 하신다면 오히려 더 높은 성장을 할 수 있을 것이라 생각됩니다.
'도서 리뷰' 카테고리의 다른 글
스마트폰에 대해 많은 생각을 하게 된 도서 - 인스타 브레인 (0) | 2023.07.10 |
---|---|
위키피디아(나무위키)를 믿을 수 있을까? 랜선 사회 도서 리뷰 (0) | 2023.06.23 |
[도서 리뷰] UX/UI 디자이너를 위한 실무 피그마 (0) | 2022.11.26 |
혼합현실 UX를 위한, 메타버스를 디자인하라 (0) | 2022.07.24 |
완성된 웹사이트로 배우는 HTML&CSS웹 디자인 (0) | 2022.05.29 |
상상하는 것을 소프트웨어로 구현하는 것을 좋아하는 청년
게시글이 마음에 드시나요? [ 공감❤️ ] 눌러주시면 큰 힘이 됩니다!