메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

자바에서 코틀린으로

코틀린으로 리팩터링하기

한빛미디어

번역서

판매중

  • 저자 : 덩컨 맥그레거, 냇 프라이스
  • 번역 : 오현석
  • 출간 : 2022-11-10
  • 페이지 : 544 쪽
  • ISBN : 9791169210447
  • 물류코드 :11044
  • 초급 초중급 중급 중고급 고급
4.7점 (22명)
좋아요 : 4

자바에서 코틀린으로 코드 마이그레이션하기

 

인도네시아 자바섬에서 러시아 코틀린섬까지 1만3000킬로미터를 육로로 여행하려면 일주일이 걸린다. 숙련된 자바 개발자가 코틀린에 능숙해지기까지 걸리는 시간도 일주일 남짓일 것이다.

하지만 코틀린에서는 자바와 다른 방식이어야 한다. 코틀린의 결에 맞게 값 중심의 함수형 프로그래밍, 널 가능성, 람다, 확장 함수, 결과 타입 등을 활용해 코드를 작성하면서 코틀린의 강점을 살릴 수 있다. 이렇게 되면 전통적인 자바 객체 지향 코드보다 더 안전하고, 유지 보수하기 쉽고, 간결하면서 보기 좋은 코드를 작성할 수 있다.

저자들은 2015년에 이 여행을 시작한 후, 많은 팀과 개발자가 자신들의 발자취를 따르도록 도왔다. 옵셔널에서 널이 될 수 있는 타입으로, 빈에서 값으로, 열린 클래스에서 봉인된 클래스로 변경하는 등 여러 코스로 나누어진 여행을 함께 떠나보자. 여정마다 핵심 개념을 설명한 뒤, 프로덕션 자바 코드를 전형적인 코틀린 코드로 리팩터링하는 방법을 보여주는 방식으로 구성된다. 리팩터링하는 과정은 점진적으로 안전하게 이뤄지며, 리팩터링 전후 자바와 코틀린의 상호 운용성은 그대로 유지된다.

코틀린으로 리팩터링한 코드는 더 단순하고, 표현력이 좋으며, 변경하기가 쉽다. 이 여행이 끝날 즈음이면 자신 있게 자바 코드를 코틀린으로 리팩터링할 수 있고, 밑바닥부터 코틀린 코드를 작성할 수 있으며, 시간에 따라 진화하는 자바와 코틀린이 혼합된 코드 기반을 관리할 수 있게 될 것이다.

 

 

700(상세이미지)자바에서 코틀린으로.jpg

덩컨 맥그레거, 냇 프라이스 저자

덩컨 맥그레거, 냇 프라이스

두 사람은 합쳐서 50년 이상을 전문적인 소프트웨어 개발자로 살았다. 이들은 다양한 산업 분야에서 상당한 양의 소프트웨어를 개발했다. 소프트웨어를 개발하는 데 관련 글을 많이 작성했고, 소프트웨어 개발 관련 글을 작성하기 위한 소프트웨어를 만들었고, 소프트웨어를 개발하는 법을 강의했고, 콘퍼런스에서 소프트웨어 개발에 대한 워크숍을 진행했고, 소프트웨어 개발에 대한 콘퍼런스 조직을 도왔다. 이들이 개발한 소프트웨어 중 상당수는 자바로 쓰였다. 모든 소프트웨어를 자바로 개발하지는 않았지만 상당 부분을 자바로 개발했다. 이들은 자바가 C++과 비교할 때 새로운 바람인 것처럼 느껴지던 때를 기억할 만큼 오랫동안 소프트웨어 업계에 종사했다. 이제 이들은 자바와 비교할 때 코틀린이 새로운 바람이 될 수 있음을 알았고, 코틀린으로 소프트웨어를 개발하는 법에 대한 책을 집필했다(그리고 이 책을 작성하는 과정을 돕기 위한 소프트웨어도 개발했다).

오현석 역자

오현석

모빌리티42 이사로 일하면서 매일 고객의 요청에 따라 코드를 만드는 현업 개발자다. 어릴 때 처음 접한 컴퓨터에 매료된 후 경기과학고등학교, KAIST 전산학 학사와 프로그래밍 언어 전공 석사를 취득하며 계속 컴퓨터를 사용했다. 직장에서는 주로 코틀린이나 자바를 사용한 서버 프로그래밍을 하고, 주말이나 빈 시간에는 번역을 하거나 공부하면서 즐거움을 찾는다. 『코어 파이썬 애플리케이션 프로그래밍』(에이콘, 2014)을 시작으로 『배워서 바로 쓰는 스프링 프레임워크』(2020), 『러닝 리액트(2판)』(2021), 『고성능 파이썬(2판)』(이상 한빛미디어, 2021) 등 30권 이상의 책을 번역했다.

 

 

CHAPTER 1 소개

1.1 프로그래밍 언어의 결

1.2 코틀린의 결

1.3 코틀린으로 리팩터링하기

1.4 어떤 코드를 변경할까?

1.5 시작하기

 

CHAPTER 2 자바 프로젝트에서 코틀린 프로젝트로

2.1 전략

2.2 코틀린 지원을 자바 빌드에 추가하기

2.3 다음으로 나아가기

 

CHAPTER 3 자바 클래스에서 코틀린 클래스로

3.1 간단한 값 타입

3.2 데이터 클래스의 한계

3.3 다음으로 나아가기

 

CHAPTER 4 옵셔널에서 널이 될 수 있는 타입으로

4.1 없음을 표현하기

4.2 옵셔널에서 널 가능성으로 리팩터링하기

4.3 코틀린다운 코드로 리팩터링하기

4.4 다음으로 나아가기

 

CHAPTER 5 빈에서 값으로

5.1 빈

5.2 값

5.3 값을 선호해야만 하는 이유는 무엇인가?

5.4 빈을 값으로 리팩터링하기

5.5 다음으로 나아가기

 

CHAPTER 6 자바에서 코틀린 컬렉션으로

6.1 자바 컬렉션

6.2 코틀린 컬렉션

6.3 자바에서 코틀린 컬렉션으로 리팩터링하기

6.4 다음으로 나아가기

 

CHAPTER 7 동작에서 계산으로

7.1 함수

7.2 계산

7.3 동작

7.4 왜 계산과 동작에 신경 쓰는가?

7.5 왜 계산을 선호하는가?

7.6 동작을 계산으로 리팩터링하기

7.7 다음으로 나아가기

 

CHAPTER 8 정적 메서드에서 최상위 함수로

8.1 자바의 정적 멤버

8.2 코틀린 최상위 함수와 동반 객체

8.3 정적 메서드를 최상위 함수로 리팩터링하기

8.4 최상위로 옮기기

8.5 코틀린답게 다듬기

8.6 다음으로 나아가기

 

CHAPTER 9 다중식 함수에서 단일식 함수로

9.1 테이크 1: 인라이닝

9.2 테이크 2: 새 함수 도입하기

9.3 테이크 3: LET

9.4 테이크 4: 한 걸음 물러서기

9.5 다음으로 나아가기

 

CHAPTER 10 함수에서 확장 함수로

10.1 함수와 메서드

10.2 확장 함수

10.3 확장 함수의 타입과 함수의 타입

10.4 확장 프로퍼티

10.5 변환

10.6 널이 될 수 있는 파라미터

10.7 널이 될 수 있는 수신 객체

10.8 제네릭스

10.9 확장 함수를 메서드로 정의하기

10.10 확장 함수로 리팩터링하기

10.11 다음으로 나아가기

 

CHAPTER 11 메서드에서 프로퍼티로

11.1 필드, 접근자, 프로퍼티

11.2 어떻게 선택해야 할까?

11.3 가변 프로퍼티

11.4 프로퍼티로 리팩터링하기

11.5 다음으로 나아가기

 

CHAPTER 12 함수에서 연산자로

12.1 토대가 되는 클래스: Money

12.2 사용자 정의 연산자 추가

12.3 기존 코틀린 코드에서 정의한 연산자 호출하기

12.4 기존 자바 클래스를 위한 연산자

12.5 값을 표현하는 관습

12.6 다음으로 나아가기

 

CHAPTER 13 스트림에서 이터러블이나 시퀀스로

13.1 자바 스트림

13.2 코틀린 이터러블

13.3 코틀린 시퀀스

13.4 다중 이터레이션

13.5 스트림, 이터러블, 시퀀스 사이에 선택하기

13.6 대수적 변환

13.7 스트림에서 이터러블이나 시퀀스로 리팩터링하기

13.8 다음으로 나아가기

 

CHAPTER 14 누적시키는 객체에서 변환으로

14.1 누적기 파라미터를 사용해 계산하기

14.2 불변 데이터에 작용하는 함수로 리팩터링하기

14.3 한 번 더 해 보자

14.4 발견한 추상화를 더 풍성하게 만들기

14.5 다음으로 나아가기

 

CHAPTER 15 캡슐화한 컬렉션에서 타입 별명으로

15.1 도메인 컬렉션 합성하기

15.2 다른 프로퍼티가 있는 컬렉션

15.3 캡슐화된 컬렉션 리팩터링하기

15.4 다음으로 나아가기

 

CHAPTER 16 인터페이스에서 함수로

16.1 객체 지향 캡슐화

16.2 함수형 캡슐화

16.3 자바의 함수 타입

16.4 믹스 앤드 매치

16.5 여러 접근 방법의 비교

16.6 결합

16.7 객체 지향인가 함수형인가?

16.8 자바의 레거시

16.9 추적가능성

16.10 인터페이스에서 함수로 리팩터링하기

16.11 다음으로 나아가기

 

CHAPTER 17 목에서 맵으로

17.1 목을 맵으로 대체하기

17.2 그렇지만 실제 목에서 벗어났는가?

17.3 다음으로 나아가기

 

CHAPTER 18 열린 클래스에서 봉인된 클래스로

18.1 다형성을 쓸까 봉인된 클래스를 쓸까?

18.2 인터페이스를 봉인된 클래스로 변환하기

18.3 다음으로 나아가기

 

CHAPTER 19 예외 던지기에서 값 반환으로

19.1 예외 이전의 오류 처리

19.2 예외를 사용한 오류 처리

19.3 자바와 체크 예외

19.4 코틀린과 예외

19.5 예외를 넘어서: 함수형 오류 처리

19.6 코틀린의 오류 처리

19.7 예외를 오류로 리팩터링하기

19.8 더 수정하기

19.9 계층

19.10 다음으로 나아가기

 

CHAPTER 20 I/O 수행에서 데이터 전달로

20.1 테스트를 듣기

20.2 I/O에서 데이터로

20.3 효율적인 쓰기

20.4 효과적인 읽기

20.5 다음으로 나아가기

 

CHAPTER 21 예외에서 값으로

