#컴퓨터 프로그램을 개발하다 보면, 별별 일이 많이 생기는데, 기존에 개발된 프로그램을 다른 언어로 바꿔 만들어야 하는 경우도 생긴다. 내 기억에 전 세계적으로 이런 일이 생겼던 때가 밀레니엄 버그로 유명했던 2000년 전후였을 것이다. 그때는 은행이며 회사며 이 문제로 난리 난리였다. 새로운 언어로 바꾸는 것도 일이 었지만, 기존에 개발 되었던 프로그램을 분석할 인력이 모자라 은퇴한 코볼 개발자를 다시 모시고 오는 일도 많이 벌어졌었다.
#프로그램 언어 바꾸는 게 뭐 어렵냐 생각하는 사람도 있을 것이다. #프로그램언어 문법들이 거기서 거기고, 대부분 비슷한 기능을 지원하니까 마치 번역기 돌리듯이 하면 되는 거 아닌가 하는 생각도 할 수 있다. 오래 전에 실제로 베이직을 C언어로 바꿔주는 그런 프로그램도 있었다. 그러다 보니, 현장에서 업무 담당자나 경험이 적은 개발자는 프로그램 언어 바꾸는 걸 별 거 아닌 거로 말을 하곤 한다.
그러나 이건 대단히 잘못된 생각이다. 다른 #프로그래밍 언어로 옮기는 #마이그레이션 작업은 두 언어의 문법만 안다고 되는 단순한 일이 아니다. 그랬다면, 밀레니엄 버그 당시에 은퇴 개발자까지 불러 오는 일은 없었을 것이다. 문법적인 것은 기본이고, 전체를 보는 프로그램 설계 능력, 각종 처리에 대한 자잘한 노하우까지 겸비하고 있어야 한다. 게다가 요즘 프로그램 언어들은 기능도 대폭 늘어나서 무척 복잡해졌다. 마이그레이션을 만만하게 봤다가는 큰 코 다치기 십상이다.
그러기에 이번에 본, 자바를 코틀린으로 바꾸는 각종 노하우를 담고 있는 '자바에서 코틀린으로'는 #리팩터링, 마이그레이션 측면에서 너무나도 가치 있는 책이라 생각한다. 이 책을 통해 내 자바와 코틀린 실력이 얼마나 형편없었는지 깨달을 수 있었다. 변명이지만 요즘은 C# 위주로 개발하다 보니, 자바에서 놓치고 있는 것도 많았고, 코틀린도 나름 알고 있다고 생각했는데, 아는 게 아는 게 아니었다. 그냥 유치원 수준이었다. ( 리팩터링(리팩토링)은 겉으로 드러난 동작은 바꾸지 않고, 유지 보수를 위해 내부적으로 코드를 알아보기 쉽게 만들고 단순화, 모듈화 또는 효율을 높이는 등의 작업을 하는 것을 말한다.)
'자바에서 코틀린으로'의 저자 덩컨 맥그레거와 냇 프라이스는 소프트웨어 개발 경력이 둘이 합쳐 50년이 넘는다. 자바로 잔뼈가 굵었고, 코틀린에도 많은 식견을 가진 분들이다. 두 언어에 많은 경험이 필요한 마이그레이션, 리팩토링 모두에 최적인 것이다.
일단 #자바에서코틀린으로 는 저자가 서문에서도 밝혔듯이 코틀린 언어를 가르쳐 주는 책이 아니다. 물론 자바를 가르쳐 주지도 않는다. 자바에서 코틀린으로 마이그레이션 하는 방법을 알려주고, 리팩터링을 통해 코틀린의 제대로 된 활용을 알려 주는 책이다. 그러기 때문에 자바나 코틀링 양쪽으로 얻을 수 있는 것이 참 많고, 자바와 코틀린 실력을 한 두 단계 업그레이드 할 수 있는 최적의 책인 것이다.
다만 그만큼 수준이 높다. 최소 자바와 코틀린 문법은 알고 있어야 하고, 인텔리J 경험도 살짝 필요하다. 수준이 있다 보니, 어렵게 느낄 수 있으나, 난이도가 높은 책은 아니다. 읽어 보면 알겠지만, 설명이 매우 자세하게 되어 있다. 자바에서 코틀린으로 코드를 바꿔가는 과정을 하나하나 일일이 비교 설명하고 있고, 사용되는 코딩 언어 문법에 맞춰 단계별로 코틀린으로 바꿔 나간다. 이런 점진적인 방법은 갑작스런 혼란을 막아주고, 좀 더 쉽게 이해할 수 있게 도와준다.
더욱이 리팩토링은 딱 한 가지 방법이 아니라, 더 단순화 된 방법을 찾아 보거나, 명시성이 좋은 방법, 효율성이 좋은 방법을 따로 더 알아본다. 일반적인 소프트웨어 개발 과정과도 같은 방법인데, 이렇게 하니, 코틀린에서 내가 미처 몰랐던 부분도 더욱 깊이 있게 알 수 있고, 활용의 폭도 넓힐 수 있었다. 이런 과정 속에 원래의 자바 코드보다 눈에 띄게 줄어든 코틀린 코드를 보고 있으면, 개발자만이 느낄 수 있는 '이거지!' 하는 묘한 만족감도 느껴진다.
'자바에서 코틀린으로'에는 저자들의 다양한 마이그레이션 경험 이야기, 노하우 같은 것이 들어 곳곳에 있는데, 특히 주의할 부분이나 중요한 부분, 부연 설명은 TIP, WARNING 또는 사각 박스 코너에 넣어 강조하고 있다. 프로그램 문법서에서는 절대 경험할 수 없는 실전 코틀린 코딩을 제대로 배울 수 있다.
이 책을 먼저 읽어 본 입장에서 일단은 가급적 챕터 1부터 순서대로 보는 것을 권한다. 특히 챕터 1에는 책 전반의 개념과 내용 흐름에 대해 언급하고 있으므로 무조건 읽어 보는 것이 좋다. 이후 챕터에서는 클래스, 빈, 컬렉션, 널, 함수, 프로퍼티, 타입, 예외 등 프로그램 코딩 전반에 대한 내용을 거진 다루고 있다. 각 챕터에서는 연관된 다른 챕터에 대해서도 알려주고 있어, 나중에 다시 볼 때, 점핑하며 참고하기 편하다.
여기서 하필 자바와 코틀린인가 이해가 안 되는 분도 있을 것이다. 간단히 말하면, 코틀린이 자바와 100% 호환이 되기 때문이다. 두 언어가 마이그레이션에 찰떡궁합인 것이다. 그러나 엄연히 두 언어는 다른 프로그래밍 언어다. 그러기에 '자바에서 코틀린으로'에서는 자바의 결, 코틀린의 결이 다름을 거듭 강조하고 있다. 비슷해 보인다고, 번역기 돌리듯 코틀린을 자바처럼 코딩해서는 안 된다는 것이다.
즉 자바는 자바 다워야 하고, 코틀린은 코틀린 다워야 한다는 것이다. 코틀린의 경우 자바 보다 함수적인 사고가 필요한 언어인데 이런 차이를 제대로 알고 적용하는 것은 쉽지 않다. 이런 차이를 바닥부터 익히기 위해 '자바에서 코틀린으로'에서는 단계별로 마이그레이션 과정을 보여주며 코틀린 근육을 키우고 있는 것이다.
내가 코틀린을 처음 접했을 때, 구글이 안드로이드에 쓸 자바 땜방으로 괴상한 놈을 쓰는 구나 했었다. 이런 선입견을 가졌으니, 당연히 코틀린을 자바의 틀 안에 끼워서 이해를 해왔었다. '자바에서 코틀린으로'를 보기 전에는 내 잘못이 뭔지도 몰랐는데, 지금은 창피할 정도로 절실히 느끼고 있다. 이 책을 통해 코틀린의 결이 얼마나 다른 지 알 수 있었다.
수준 높은 코틀린 코드를 맛 볼 수 있고, 활용 측면에서도 많은 도움이 되는 책인 만큼, 코틀린, 코드 리뷰, 리팩토링, 마이그레이션 등에 관심 있는 다양한 소프트웨어 개발자에게 좋은 멘토가 되어 줄 것이다.