21.1 잘못된 원인 파악하기

21.2 오류 표현하기

21.3 I/O를 어떻게 처리할까?

21.4 다음으로 나아가기

 

CHAPTER 22 클래스에서 함수로

22.1 인수 테스트

22.2 단위 테스트

22.3 헤더

22.4 다른 필드 구분자

22.5 시퀀스

22.6 파일 읽기

22.7 커먼즈 CSV와 비교

22.8 다음으로 나아가기

 

CHAPTER 23 여행은 계속된다

23.1 결

23.2 함수형 사고

23.3 단순한 설계

23.4 함수형 프로그래밍과 텍스트를 통한 추론

23.5 리팩터링

23.6 리팩터링과 함수형 사고

‘이런 책이 있었더라면…’ 저자들이 상상하고 실제로 만든 책 ‘코틀린으로 리팩터링하기’

 

이 책은 일차적으로 코틀린으로 전환하려는 자바 개발자를 위한 책이다. 자바와 코틀린의 결을 비교하면서 자바에서 자주 쓰이는 기능을 어떤 코틀린 기능으로 이식할 수 있는지 차근차근 설명한다. 설명한 기능이 포함된 자바 코드를 코틀린 코드로 리팩터링하는 과정을 보여주면서 코드 기반을 깨지 않고 자바와 코틀린을 혼용하면서 점진적으로 자바 코드와 코틀린으로 변환한다. 변환된 코틀린 코드가 단순히 자바 코드의 코틀린 버전이 아니라, 코틀린 결을 따르는 코틀린다운 코드가 되는 과정을 보여준다. 그래서 기존 자바 프로젝트를 코틀린으로 변환하거나, 변환하는 과정에서 자바와 코틀린을 혼용하면서 계속 프로젝트를 유지 보수해야 하는 독자에게 큰 도움이 된다. 코틀린으로 이식해야 하는 기존 자바 프로젝트가 없는 독자라도 이런 과정을 살펴보면서 코틀린과 자바의 결이 어떻게 다른지 이해하고, 코틀린의 결을 살려서 같은 코드로 변환할 수 있는지 알 수 있다. 이를 통해 코틀린으로만 코드를 작성할 때도 도움을 받을 수 있으며, 리팩터링 단계를 따라하면서 리팩터링을 연습할 수 있다.

 

 

대상 독자

  • 기존 지식을 활용해 더 빠르게 코틀린을 채택하고 싶은 자바 개발자
  • 자바 코드를 코틀린 코드로 변환하고 싶은 분
  • 코틀린 프로젝트에서 본능적으로 코틀린과 함수보다 자바와 객체에 더 많이 의존하는 분

 

추천사

 

예전 방식의 전형적인 자바 코드를 점진적으로 변환하여 깔끔하고 표현력이 좋으면서 유지 보수가 쉬운 코틀린 코드로 만들어내는 과정은 코틀린을 배우는 멋진 방법이다. 저자들의 경험에서 우러나는 조언이 이 책에 잘 응축되어 있다.

_벵카트 수브라마니암 박사, 애자일 디벨로퍼(Agile Developer, Inc.) 설립자

 

이 책은 자바에서 코틀린으로 기술을 업그레이드하는 가장 빠르고 쉬운 방법이다. 프로 자바 개발자라면 누구나 필수로 읽어야 할 책이다.

_돈 그리피스와 데이비드 그리피스, 『Head First Kotlin』 공저자

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

장점

1.     코틀린의 문법자체는 파이썬같이 간단하여 쉽게 이해할 있지만 코틀린만의 스타일을 배우기는 힘들다. 책은 자바 코드를 코틀린으로 리팩터링하는 과정에서 코틀린만의 언어 철학을 이해 스타일을 배울 있다.

2.     리펙터링 과정에서 함수 클래스가 가지는 특징 설계 방식과 자바에서 보았던 고질적인 문제들(NullPointerException ) 코틀린에서는 어떻게 보완하였는지를 이해할 있다.

단점

1.     없음

후기

 

1.     대한민국은 자바 공화국이라고 말할 정도로 자바언어를 굉장히 많이 쓰고 있지만 최근 안드로이드 개발 쪽에서는 코틀린으로 전환하는 추세라고 하여 코틀린에 흥미를 느끼고 있었다. 특히 코틀린은 문법적으로 파이썬과 같이 사용자 중심적인 언어라 문법을 이해하는데 크게 어려움은 없었지만 기존에는 코틀린만의 스타일로는 어떻게 개발하는지에 대해서는 집중적으로 설명해주는 레퍼런스가 없었다. 책의 경우 기존의 자바 코드를 어떻게 하면 코틀린만의 스타일로 최적화하는지에 대해서 설명해주며 추후 자바로 프로젝트하기 보다 코틀린으로 좀더 효율적이며 가독성있게 프로그래밍을 해볼 있을 같다.

 

 

화면 캡처 2023-02-28 104124.png

 

 

 

안녕하세요, 다람쥐입니다.

한빛미디어 나는리뷰어다 2023년 도서 서평단으로

'자바에서 코틀린으로 : 코틀린으로 리팩터링하기' 도서를 신청했습니다.

자바와 코틀린 프로그래밍 언어에 관심이 생겼고

자바 프로젝트를 코틀린 언어로 리팩터링하는 과정을 기록한 글이

코틀린 프로그래밍 언어를 배우는 것보다 더 재밌어 보여서 신청을 하게 됐습니다.

 

초반에는 자바 데이터 클래스를 위주로 코틀린 클래스로 변환하는 작업을 합니다.

그 과정에서 자바 클래스 코드와 코틀린 클래스 코드의 차이점을 알려주는데요.

직접 예제와 같이 알려줘서 코틀린 언어를 잘 몰라도 부담 없이 읽을 수 있었어요.

 

코틀린에만 있는 기능 중에 하나로 옵셔널이 있습니다.

코틀린의 옵셔널에 대해서 알아보고 자바 프로젝트에서 어떤 걸 옵셔널로 선정하여 변환할 지 자세히 알려줍니다.

테스트 코드와 함께 리팩터링을 진행하고 변경한 게 잘 돌아가는지 확인할 수 있어서 실습하기 편했습니다.

또한 코틀린에 컬렉션 기능이 있는데, 자바의 이를 코틀린의 컬렉션으로 리팩터링하는 작업도 있습니다.

자바 컬렉션을 사용하는 코드에선 컬렉션 내부 상태 변경을 제거해야 코틀린 컬렉션에서 안정적으로 사용할 수 있습니다.

 

코틀린의 함수는 일급 함수입니다.

자바의 여러 메서드를 코틀린의 함수로 변환하는 작업이 주로 알려줍니다.

정적 메서드에서 최상위 함수로 변환하는 방법과 함수에서 연산자로, 인터페이스에서 함수로 변환하는 방법을 알려줍니다.

코틀린에서 자주 쓰이는 함수 사용법을 알려주고 이를 리팩터링 하는 과정이 자세했습니다.

 

전반적인 코틀린 언어에 대해서 설명해주고 자바 프로그래밍과 호환이 어떻게 되는지도 알려줘서 유익했습니다.

자바 프로젝트에서 코틀린 프로젝트로 변환하는 작업을 해야할 때 강추 드립니다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 




 

 

SE-3070af5d-9921-428a-8377-9ad9464527d8.jpg

 

 

제목 그대로의 책이다.

코틀린으로 시작하려는 사람보다는 "코틀린으로 넘어가면 돌아올 수 없다던데" 하는 자바 개발자가 봐야 할 책.

여저저기서 코틀린 노래를 부르는데 막상 개념서를 사서 읽기에는 부담스러워서 선택했다.

 

 

말 그대로 자바 코드를 리팩터링 하는데 여러 방법들을 소개해 준다.

다짜고짜 코틀린 하라며 자바와 크게 다르지 않다는 사람이 있어서 부담스러웠는데

그보다는 편하게 접근해서 읽었다.

 

 

본격적으로 코틀린을 할 생각이 없는 자바 개발자도 한 번쯤은 봐두면 좋은 책이 아닐까 생각한다.

 



나는 왜 Java에서 Kotlin으로 넘어갔을까?

thumb

나는 안드로이드 개발자다. 그리고 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으로

book

한빛 미디어 서평단 활동의 일환으로 책을 제공 받고 작성된 리뷰입니다.

이 책은 Koltin에 관한 책이 아니라 Kotlin으로 리팩터링 하는 방법에 관한 책이다. 그래서 오히려 “Kotlin의 결”을 느낄 수 있다. 바꿔말하자면 어떤 코드가 Kotlin스러운 건지를 배울 수 있는 책이다.

단순히 Java코드를 Kotlin으로 컨버팅 하는 것이 아닌 Java스럽게 상상한 코드를 Kotlin스럽게 표현하는 방법을 배울 수 있다. 코딩 스타일의 차이를 넘어 함수형 프로그래밍으로 개발하는 법, Kotlin의 빌드 특성에 따른 더 나은 성능으로 개발하는 법 등 이미 Kotlin을 학습한 사람이더라도 충분히 배울 점들이 많이 있다.


 

나의 Kotlin 리팩터링 경험담

01

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 예외 던지기에서 값 반환으로


 

이런 분들에게 추천 드립니다.

02

Java로 시작해서 Kotlin을 학습하고 계신 분들에게 꼭 추천드린다. Kotlin의 몇 안되는 단점은 ‘여전히 Java처럼’ 짤 수 있다는 것이다. 그래서 처음 Kotlin을 접할 때 Java스러움에서 벗어나지 못하는 경우가 흔히 있다. 이 책을 통해 ‘같은 JVM이지만 왜 Kotlin에서는 이렇게 짜야하는지’를 파악할 수 있기 때문에 추천드린다.

또한 Kotlin을 이미 알고 있더라도 내가 Kotlin을 제대로 사용하고 있는지를 다시 한번 돌아볼 수 있다는 점에서 오히려 Kotlin을 잘 사용하고 계신 분에게 더 도움이 많이 될 수도 있을 것 같다. 내 Kotlin 코드가 정말로 최적화 되어 있는지, Kotlin의 장점을 100% 살리고 있는지를 파악하실 수 있을 것이다.

마지막으로 Kotlin을 공부하느라 애쓰고 있던 2018년의 나에게도 꼭 추천해주고 싶다. 이 책이 있었다면 나도 조금은 덜 힘들지 않았을까? 하는 생각이 든다.

이번에 한빛 미디어에서 받은 책은

자바에서 코틀린으로 Java to Kotiln 코틀린으로 리팩터링하기 책입니다.

 

 

앞표지에는 사향고양이의 일종인 하우사제넷이 그려져 있네요.

저는 한빛미디어 책에 이렇게 멸종 동물이 그려져 있는 게 좋더라고요

뒤표지에는 책을 요약한 부분이 써져있습니다.

 

이 책은 자바에서 코틀린으로 넘어가는 개발자를 위한 책입니다.

 

 

하지만 단순히 코틀린의 문법을 가르쳐 주는 책은 아니고

자바에서 코틀린으로 넘어갈 때 어떻게 코틀린 식으로 생각을 해야 되는지

코틀린으로 짰을 때의 장점이 무엇인지

코틀린 다운 코드가 무엇인지를 보여줍니다.

 

그리고 단계 단계별로 차근히 코드가 변환되는 과정을 보여줍니다.

챕터는 총 23장까지 있고 537쪽까지 있습니다.

 

 

책의 초반 부분에서는 어떻게 프로젝트를 세팅해야 되는지까지

 

친절하게 설명해 주고 있습니다.

 

 

책의 크게 자바 코드를 보여주고 코드를 설명해 준 다음에

 

이 코드를 어떻게 코틀린으로 변환하는지를 보여주고 있습니다.

 

 

먼저 옵셔널로 된 자바 코드를 보여주고

그다음에 위와 같이 코틀린으로 어떻게 변환되는지를 보여주고 있습니다.

책 자체의 구성은 깔끔하고

 

가독성도 무난한 것 같습니다.

 

 

책 중간중간에 중요한 내용이 있으면

 

위와 같이 강조해서 알려줍니다.

 

 

책에는 굉장히 많은 부분이 있습니다.

위는 예외를 반환 코드를 코틀린으로 한 번 더 수정하는 부분입니다.

 

이렇게 더 점진적으로 어떻게 수정해야 되는 지도 알려주고 있습니다.

 

테스트 코드 또한 코틀린으로 어떻게 짜야 되는지까지 알려주고 있습니다.

 

 

이 책은 자바를 어느 정도 사용해 본 개발자가 코틀린으로 넘어갈 때 보면 좋은 책이라고 생각합니다.

다만 코틀린 문법을 배우기 위해서 이 책을 본 다기보다는

어떻게 하면 더 코틀린스럽게 짤 수 있을까?를 더 배울 수 있는 책이라고 생각합니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

리팩터링의 뜻을 알고 계신가요? 코딩에서 리펙터링은 기능은 유지하면서 다른 영역에서 개선을 시도하는 것을 말하는데요. 자바에서 코틀린으로 리팩터링이라는 책은 자바로 개발된 프로그램을 어떻게 하면 코틀린으로 전환할 수 있는지 효율적인 방법에 대해 소개하고 있어요.

 

Part 1:

 

리팩터링의 뜻

 

리팩터링은 동작을 변경하지 않고 기존 코드의 디자인과 구조를 개선하는 프로세스예요. 원래 기능을 유지하면서 더 효율적이고 유지 관리 가능하며 이해하기 쉽게 코드베이스를 수정하는 작업이 되는데요. 자바에서 코틀린도 이런 기본적인 리팩터링의 개념을 가지고 자바 코드를 코틀린 코드로 변화시키는 과정을 설명하고 있어요.

Part 2:

 

예제 코드를 통한 코틀린 공부하기

 

자바에서 코틀린으로는 코틀린 코딩이나 문법을 설명하는 목적이 아니에요. 오히려 최적화된 코딩 스킬과 조언이 담겨있는 프로그래머를 위한 자기계발서라는 느낌이 들었어요. 코드 형식과 예제 코드를 통해 잘된 코드의 예시, 코드를 수정하는 목적 등에 대한 부분을 익힐 수 있어요.

 

리팩터링의 목표는 중복되거나 비효율적인 코드를 제거하여 코드 품질을 개선하는 것이니까요. 코드베이스를 변경 및 업데이트 하는데 있어 관련된 시간과 비용을 줄이고 전반적인 안정성과 성능을 개선하는 데 도움이 되는 팁들을 살펴볼 수 있어요.

Part 3:

 

테마별로 정리된 코틀린 코드 마이그레이션

 

 

자바에서 코틀린으로는 개발자들이 리팩터링 과정에서 참고할 수 있도록 테마별로 잘 정리되어 있어요. 자바에서 자주 쓰는 기능을 코틀린의 코드로 전환하고, 자바를 단순히 대체하는게 아니라 코틀린 기반의 코틀린다운 코드로 리팩터링이 이루어질 수 있게 단계별로 방법을 제시하고 있어요.

 

자바에서 코틀린으로는 기본적으로 자바에 대한 완벽한 이해와 활용을 전제하기 때문에 중급자 이상의 개발자에게 추천드리는 책이에요. 자바와 코틀린의 코드 구조와 기능을 동시에 다루기 때문에 입문자 혹은 초보자분들은 읽기 조금 힘드실 것 같아요.

 

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

#컴퓨터 프로그램을 개발하다 보면, 별별 일이 많이 생기는데, 기존에 개발된 프로그램을 다른 언어로 바꿔 만들어야 하는 경우도 생긴다. 내 기억에 전 세계적으로 이런 일이 생겼던 때가 밀레니엄 버그로 유명했던 2000년 전후였을 것이다. 그때는 은행이며 회사며 이 문제로 난리 난리였다. 새로운 언어로 바꾸는 것도 일이 었지만, 기존에 개발 되었던 프로그램을 분석할 인력이 모자라 은퇴한 코볼 개발자를 다시 모시고 오는 일도 많이 벌어졌었다.


#프로그램 언어 바꾸는 게 뭐 어렵냐 생각하는 사람도 있을 것이다. #프로그램언어 문법들이 거기서 거기고, 대부분 비슷한 기능을 지원하니까 마치 번역기 돌리듯이 하면 되는 거 아닌가 하는 생각도 할 수 있다. 오래 전에 실제로 베이직을 C언어로 바꿔주는 그런 프로그램도 있었다. 그러다 보니, 현장에서 업무 담당자나 경험이 적은 개발자는 프로그램 언어 바꾸는 걸 별 거 아닌 거로 말을 하곤 한다.


그러나 이건 대단히 잘못된 생각이다. 다른 #프로그래밍 언어로 옮기는 #마이그레이션 작업은 두 언어의 문법만 안다고 되는 단순한 일이 아니다. 그랬다면, 밀레니엄 버그 당시에 은퇴 개발자까지 불러 오는 일은 없었을 것이다. 문법적인 것은 기본이고, 전체를 보는 프로그램 설계 능력, 각종 처리에 대한 자잘한 노하우까지 겸비하고 있어야 한다. 게다가 요즘 프로그램 언어들은 기능도 대폭 늘어나서 무척 복잡해졌다. 마이그레이션을 만만하게 봤다가는 큰 코 다치기 십상이다.

 

 

 

그러기에 이번에 본, 자바를 코틀린으로 바꾸는 각종 노하우를 담고 있는 '자바에서 코틀린으로'는 #리팩터링, 마이그레이션 측면에서 너무나도 가치 있는 책이라 생각한다. 이 책을 통해 내 자바와 코틀린 실력이 얼마나 형편없었는지 깨달을 수 있었다. 변명이지만 요즘은 C# 위주로 개발하다 보니, 자바에서 놓치고 있는 것도 많았고, 코틀린도 나름 알고 있다고 생각했는데, 아는 게 아는 게 아니었다. 그냥 유치원 수준이었다. ( 리팩터링(리팩토링)은 겉으로 드러난 동작은 바꾸지 않고, 유지 보수를 위해 내부적으로 코드를 알아보기 쉽게 만들고 단순화, 모듈화 또는 효율을 높이는 등의 작업을 하는 것을 말한다.)


'자바에서 코틀린으로'의 저자 덩컨 맥그레거와 냇 프라이스는 소프트웨어 개발 경력이 둘이 합쳐 50년이 넘는다. 자바로 잔뼈가 굵었고, 코틀린에도 많은 식견을 가진 분들이다. 두 언어에 많은 경험이 필요한 마이그레이션, 리팩토링 모두에 최적인 것이다.


일단 #자바에서코틀린으로 는 저자가 서문에서도 밝혔듯이 코틀린 언어를 가르쳐 주는 책이 아니다. 물론 자바를 가르쳐 주지도 않는다. 자바에서 코틀린으로 마이그레이션 하는 방법을 알려주고, 리팩터링을 통해 코틀린의 제대로 된 활용을 알려 주는 책이다. 그러기 때문에 자바나 코틀링 양쪽으로 얻을 수 있는 것이 참 많고, 자바와 코틀린 실력을 한 두 단계 업그레이드 할 수 있는 최적의 책인 것이다.


다만 그만큼 수준이 높다. 최소 자바와 코틀린 문법은 알고 있어야 하고, 인텔리J 경험도 살짝 필요하다. 수준이 있다 보니, 어렵게 느낄 수 있으나, 난이도가 높은 책은 아니다. 읽어 보면 알겠지만, 설명이 매우 자세하게 되어 있다. 자바에서 코틀린으로 코드를 바꿔가는 과정을 하나하나 일일이 비교 설명하고 있고, 사용되는 코딩 언어 문법에 맞춰 단계별로 코틀린으로 바꿔 나간다. 이런 점진적인 방법은 갑작스런 혼란을 막아주고, 좀 더 쉽게 이해할 수 있게 도와준다.

 

 

 

더욱이 리팩토링은 딱 한 가지 방법이 아니라, 더 단순화 된 방법을 찾아 보거나, 명시성이 좋은 방법, 효율성이 좋은 방법을 따로 더 알아본다. 일반적인 소프트웨어 개발 과정과도 같은 방법인데, 이렇게 하니, 코틀린에서 내가 미처 몰랐던 부분도 더욱 깊이 있게 알 수 있고, 활용의 폭도 넓힐 수 있었다. 이런 과정 속에 원래의 자바 코드보다 눈에 띄게 줄어든 코틀린 코드를 보고 있으면, 개발자만이 느낄 수 있는 '이거지!' 하는 묘한 만족감도 느껴진다.

 

 

 

'자바에서 코틀린으로'에는 저자들의 다양한 마이그레이션 경험 이야기, 노하우 같은 것이 들어 곳곳에 있는데, 특히 주의할 부분이나 중요한 부분, 부연 설명은 TIP, WARNING 또는 사각 박스 코너에 넣어 강조하고 있다. 프로그램 문법서에서는 절대 경험할 수 없는 실전 코틀린 코딩을 제대로 배울 수 있다.

 

 

 

이 책을 먼저 읽어 본 입장에서 일단은 가급적 챕터 1부터 순서대로 보는 것을 권한다. 특히 챕터 1에는 책 전반의 개념과 내용 흐름에 대해 언급하고 있으므로 무조건 읽어 보는 것이 좋다. 이후 챕터에서는 클래스, 빈, 컬렉션, 널, 함수, 프로퍼티, 타입, 예외 등 프로그램 코딩 전반에 대한 내용을 거진 다루고 있다. 각 챕터에서는 연관된 다른 챕터에 대해서도 알려주고 있어, 나중에 다시 볼 때, 점핑하며 참고하기 편하다.

 

 

 

여기서 하필 자바와 코틀린인가 이해가 안 되는 분도 있을 것이다. 간단히 말하면, 코틀린이 자바와 100% 호환이 되기 때문이다. 두 언어가 마이그레이션에 찰떡궁합인 것이다. 그러나 엄연히 두 언어는 다른 프로그래밍 언어다. 그러기에 '자바에서 코틀린으로'에서는 자바의 결, 코틀린의 결이 다름을 거듭 강조하고 있다. 비슷해 보인다고, 번역기 돌리듯 코틀린을 자바처럼 코딩해서는 안 된다는 것이다.


즉 자바는 자바 다워야 하고, 코틀린은 코틀린 다워야 한다는 것이다. 코틀린의 경우 자바 보다 함수적인 사고가 필요한 언어인데 이런 차이를 제대로 알고 적용하는 것은 쉽지 않다. 이런 차이를 바닥부터 익히기 위해 '자바에서 코틀린으로'에서는 단계별로 마이그레이션 과정을 보여주며 코틀린 근육을 키우고 있는 것이다.


내가 코틀린을 처음 접했을 때, 구글이 안드로이드에 쓸 자바 땜방으로 괴상한 놈을 쓰는 구나 했었다. 이런 선입견을 가졌으니, 당연히 코틀린을 자바의 틀 안에 끼워서 이해를 해왔었다. '자바에서 코틀린으로'를 보기 전에는 내 잘못이 뭔지도 몰랐는데, 지금은 창피할 정도로 절실히 느끼고 있다. 이 책을 통해 코틀린의 결이 얼마나 다른 지 알 수 있었다.


수준 높은 코틀린 코드를 맛 볼 수 있고, 활용 측면에서도 많은 도움이 되는 책인 만큼, 코틀린, 코드 리뷰, 리팩토링, 마이그레이션 등에 관심 있는 다양한 소프트웨어 개발자에게 좋은 멘토가 되어 줄 것이다.

코틀린을 알려주는 책은 아니지만

자바로 만들어진 코드들을

자바 문법과 코틀린 문법을 비교하며

코틀린으로 변경하는 방법을 알려준다.

 

자바를 개발하던 개발자들은

코틀린 다운(?!) 코드는 어떤 것인가를 알지 못하면

코틀린 문법으로 작성한 자바 코드를 만날테니...

 

 

자바에서코틀린으로.jpg

 

코틀린으로의 전환을 자바의 요소요소들에서

코틀린의 장점을 살리면서도

더 안전하고, 유지 보수하기 쉽고 더 간결하게

더불어 동일한 코드를 git을 통해 여러 branch에서

여러 버전으로 만들어 보여주며

리팩토링의 측면까지 짚어주고

 

자바와 코틀린을 혼용하면서 점진적으로 전환할 수 있도록

자바에서 자주 쓰이는 기능들을

어떤 코틀린 기능으로 전환할 수 있는지

차근 차근 설명해준다.

 

쉽게 뚝딱하고 전환되는 것도 아니고

코틀린 언어로 최선의 결과를 얻으려면

시스템을 다른 방식으로 설계할 필요도 있다지만

저자들이 고민하며 얻은 노하우들을 통해

전환과정에서 겪을 수 있는 시행착오를

최대한 줄이는데 많은 도움이 될 것 같다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

2023년 첫 책은 kotlin 책이네요.

업무에 직접 kotlin을 사용하지 않아서 거의 kotlin에 대해서는 초급자와 같습니다.

기존에 책한권을 보기는 했는데, 아무래도 실전에서 사용하지 않으니 전부 낯설구요.

이 책은 kotlin의 기본 문법을 다루지 않습니다.

가상의 회사의 애플리케이션(트래블레이터)을 java에서 kotlin으로 리펙토링하는 예로 책이 구성되어 있습니다.

또한, 리팩터링을 하는 것이기 때문에 java와 kotlin이 공존하는 것으로 상정하고 있어서 양쪽을 지원해야하는 복잡함이 있습니다.

실제로 있는 소스에서 변환한다면 많이 겪을 수 있는 상황인 것 같습니다.

java예제 자체도 1.8을 사용하는 저한테는 낯선 문법이 눈에 보이네요.

저자들은 언어마다 '결'이 다르다고 표현합니다.

OPP, FP의 차이는 철학이 다르다고 할텐데요. 여기서 사용된 java소스도 어느정도 FP의 영향을 받은 것이고,

변경된 Kotlin소스도 OOP의 특성을 가지고 있어서 '결'이라고 표현한 것 같습니다.

'결'은 해당 언어가 추구하는 방향/특성 정도로 표현될 수 있을 것 같습니다.

java스러웠던 소스를 kotlin스러운 소스로 변경하는 거죠.

기본적으로 java보다 kotlin이 좀 더 짧게 표현이 가능합니다.

물론, 짧은게 전적으로 좋다고 할 수는 없지만 그래도 큰 장점이죠.

저자의 의도는 아닐 것 같지만, 읽으면서 큰 장점이 있었습니다.

kotlin보다 java에 익숙한 사람에게는 kotlin을 java로 설명해준 것처럼 볼 수 있었습니다.

java에서 kotlin으로 넘어가려는 개발자에게 도움이 많이 될 것 같습니다.

 

 

소프트웨어 품질을 관리해 주는 업체 티오베에서 공개한 22년 공개한 프로그래밍 언어 순위에서 자바가 3위를 차지했습니다. 작년까지만 해도 1위를 차지하던 자바가 파이썬, C에게 자리를 내 주게 된 것입니다. 이는 IOT와 머신러닝, 데이터분석이 최근 화두에 떠오른 것도 있지만, 33위에서 26위로 치고 올라온 코틀린이라는 것도 한 몫한다고 생각합니다. 코틀린은 자바와 유사하지만 클래스 선언 없이 함수를 변수처럼 활용 가능하여 더 간결한 문법으로 표현 가능하며, 자바와 100% 호환이 되기 때문에 구글이 안드로이드의 공식 언어로 지정하고 웬만한 작업에서도 코틀린을 지향할 정도로 활용 가능성이 크다고 알려져 있습니다. 그렇기에 오늘날, 코틀린의 중요성이 매우 높고, 자바의 내용을 코틀린으로 개발할 수 있다는 것 자체는 매우 큰 장점입니다. 그런 지식을 습득하기에 딱 알맞은 이 책을 소개합니다. 책은 목차부터 깔끔하게 ‘자바의 방식’에서 ‘코틀린의 방식’으로 넘어가는 과정을 소제목으로 이름 지었습니다. 거의 첫 장이라고 생각되는 ‘빈에서 값으로’부터, ‘클래스에서 함수까지‘라는‘ 명칭을 통해 독자들이 필요한 부분을 쉽게 참고할 수 있도록 도와줍니다. 각 소제목 안에서는 인텔리 J를 이용하여 자바 코드를 통해 예시를 들어주고, 지속적인 물음을 통해 실제 사례에서 어떤 방식으로 이 코드를 분해해서 코틀린으로 고쳐야 하는지 독자에게 설명하고 있습니다. 또한 중간중간 팁이나 워닝이라는 네모 칸으로 배우는 내용과 연관되는 설명을 하며, 이해력을 높일 수 있도록 도와줍니다. 한 가지 참고할 점이라면, 여기서는 자바와 코틀린을 공부했다는 것을 전제로 하기 때문에 어떻게 하면 자바를 조금 더 코틀린으로 간결하게 리팩터링 할 수 있는지를 설명하고, 그 개념에 대해서는 설명을 간단하게 짚고 넘어가기 때문에, 두 언어를 어느 정도 공부한 사람들에게 구매를 권하는 바입니다. 이 책은 자바를 사용하는데 한계를 느껴 보기보다는, 자바와 코틀린을 서로 리팩토링이 가능하게 동시에 활용하여 사용할 수 있는 법을 배우고, 각자의 상황과 경향에 맞게 매번 더 나은 방법으로 활용할 수 있도록 도와주는 책이라고 생각하기에 추천드립니다. << 이 글은 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다. >>

자바에서 코틀린으로

[책 리뷰] 자바에서 코틀린으로

‘요새 자바 대신 코틀린을 많이 쓰는데…’

실제적으로 코틀린은 구글에서 정식 언어로 채택하였고, 최근 스타트업에서는 코프링(코틀린 + 스프링)을 많이 채택하고 있는 추세이다. 특히나 기존 스프링을 코프링으로 전환하는 움직임도 종종 보인다. 특히나 코틀린을 한번 접한다면 다시는 돌아가기 싫다는 개발자들도 많다.

코틀린에 관심이 생겨서 코틀린 책을 읽으려 하지만 다시 변수의 생성부터 클래스를 만드는법 등을 마주할 생각을 하니 피곤해져 나중에 봐야지 하고 미루는 개발자들이 있을것이다. 또는 당장 자바 프로젝트를 코틀린으로 전환시켜야하는 개발자들도 있을 것이다.

이런 개발자들에게 이 책은 간단하게 코틀린을 설명해준다.



이 책은 독자들이 자바를 알고있다는 기준에서 설명을 진행한다.

기존 자바의 환경과 코틀린의 환경을 비교해서 설명해주고, 자바로 되어있는 코드들을 코틀린으로 어떻게 변경할 수 있는지 알려준다. 책 부제목과 같이 코틀린으로 리팩터링한다는 관점을 중점으로 두고 설명해주고 있다. 그래서 리팩터링을 하면서 테스트코드도 같이 작성을 하도록 진행하고 있다.

코틀린에서 눈여겨 볼 것이 있는데 기본적으로 final을 사용한다는 것, nullable하게 처리할 수 있다는 점, getter등이 아닌 property를 통해 제공하는 점 등등… 사실 JVM 기반이고 자바에서 사용할 수 있는 기능들을 그대로 사용할 수 있다는 장점에서 자바와 비교를 많이 하지만 사실 언어 문법 자체는 C#과 비슷한 느낌이 들기는 하다.

이런 코틀린의 특징과 함께 자바코드 예시를 코틀린으로 리팩터링 하는 식으로 각 챕터마다 진행이 된다. 그런데 단순히 기능을 1:1로 변경하며 ‘이렇게 진행이 되었습니다. 짠!’ 이 아니라 코틀린으로 변경하면서 이부분을 어떻게 개선시킬 수 있는지, 여러 관점을 제시하고 그 관점에서 하나를 선택하는식으로 진행된다.

이러한 과정에서 단순히 코틀린으로 변경한다기 보다는 코틀린의 특징을 통해 자바로 되어있는 코드를 개선해나가고, 그러한 부분으로 구조도 개선해 나가며 얻는 인사이트들이 있다.

대신 리팩터링을 하려는 관점에서 풀어나가고 있는 책이기 때문에 리팩터링도 같이 다루고 있어 코틀린의 개념 자체를 공부해보고 싶다면 다른 개념서를 추가 구매하면 좋을 것이다.



별점 : ⭐️⭐️⭐️⭐️

한줄평 : 자바 코드를 코틀린으로 효율성 있게 리팩터링하며 인사이트를 주는 책

이런분께 추천 :

  1. 당장 자바로 된 프로젝트를 코틀린으로 변경해야 하는 분.
  2. 코틀린을 공부하고 싶은데 개념서를 사서 다시 읽기엔 힘이 드는 분.
  3. 코틀린에 관심이 있고, 리팩터링도 관심이 있는 분.


한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

이 책을 읽기 전에는 자바랑 코틀린 거의 비슷하지 않나??

자바에서 코틀린으로 리팩터링 하는데 많은 공부가 필요한가?? 생각했다.

 

하지만 이 책을 읽고 나서 자바와 다른 코틀린 다운 코드가 무엇인지 알게 되었다.

자바의 형식이 아니라 코틀린 결을 따르는 코틀린만의 코딩 스타일에 대해 설명되어 있다.

 

책에서는 한 챕터마다 하나의 예시를 두고 자바에서 코틀린으로 리팩터링 하면서 코틀린 스타일의 코드가 무엇인지 설명한다.

자바 코드를 직접 리팩토링하는 것을 보면서 보다 쉽게 "코틀린 결"이 무엇인지 파악하기 좋았다.

 

하지만 이 책은 코틀린 스타일의 코딩 방식을 설명하지, 자바와 코틀린의 기본 개념에 대해 설명하지는 않는다.

자바와 코틀린이 처음이신 분이라면 이 책은 어렵다고 느끼실 수 있다.

 

자바, 코틀린 프로젝트를 여럿 진행해 보시고 코틀린의 코딩 스타일을 확고히 찾고 싶으신 분들께 추천하는 책이다.


"<한빛미디어 나는 리뷰어다>" 활동을 위해서 전자책을 제공받아 작성된 서평입니다.

제목 : 자바에서 코틀린으로


- 대상독자

'이 책은 일차적으로 코틀린으로 전환하려는 자바 개발자를 위한 책' - 옮긴이의 말에 적혀있음

 

- 책의 내용 및 구성

1. 위 '대상독자'에서 언급한 '옮긴이의 말' 파트에서 옮긴이는 대상독자를 언급하면서 다음과 같이 이어 말하고 있음. '자바 문법과 코틀린 문법을 비교하면서 코틀린을 알려주는 책이 아니라는 점에서 독특하고, 그 점에서 배울 점이 아주 많은 책'.

2. '코틀린으로 리팩터링 하기' 라는 책 부제목처럼 자바에서 사용되던 기능을 어떤 코틀린 기능으로 이식할 수 있는지 설명하며, 단순히 자바 코드의 코틀린 버전이 아닌 코틀린 결을 따르는 코드가 되는 과정을 보여줌으로써 기존 자바 프로젝트를 코틀린으로 변환하거나 변환하는 과정에서 자바와 코틀린을 혼용하면서 계속 프로젝트를 유지보수해야 하는 독자에게 도움을 줄 수 있다고 함.

3. 저자가 '이 책의 대하여' 파트에서 '이 책은 코틀린 언어를 가르쳐주지 않는다.'라고 언급한 것처럼 코틀린 초심자를 위한 입문용 책이 아니며, 자바 개발자들의 코틀린 리팩터링을 위한 책에 가까움.

4. 약 540p, 23챕터로 구성되어 있으며 대부분의 챕터는 독립성을 띄기 때문에 원하는 챕터만 골라서 봐도 무방할 듯 함.


- 책에서 눈에 띄는 점

1. '리팩터링' 이라는 말에 걸맞게 'A에서 B으로' 라는 제목(주제)이 몇 번 등장하며, 코드를 보여주고 설치방법을 보여주며 '따라해보세요' 하는 것이 아닌 A를 다루던 개발자가 어떻게 헤쳐나가야 하는지 질문을 던지고 함께 문제를 확인하며 진하는 방식으로 내용이 많아 어렵게 다가오지만 최대한 쉽게 설명하려고 애쓰는 느낌을 받음.

2. 'warning', 'tip' 이라는 글 내용에 필요한 부연설명과는 별개로 네모난 테두리로 내용과 연관이 있는 주제들을 설명하는 영역이 존재, 이 영역은 앞 뒤의 내용과 완전히 깊은 연관성을 지니는 것은 아니지만 여러가지 지식 전달을 목적으로 만들어져 개발 시 알고있으면 좋은 내용들이 수록되어 있으므로 그냥 지나치지 말고 읽어보는 것을 추천(tip이나 warning도 틀을 비슷하게 갔으면 어땠을까 하는 아쉬움이 있음).

 

- 총평

 나는 O'REILLY 서적을 별로 좋아하지 않는다... 어려운 내용들을 많이 다루기 때문에 아무리 귀여운 동물, 식물들을 표지에 담아놔도 책을 펼쳐서 읽다보면 '검은것을 글씨요, 흰것은 배경이로다' 같은 느낌을 많은 순간 받았기 때문이다.

  이 책도 비슷하다. 한빛미디어 소개 페이지 난이도 '중급' 인 것만 봐도 알 수 있다. 애초에 '자바'에서 '코틀린'으로 리팩터링 하는 것을 전재로 책이 쓰여졌기 때문에 딱히 리팩터링에 관심이 없던 사람들은 더더욱 어렵거나 읽기 힘들다고 느껴졌을 것이다.

 이 책을 보면서, 아니 이런류의 책을 보면서 느끼는 것이지만 코드를 써놓고 그 코드에 대해 구구절절 설명할 때면 난감함은 두배가 된다. 대부분의 심화 서적들이 그렇듯이 하나의 코드를 보여주면 그것과 연관된 코드가 또 나오고, 또 나오고 반복에 반복을 거치기 때문이다. 내가 지금 어느 위치를 바라보는지, 어떤 곳에 집중을 해야하는지 피로도가 올라간다.

 이 책은 그런점은 조금 덜했다. 코드가 동작하는게 우선이 아니라 코틀린의 어떤 기능이 자바의 기능을 대체하고 더욱 효과적인지 찝어서 설명해줘야 하기 때문이다.

 이런 장단점들이 섞이고 난이도가 어느정도 있기 때문에 평점도 호불호가 많이 갈렸던 것 같다. 확실히 '코틀린'을 모르는 사람은 접근하기가 어렵다. 애초에 '코틀린의 a는 이렇고 b는 이렇습니다.' 하고 설명하는 책이 아니기도 하고 리팩터링을 거치려고 하는 개발자라면 리팩터링 대상 언어에 대해 어느정도는 알고 있을 거라는 전재하에 내용이 진행되기 때문이다.

 책의 맨 앞부분부터 쭉 이어서 봐야하는 피로도는 적은편이 좋다고 생각한다. 특정 기능을 놓고 A와 B를 비교하거나 A보다 B가 낫다고 설명하는 이런 종류의 책이면 더더욱 말이다. 조금 욕심을 더해보자면 컬러를 줘서 A와 B의 대비를 극대화 하면 어떨까 싶기도 하다.

 재미있는 책은 아니었지만, 책의 주제가 말하고자 하는 바를 착실히 내용에 적어 내려가고 있고, 어렵지만 심오하게 어떤 기능을 비교하며 더 나은 선택지를 주는 것을 보면 멋진 책이라는 생각이 든다.


코틀린으로 리팩터링하기

덩컨 맥그레거, 냇 프라이스 지음

오현석 옮김

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

2023년 2월

2023 나는 리뷰어다 활동의 첫 번째 리뷰

 

새해 들어 첫 리뷰할 책은 "자바에서 코틀린으로" 이다.

주종목이 자바 스프링인 본인으로서는 미래를 대비해 꼭 필요한 책이라 할 수 있겠지.

그래서 리뷰를 신청하게 되었습니다?

 

2021년 2월에 처음으로 나는 리뷰어다 활동을 시작했는데, 벌써 햇수로 3년째이다.

과연 올해도 리뷰어가 될 수 있을까 싶었는데, 그래도 꾸준히 올린 덕분에 올해도 선정해 주신 것 같다.

(한빛미디어!! 항상 사랑합니다!!)

 

그렇다면 본인의 개발자 경력도 그렇다는 이야기인데... 과연 내가 3년 차 개발자인가 싶다.

 

아무튼. 리뷰를 시작해 보자.

 

"이 책은 코틀린을 써서 컴퓨터 프로그래밍을 짜는 방법을 가르쳐주지 않는다."

 

이 책을 공부하고자 하는 개발자님이시라면 책의 목적이 이렇다는 것을 알아야 한다.

 

이 책은 기존 자바 코드를 코틀린으로 변환하면서 코틀린 언어를 가르쳐주고, 기존 자바와 코딩 지식을 활용해 더 빠르게 코틀린을 채택하고 싶어 하는 자바팀을 위해 고안된 책이다.

 

동기가 충분하고 경험이 많은 자바 개발자는 대부분 코틀린 언어의 기능을 아주 빠르게 배울 수 있다고 저자는 생각하고 있다.

이 책은 코틀린의 장점을 살릴 수 있도록 사고방식과 설계방식을 조정하도록 돕고, 자바식 사고방식의 코드를 코틀린식 사고방식의 코드로 마이그레이션 하는 방법을 보여주는 책이다.

 

책이 어떻게 구성되어 있는지 보자.

전형적인 자바 프로젝트의 몇 가지 측면을 어떻게 개선할 수 있는지를 살펴보며,

'자바의 방식'에서 '코틀린의 방식'으로라는 패턴의 제목으로 정리한다.

 

코틀린을 사용하면 자바에서 사용하기 힘든 접근 방법을 쉽게 쓸 수 있게 하거나 자바에서는 흔히 사용되는 접근 방법을 사용하지 않게 권장함으로써, 여러분의 설계를 실수할 여지가 더 적고, 더 간결하며, 더 도구 사용에 유리한 방향으로 이끌어 준다.

 

결국엔 안전하면서도 두 언어가 섞인 코드 기반을 계속 유지해 나갈 방법을 사용해 점진적으로 자바를 코틀린으로 리팩터링 한다.

 

목차를 정리해 보자.

 

1 소개
2 자바 프로젝트에서 코틀린 프로젝트로
3 자바 클래스에서 코틀린 클래스로
4 옵셔널에서 널이 될 수 있는 타입으로
5 빈에서 값으로
6 자바에서 코틀린 컬렉션으로
7 동작에서 계산으로
8 정적 메서드에서 최상위 함수로
9 다중식 함수에서 단일식 함수로
10 함수에서 확장 함수로
11 메서드에서 프로퍼티로
12 함수에서 연산자로
13 스트림에서 이터러블이나 시퀀스로
14 누적시키는 객체에서 변환으로
15 캡슐화한 컬렉션에서 타입 별명으로
16 인터페이스에서 함수로
17 목에서 맵으로
18 열린 클래스에서 봉인된 클래스로
19 예외 던지기에서 값 반환으로
20 I/O 수행에서 데이터 전달로
21 예외에서 값으로
22 클래스에서 함수로
23 여행은 계속된다

 

자바의 방식에서 코틀린의 방식으로 라는 패턴의 제목으로 정리되어 있으며, 자바개발자라면 친숙한 용어들이 나열되어 있다.

 

자바에서 코틀린으로 넘어가는 개발자들은 코틀린을 대충 살펴보고는 쉬운 언어라고 생각하고, 코틀린 문법으로 작성한 자바 코드를 작성하기 쉽니다. 하지만 코틀린의 결에 맞게 코드를 작성하면 전통적인 자바 객체 지향 코드보다 더 안전하고, 유지 보수하기 쉽고, 더 간결하면서 보기 좋은 코드를 작성할 수 있다.

 

이 책을 통해, 자바식 사고방식과 다른 코틀린식 사고방식을 접하고 얻어갈 수 있다면 이 책을 읽는 개발자에게 큰 도움이 될 수 있는 책이다.

 

코틀린을 공부하고자 하는 자바 개발자분들이여. 이 책은 꼭 거쳐가도록 하자.

 

코틀린의 결을 얻어 갈 때까지.

 

Love Yourself.

최근 자바 개발에서 코틀린으로 넘어오시는 분들을 많이 볼 수 있습니다. 저 역시도 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 발생 비율이 줄었다 하더라도 '요즘 오류가 안나는 것 같네' 정도로 넘어갈 것입니다.

 

그렇기에 본 도서에서는 마틴 파울러의 말을 인용하면서 리팩토링 과정에서의 모든 기능들은 테스트 코드와 함께 작성을 하고 있습니다.

리팩터링을 하고 싶다면, 필수 전제조건은 탄탄한 테스트가 있어야 한다.
- 마틴 파울러

단순히 기능 로직을 자바에서 코틀린으로 리팩터링 하는 뿐만 아닌 테스트 코드도 자바에서 코틀린으로 작성하는 방법도 함께 설명하고 있습니다.

효율적인, 안전한, 더 나은 로직과 설계

각 챕터에서는 A코드를 B코드로 변경하였습니다로 끝나는 것이 아닌 변환하는 과정에서 효율적이고, 안전하고, 더 나은 로직과 설계를 위한 설명을 첨부하고 있습니다. 기초적인 내용부터 깊게 생각해 보았을 때의 내용 모두를 담고 있기에 외적으로도 배울 수 있는 여러 내용이 담겨있습니다.

 

한 예시로 챕터 7의 내용 중 '클라이언트 앱에서 고객의 현재 여행 정보를 받아오는 기능'을 자바에서 코틀린 코드로 리팩토링을 하는 부분이 있는데, 이때 동작과 계산에 대한 부분을 집중적으로 설명하고 있습니다.

 

계산이라는 행위와 동작이라는 행위는 결국 함수를 통해 구현되기에 결과가 같아 보일지언정, 동작이라는 행위가 들어간다면 리팩토링으로 인해서 각 동작이 호출되는 시점이나 호출 여부가 달라질 수 있기에 발생할 수 있는 문제점과 이를 해결하는 방법을 설명하고 계산과 동작에 대한 행위를 한번 더 생각해 보는, 그리고 어떻게 설계하는 것이 좋은지에 대한 내용이 담겨있습니다.

여러 가지 팁

챕터 중간중간에는 단순 Additional 한 내용 외에도 생각을 전환하고 발전에 도움을 주는 여러 팁들이 존재합니다. 다음은 챕터 9의 TIP 중 하나입니다.

단일식 함수를 계산에만 사용하라 우리가 단일식 함수를 계산(7.2절 ‘계산’을 보라)에만 사용하는 관습을 택한다면, 단일식 함수를 사용하는 의도를 다른 사람들에게 알릴 수 있는 수단이 생긴다. 단일식 함수를 보면 그 함수가 동작(7.3절 ‘동작’을 보라)이 아님을 알 수 있으므로 해당 함수를 더 안전하게 리팩터링 할 수 있다. 실질적으로 이 말은 단일식 함수가 Unit을 반환하거나 가변 상태를 읽거나 쓰지 말아야 한다는 뜻이다. 가변 상태를 읽거나 쓰는 것에는 I/O를 수행하는 행위도 포함된다.

- 단일식 함수를 계산에만 사용하라

저는 그동안 한 줄로 표현이 가능한 동작 역시 단일식 함수로 표현하는 경우가 있었습니다. 그러나 저자의 팀에서는 단필식 형태를 계산에만 제한하여 사용하였고 그에 대한 이유도 함께 풀이하고 있는데, 읽어보니 납득이 되며 앞으로의 개발에도 반영한다면 직관적이며 차후 자바에서 코틀린이 아니더라도 코틀린 로직을 리팩토링 할 때 에도 도움이 되겠다는 생각이 들었습니다.

 

이처럼 여러 팁을 통해 새로운 깨달음을 얻을 수 있었던 것 같습니다.

도서 평가

본 도서는 '자바 코드가 이렇게 코틀린 코드로 바뀌었습니다.' 하고 끝나는 것이 아닌, 기존 내장 함수들에 대한 원리와 리팩토링 과정에서 고려해야 하는 점, 개선할 수 있는 점 하나하나 단계별로 설명을 하고 있습니다.

 

그렇기에 현업 자바 개발자라면 코틀린을 경험하지 않았더라도 큰 어려움 없이 읽을 수 있겠지만 아직 개발 지식이 부족하거나 프로젝트 개발 경험이 적다면 각 함수가 가지고 있는 특징, 설계 방식 등에 대해 단순히 리팩토링 외적으로도 많은 생각을 하면서 읽어야 하는 어려움이 있을 것으로 보입니다.

 

다만 이 책을 모두 읽고 난다면, 고민하고 생각한 만큼 성장할 수 있을 것이라 생각되며, 이미 코틀린으로 개발하고 있는 개발자라 하더라도 조금 더 코틀린스러운 코드와 리팩토링을 고려할 수 있는 로직, 그리고 몰랐던 코틀린의 특징들도 배울 수 있을 것이라 생각됩니다.

마치면서

코틀린을 사용한 지 어느덧 3년이 지났기에 완벽하지는 않지만 코틀린에 대한 기본 이해도는 충분하였기에 단순히 마이그레이션 할 때에만 도움이 될 것이라 생각하였지만, 이 책을 읽으면서 자바에서 코틀린으로 넘어가는 과정에서의 기본 원리, 코틀린이 지향하는 방향, 더 나은 설계에 대해 많은 고민과 생각을 하면서 읽기 전과 후로 조금 더 성장할 수 있었던 것 같습니다.

 

자바 및 기타 언어를 사용하다 코틀린으로 마이그레이션을 고려하고 계시는 분이라면 본 도서를 적극 추천드립니다.

 

책의 제목에서도 알 수 있듯이 자바나 기본 개발 지식이 부족한 상태에서 본 도서를 읽는다면 고민과 생각을 깊게 해야 할 수 있기에 어려움을 느끼실 수 있지만, 만약 이겨내고 완독을 하신다면 오히려 더 높은 성장을 할 수 있을 것이라 생각됩니다.

이 책은 Kotlin 언어를 가르쳐 주기 보다는 자바에서 코틀린 문법으로 코드를 마이그레이션하는 방법과 사고의 전환에 대해 설명해준다. 이 모든 과정은 점진적으로 이뤄지며, InteliJ IDE에 내장된 자동 리팩터링 도구를 활용한다.

이런 내용을 담고 있기에 기존 "자바의 방식"에서 "코틀린의 방식"으로 변환시 도움을 준다. 하지만 단순히 코틀린 방식으로 무조건 변경을 하는게 좋다는 것이라고 말하는것이 아니라 두 언어가 갖고 있는 점을 분석하고 다름을 설명해준다.

 

Why Kotlin?

- 간결성, 안전성, 상호운용성, 도구친화성 (4가지 목표)

- 코틀린은 가변 상태를 변경하는 것보다 불변 데이터를 변환하는 쪽을 더 선호한다.

- 코틀린은 동작을 명시적으로 작성하는 쪽을 더 선호한다.

- 코를린은 동적 바인딩보다 정적 바인딩을 더 선호한다.

- 코틀린은 특별한 경우를 좋아하지 않는다.

- 코틀린은 마이그레이션을 쉽게 하기 위해 자신의 규칙을 깬다.

 

자바 to 코틀린

일반적으로 두 언어 사이의 리팩터링은 보통 하나의 언어 내부의 리팩터링보다 어렵다. 시간도 많이 소요되고 위험성이 있다. 자바에서 코틀린으로 리팩터링을 진행하면 전형적인 자바 코드를 전형적인 코틀린으로 변경이 된다. 이후 코틀린 구문으로 만든다.

이 책을 읽기 위해서는 자바, 코틀린 언어 및 문법에 대한 기본적인 이해가 필요하다.

대부분 자바에서 코틀린으로 변경시 발생하는 사례 중심으로 설명을 해주기 때문에 개발자라면 편하게 접근이 가능하다.

코틀린 도구 사용

자바와 마찬가지로 코틀린도 컴파일 언어다. 따라서 코틀린 코드를 실행하기 전에 먼저 코드를 컴파일해야만 한다.

코틀린 코드 컴파일

코틀린 소스코드를 저장할 때는 보통 .kt라는 확장자를 파일에 붙인다. 코틀린 컴파일러는 자바 컴파일러가 자바 소스코드를 컴파일할 때와 마찬가지로 코틀린 소스코드를 분석해서 .class 파일을 만들어낸다. 코틀린 코드를 컴파일한 다음 java 명령으로 그 코드를 실행하는것이다.

자바-코틀린 변환기

코틀린을 처음 배웠는데 정확한 코틀린 문법이 기억나지 않는 경우 이 변환기를 유용하게 사용할 수 있다. 작성하고픈 코드를 자바로 작성해 복사한 후 코틀린 파일에 그 코드를 붙여 넣으면 변환기가 자동으로 같은 뜻의 코틀린 코드를 제안한다. 또는 자바 파일 하나를 통째로 코틀린으로 변환하고 싶으면 메뉴에서 코드 → 자바 파일을 코틀린 파일로 변환을 선택하면 된다.

 

요약

코틀린은 타입 추론을 지원하는 정적 타입 지정 언어다. 따라서 소스코드의 정확성과 성능을 보장하면서도 소스코드를 간결하게 유지할 수 있다.

코틀린은 객체지향과 함수형 프로그래밍 스타일을 모두 지원한다. 코틀린에서는 일급 시민 함수를 사용해 수준 높은 추상화가 가능하고, 불변 값 지원을 통해 다중 스레드 애플리케이션 개발과 테스트를더 쉽게 할 수 있다.

코틀린을 서버 애플리케이션 개발에 잘 활용할 수 있다. 코틀린은 기존 자바 프레임워크를 완벽하게 지원하는 한편, HTML 생성기나 영속화등의 일반적인 작업을 위한 새로운 도구를 제공한다.

코틀린은 무료며 오픈소스다. 또한 주요 IDE와 빌드 시스템을 완전히 지원한다.

코틀린은 실용적이며 안전하고, 간결하며 상호운용성이 좋다. 이는 코틀린을 설계하면서 일반적인 작업에 대해 이미 잘 알려진 해법을 채택하고, NullPointerException과 같이 흔히 발생하는 오류를 방지하며, 읽기 쉽고 간결한 코드를 지원하면서 자바와 아무런 제약 없이 통합될 수 있는 언어를 만드는데 초점을 맞췄다는 뜻이다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

※ 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

이번 책은 코틀린 언어로 리팩토링하는 방법에 대해 공부해볼 수 있는 책이다.

자바 개발자들은 한번쯤 코틀린을 공부해볼까...?라는 생각을 해보지 않았을까 싶다.

몇년 전 나도 코틀린을 공부해보면 좋지 않을까, 코틀린은 자바와 다르게 어떤 장점이 있을까라는 생각으로 공부를 했었다.

그때 당시 공부했을 때 느꼈던 코틀린의 장점은 자바를 기반으로 하는 언어이기 때문에 빠른 습득이 가능하다는 점과 간결하고 명확한 언어라는 점에서 코드를 작성하는 시간이 오래 걸리지 않았던 기억이 있었는데, 좀 더 공부해두면 좋을 것 같다라는 생각을 했었다.

 

<자바에서 코틀린으로>라는 책 덕분에 시간이 지난 후 다시 공부해볼 수 있는 기회를 얻었다.

이 책은 책 표지에서 "코틀린으로 리팩터링하기"라는 주제를 명확하게 나타낸다.

특히 자바로 개발을 하고 있는 개발자분들이 좀 더 이해하고 접근하기 쉽지 않을까 싶다.

 

전반부는 코틀린 언어가 무엇이고, 자바와 어떤 점이 다른지를 시작으로 코틀린으로 리팩토링하는 원칙을 소개한다.

이후 자바 프로젝트에 코틀린 의존성을 추가하여 자바 프로젝트에서도 코틀린으로 코드로 작성할 수 있는 기능을 부여하여 빌드까지 가능하도록 한다.

이후에는 자바 클래스에 작성된 코드를 코틀린 언어로 리팩토링하는 과정을 본격적으로 단계별로 진행한다.

이 내용이 챕터 3부터 챕터 22까지 쓰여져 있는데 끝까지 내용을 공부하다보면 명확하게 리팩토링 원칙을 머릿속에 그려나갈 수 있게 된다.

특히 이 책은 실습을 할 수 있는 코드도 있기 때문에 개념 공부와 함께 실습도 병행해본다면 좀 더 기억에 남고 사용법도 익힐 수 있어 실습도 병행하는 것을 추천한다.

책의 내용을 챕터별로 따라가다보면 자바와 코틀린의 차이점도 알게 되고, 코틀린의 장점도 명확히 알게 된다.

이런 점을 토대로 언어의 장점을 살려서 자바와 코틀린으로 코드를 작성하는 능력도 키울 수 있게 된다.

 

코틀린 언어를 공부하여 코틀린의 장점을 공부해보고 싶은 개발자, 자바를 코틀린으로 리팩토링하고 싶거나 코틀린 프로젝트에서 능숙하게 코드를 작성하고 싶은 개발자 분들 모두에게 이 책을 추천한다.

 

KakaoTalk_20230225_104358236.jpg

 

 


[도서 소개]

자바에서 코틀린으로 코드 마이그레이션하기

인도네시아 자바섬에서 러시아 코틀린섬까지 1만3000킬로미터를 육로로 여행하려면 일주일이 걸린다. 숙련된 자바 개발자가 코틀린에 능숙해지기까지 걸리는 시간도 일주일 남짓일 것이다.

하지만 코틀린에서는 자바와 다른 방식이어야 한다. 코틀린의 결에 맞게 값 중심의 함수형 프로그래밍, 널 가능성, 람다, 확장 함수, 결과 타입 등을 활용해 코드를 작성하면서 코틀린의 강점을 살릴 수 있다. 이렇게 되면 전통적인 자바 객체 지향 코드보다 더 안전하고, 유지 보수하기 쉽고, 간결하면서 보기 좋은 코드를 작성할 수 있다.

저자들은 2015년에 이 여행을 시작한 후, 많은 팀과 개발자가 자신들의 발자취를 따르도록 도왔다. 옵셔널에서 널이 될 수 있는 타입으로, 빈에서 값으로, 열린 클래스에서 봉인된 클래스로 변경하는 등 여러 코스로 나누어진 여행을 함께 떠나보자. 여정마다 핵심 개념을 설명한 뒤, 프로덕션 자바 코드를 전형적인 코틀린 코드로 리팩터링하는 방법을 보여주는 방식으로 구성된다. 리팩터링하는 과정은 점진적으로 안전하게 이뤄지며, 리팩터링 전후 자바와 코틀린의 상호 운용성은 그대로 유지된다.

코틀린으로 리팩터링한 코드는 더 단순하고, 표현력이 좋으며, 변경하기가 쉽다. 이 여행이 끝날 즈음이면 자신 있게 자바 코드를 코틀린으로 리팩터링할 수 있고, 밑바닥부터 코틀린 코드를 작성할 수 있으며, 시간에 따라 진화하는 자바와 코틀린이 혼합된 코드 기반을 관리할 수 있게 될 것이다.


[추천사]

  • 벵카트 수브라마니암 (박사, 애자일 디벨로퍼(Agile Developer, Inc.) 설립자)
    예전 방식의 전형적인 자바 코드를 점진적으로 변환하여 깔끔하고 표현력이 좋으면서 유지 보수가 쉬운 코틀린 코드로 만들어내는 과정은 코틀린을 배우는 멋진 방법이다. 저자들의 경험에서 우러나는 조언이 이 책에 잘 응축되어 있다.

  • 돈 그리피스와 데이비드 그리피스 (『Head First Kotlin』 공저자)
    이 책은 자바에서 코틀린으로 기술을 업그레이드하는 가장 빠르고 쉬운 방법이다. 프로 자바 개발자라면 누구나 필수로 읽어야 할 책이다.


[대상 독자]

  •  기존 지식을 활용해 더 빠르게 코틀린을 채택하고 싶은 자바 개발자

  •  자바 코드를 코틀린 코드로 변환하고 싶은 분

  •  코틀린 프로젝트에서 본능적으로 코틀린과 함수보다 자바와 객체에 더 많이 의존하는 분



[서평]


이 책은 Kotlin의 기본 구문과 기능을 소개하고 이를 Java와 비교하는 것으로 시작합니다. 그런 다음 저자는 null 안전, 함수형 프로그래밍 및 코루틴과 같은 고급 주제를 다룹니다. 책 전반에 걸쳐 저자는 독자가 학습을 연습하고 강화하는 데 도움이 되는 많은 코드 예제와 연습을 제공합니다.


이 책에서 특히 마음에 드는 점은 이 책이 Kotlin을 가르칠 뿐만 아니라 Java 개발자가 특정 사용 사례에서 Kotlin이 더 나은 선택인 이유를 이해하는 데 도움이 된다는 점입니다. 예를 들어 저자는 Kotlin의 확장 기능 및 데이터 클래스 지원이 상용구 코드를 줄이고 코드를 더 쉽게 읽고 유지 관리할 수 있는 방법을 설명합니다.


전반적으로 기술을 확장하고 최신 JVM 기반 프로그래밍 언어를 배우려는 모든 Java 개발자에게 "From Java to Kotlin"을 적극 권장합니다. 이 책은 잘 쓰여지고 유익하며 Kotlin에 대한 훌륭한 소개를 제공합니다.

 

 "한빛미디어 리뷰 활동을 위해서 책을 제공받아 작성된 서평입니다."

자바는 알고...있는데 너는 누구냐? 코틀린??

JVM 기반의 언어로 JAVA와 100%의 호환성을 보이는 코틀린.

하지만 이 책의 저자들은 코틀린은 자바와 "결"이 다르다고 말한다.

 

​자바는 가변 객체와 리플렉션을 선호하며 합성성과 타입 안전성을 대가로 지블한다. 자바와 비교해서, 코틀린의 결은 불변 값을 변환하는 것과 독립적인 함수를 선호하며, 비침투적이고 도움이 많이 되는 타입 시스템을 제공한다. (자바에서 코틀린으로  p.530)

 

​객체지향언어 JAVA의 세상에서 지내던 나에게 함수형 언어는 접근하기 쉬운 부분은 아니었다.

클래스, 인스턴스, 다형성, 상속성 이렇게 다양한 개념을 내가 얼마나 머리를 쥐어 뜯어가면서 공부를 했는데...'

 

​자바와 완벽한 호환을 보이지만 결이 다르다는 코틀린.

이 책은 코틀린의 기초 설명, 문법등은 나오지 않는다.

그러므로 자바 8 이후 변경사항에 대해 알고 있고 코틀린에 대해 잘 알고 있다는 가정에서 시작한다.

 

​이 책은 기존 자바로 개발되어 있는 가상의 프로그램 '트래블레이터'의 코드를 코틀린으로 변환하고 동시에 리팩터링 하는 과정을 보여준다. 이 과정을 통해서 왜! 코틀린인지, 코틀린은 언제 어떻게 사용할 수 있는지 알 수 있다. 그리고 함수형 프로그래밍의 사상을 엿볼 수 있다.

 

​자바 개발자로 일하고 있지만 너무 많은 파일 들이 생성되고 수많은 클래스들이 있다.

스프링, 스프링 부트 프로젝트에는 의존성 주입 등 서로서로 너무 엉겨 붙어 있어서 실제 프로젝트에 들어가면 제대로 된 테스트 및 리팩터링은 정말 꿈도 꾸기 어려운 부분도 있다.

마틴 파울러의 리패터링 벽돌 책을 보며 한숨만 쉬고는 했다.

 

​이 책을 보고 코틀린으로 변환하는 과정을 보면서 

진짜 실무에서 바로 적용할 수 있는 방법들이 나와 있는 것이 좋았다.

 

그 예를 몇가지 소개해 보겠다.

 

​자바 프로그래머들을 늘 괴롭히는 NULL에 대해 코틀린은 널으 포용하여 없음을 뜻하는 값을 일관성 있게 다를 수 있다는 것은 정말 매력적이었다. 코틀린의 안전한 호출 연산자를 사용하여 널이 될 가능성이 있는 참조를 확장함수를 사용하여 더 편리하게 호출 할 수 있다. 

 

​자바 프로젝트에서 자바빈과 POJO를 사용하여 데이터를 표현하는 것은 너무도 당연한 것이었다. 하지만 이렇게 변수로 값을 표현하게 하면 가변적이 되고 이는 복잡성을 야기한다.  하지만 값은 불변이다. 코틀린은 불변객체를 선호한다.  가변적이라고 하는 것은 상태가 변한다는 것이고 이는 어떤 장소의 상태가 다른 장소에서 예상하는 상태와 일치하지 않을 수 있으므로 생기는 여러 문제의 근원이다. 이는 에일리어싱(aliasing error)를 발생시킬 수 있다.

 

이는 '7장 동작에서 계산으로' 에서도 연관되어 나오는데 함수를 계산과 동작으로 나누어 보는 것이다. 동작은 언제, 얼마나 많이 호출되는냐에 따라 결과가 달라지는 함수라면 계산은 호출된 시간과 관계없이 항상 같은 결과를 내놓는다. 자바에서 우리가 작성하는 대부분의 메서드는 동작이다. 실행시점에 의존하기 때문이다. 프로그램에 어떤 함수가 있을 때 이 함수를 호출한 모든 부분에서 함수 호출을 그 함수 호출의 결괏값으로 치환해도 프로그램이 똑간이 작동할 때 이런 함수를 참조 투명한 함수라고 한다. 나는 이 부분이 가장 인상깊었다. 호출되는 시점! 그 보이지도 찾기도 어려운 그 시점 때문에 내가 얼마나 많은 삽질을 했던가! 이런 부분을 계산함수로 리펙터링 한다. 객체의 상태를 변경하는 대신 일부분이 변경된 새 객체를 반환하도록 하고 동작을 계산으로 변환하는 방법, 가변성을 불변성으로 바꾸어 코드를 더 잘 이해할 수 있도록하고 테스트하기 좋게 만드는 과정을 배울 수 있었다.

 

​16장에서 소개되는 "인터페이스에서 함수로" 부분도 객체지향으로 프로그래밍하는 벙법과 함수로 접근하는 방법을 다각도로 비교 해본다. 코틀린 함수로 자바의 인터페이스를 대체하게되면 결합을 더 줄일 수 있다. 이어서 17장에서는 테스트를 위한 목(Mock)에 대해 나오는데 저자는 목 프레임워크가 인터페이스 구현뿐만 아니라, 예상되는 메서드 호출과 호출시 반환해야 하는 대용을 기술하게 해주는데, 이것이 메서드 호출과 예상 반환값을 이해하기 어렵게 만든다는 것이었다. 이 내용에 크게 공감이 되었다. 코틀린 코드 기반에서는 목을 사용하지 않는 것이 더 낫다고 한다.

 

​코틀린은 정적 타입 지정언어로 모든 프로그램 구성 요소의 타입을 컴파일 시점에 알 수 있고 프로그램 안에서 객체의 필드나 메소드를 사용할 때마나 컴파일러가 타입을 검증해 준다. 그래서 안전하다. 또한 함수형 프로그래밍의 특징인 불변성으로 일단 만들어지고 나면 내부 상태가 바뀌지 않는 불볍 객체를 사용한다. 그래서 Side Effect가 없다. 코틀린의 사용으로 프로그램의 복잡도를 줄이고 마이그레이션이 쉽다. 

 

​이 책은 손수 하나하나 찾아가며 고치는 리팩터링을 알려주기보다 인텔리J에서 제공하는 리팩터링 기능을 잘 사용하도록 해준다. 이러한 실용적인 방법을 알려주는 부분은 코틀린을 코틀린답게 설명하고 있다는 생각을 해보았다.

 

​나는 코틀린에 대해 잘 몰랐다. 

 

이 책의 코틀린 소스 한 줄 한줄 이해하기는 어려웠지만 코틀린이 어떤 언어인지, 어떠한 경우에 사용하는지 배울 수 있었다. 또한 함수형 프로그래밍 언어에대한 매력을 충분히 느낄 수 있었다.

 

자바 개발자라고는 하지만 이 책에서 자바코드를 코틀린으로 변환하는 과정에서 저자의 자바에 대해 깊은 지식 역시 함께 배웠다. (부부가 함께 이 책을 저술했다는데 중간중간 그들의 티키타카도 재미있었다.)

 

​이 책은 자바 프로그래머로서 자바를 어떻게 더 잘 쓸 수 있는지 알 수 있게 해주었다.

그리고 코틀린을 통한 함수형 프로그래밍의 사상과 장점을 엿볼 수 있었다.

오늘 바로 서점에서 코틀린 프로그래밍에 대한 책을 구입했다.

 

​자바에서의 생활이 조금은 회의감이 들기 시작했다면 코틀린으로 여행을 떠나보면 어떨까?

'트래블레이터' 앱으로 경로를 찾아보자!

그리고 저는 그 여행 강력하게 추천합니다!

 

​"이 책은 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성한 서평입니다 "

각 장마다 하나의 주제로 한 가지씩 차근차근 변환하는 것을 알려주는 책입니다. 

코틀린 기본 문법은 보고 나서 시작하는게 좋아요. 

#자바 #코틀린 #안드로이드 #메타

이 책은 덩컨 맥그레거, 냇 프라이스가 저자분이고 오현석이라는 역자분인 책이다. 코틀린은 인텔리J를 만드는 젯브레인스에서 처음 개발했다. 구글은 2017년부터 코틀린을 안드로이드 앱용 언어로 사용했으며, 구글과 젯브레인스는 2018년부터 코틀린재단의 코틀린 언어 개발을 지원하고 있다.

구글의 안드로이드 팀은 2019년부터 '코틀린 퍼스트' 접근법을 채택했다. 구글 지도, 홈, 플레이, 드라이브, 메시지 등 코틀린으로 구축된 구글 안드로이드 앱은 70개를 넘는다. 구글은 코틀린에 대해 자바보다 더 효율적이고 안전하며, 더 작은 코드베이스를 생성하면서도 자바와 100% 상호운용 가능하다고 설명한다. 자바 코드베이스와 코틀린 코드베이스를 공존하게 해 자바에서 코틀린으로 전환을 더 쉽게 할 수 있다고도 한다.

코틀린은 JVM기반의 언어이므로 인텔리J에서 많은 기능을 지원하고 있다. 이 책에서는 그러한 기능들에 대해서 여러가지 활용법을 알려주고 있다. 코틀린의 결에 맞게 자바 빈 대신 코틀린 값 중심의 프로그래밍, 자바 옵셔널 대신 널 가능성 타입, 람다, 컬렉션, 확장 함수, 결과 타입 등을 활용해 코드를 작성하면서 코틀린의 장점을 살리기 시작하면 전통적인 자바 객체 지향 코드보다 더 안전하고, 유지 보수하기 쉽고, 더 간결하면서 보기 좋은 코드를 작성할 수 있다. 오늘날 페이스북, 메신저, 인스타그램 등의 안드로이드 앱은 각각 100만줄 이상의 코틀린 코드를 갖고 있으며 전환율은 증가하고 있다. 그리고 전체적으로 안드로이드 코드베이스에 1천만줄 이상의 코틀린 코드가 있다.

이 책의 장점은 기존에 자바 코드와 코틀린 코드를 모두 활용해본 중급 개발자들에게 자바와 코틀린 언어의 차이점에 대해서 다양하게 알려주면서 자바 코드를 코틀린 코드로 변경하기 위해 필요한 인사이트를 준다는 점이다. 하지만 두 언어에 대해 모르는 초보 개발자들에게는 이해하기 어려운 용어들도 많이 존재한다. 또한 아직까지는 자바에 비해 코틀린은 자바보다 대중적이지 않기 때문에 더 적은 도구가 존재한다는 점이다. 또 코틀린과 자바의 상호운용성을 고려하는 도구는 복잡하다.자바와 코틀린 언어의 100% 상호운용성에도 모든 자바를 제거하고 코틀린으로 대체할 수 없으므로 새롭게 작성해야 하는 부분이 발생한다. 코틀린 코드가 자바 인터페이스로 구현된 코틀린 인터페이스를 호출하는 경우 코틀린의 null 검사 생략이 null을 허용하고, 나중에 null 포인터 예외를 생성할 수 있다. 코틀린과 자바 코드 간의 상호운용성 활성화하면 코틀린에 플랫폼 타입을 사용하게 한다. 플랫폼 타입은 코틀린 코드에서 제공하는 정적 안정성 대신 런타임 Null 포인터 역참조를 발생시켜 충돌을 일으킨다. 따라서 자바의 결로 되어 있는 코드를 코틀린 결로 새롭게 짜야 하는 상황이 발생하지만 그 동안 이에 대한 도서는 없었다. 이 책의 예제 코드는 https://java-to-kotlin.dev/code.html 주소와 https://github.com/java-to-kotlin/code 주소에서 확인할 수 있다.

개인적인 의견이지만 최근 소프트웨어는 수많은 레거시 표현들을 대체할 수 있는 방향으로 발전되고 있고 점점 더 일반화되어 가고 있다. 이런 상황에서 남이 만든 코드만 가져다 쓰기만 반복적으로 하다보면 조건반사에 의해 코드작성법을 잊어버릴 수 있다. 따라서 이러한 주제의 책은 소중하며 더 많이 읽혀져야 하므로 많은 분들에게 이 책을 추천하고 싶다.

※ 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

자바 개발만하다가 코틀린으로 개발할때 너무 햇갈리는 부분이 많았고

기존 자바코드를 어떻게 코틀린으로 바꿔야되는지 고민이 많았습니다

그냥 코틀린코드로 변환해서 대충 짰었는데요 지금 생각해보면 전혀 코틀린스럽지 않은 자바 코드에서 코틀린으로 변환만 한 코드들이 가득 했던 것 같습니다

이 책을 보고 어떻게 자바 코드를 코틀린 스럽게 변환하는지 잘 보고 배우면 도움이 많이 될 겁니다 ~

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
자바에서 코틀린으로
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
자바에서 코틀린으로
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
자바에서 코틀린으로
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실

최근 본 책0