웅글웅글
article thumbnail

프로그래머스의 3차 프로젝트의 요구사항은 자바 프로젝트를 코틀린으로 마이그레이션 하는 것이었다. 실제 코틀린 사용량도 늘어나는 추세이고 새로운 프로젝트를 진행할 때 주로 코틀린을 사용한다고 한다. 그래서 필자도 이번 기회에 코틀린을 공부하기로 하였다. 마이그레이션을 진행하기 전 코틀린을 왜 사용하는지 Kotlin의 장점에 대해 알아보겠다.

 

코틀린이 좋은 이유

Null-Safety

가장 큰 이유는 아마 Null-Safety가 아닐까 생각한다. 개발자들이 개발하면서 가장 많이 겪는 예외 중 하나인 NullPointerException을 미리 방지할 수 있다. 아래처럼 변수 타입 뒤에 '?' 를 붙이게 되면 null을 허용할 수 있고 그렇지 않으면 null을 허용하지 않아 만약 null을 넣게 되면 컴파일 에러가 발생한다.

val nullableName: String? = null // null 허용
val nonNullableName: String = null // null 허용하지 않음, Compile Error 발생

Getter, Setter 자동 생성

자바에서는 Getter와 Setter를 직접 만들어 주거나 Lombok 어노테이션을 사용해 만들어야 했지만, 코틀린에서는 자동으로 생성해 준다.

Field를 만들면 Compile 단에서 자동으로 생성해 준다.

String template

마지막으로 String Template이다. String Template은 우리가 자바에서 문자열에 변수를 출력할 때 '+' 를 사용해 변수를 출력해야 하지만 코틀린에서는 문자열 안에 '$' 를 사용해 출력할 수 있다.

val name = "홍길동"

System.out.println("이름은 : " + name); // 자바 코드
println("이름은 : ${name}") // 코틀린 코드

 

필자가 말한 세 가지 말고도 Data Class, Named Argument, Default Parameter 등 코틀린에는 많은 장점들이 존재한다.

그럼 이제 자바에서 코틀린으로 마이그레이션 할 때 어떤 순서로 마이그레이션을 해야 할지 알아보겠다.

 

코틀린 마이그레이션 순서는 어떻게?

필자는 이번에 레이어별로 순서를 정했는데 클라이언트와 가장 거리가 먼 레이어부터 마이그레이션을 진행하였다. 코틀린으로 마이그레이션하는 과정에서 에러가 발생할 수도 있기 때문이다. 순서는 이렇게 된다.

 

  1. Entity 마이그레이션
  2. Repository 마이그레이션
  3. Service 마이그레이션
  4. Controller 마이그레이션

이제 마이그레이션을 해보겠다.

코틀린 마이그레이션

Intellij의 단축키를 사용하면 쉽게 자바에서 코틀린으로 바꿀 수 있다.

  • Windows : Ctrl + Alt + Shift + K
  • Mac : Control + Shift + Command + K

 

 

단축키를 사용하거나 클래스를 우클릭해서 Convert Java File to Kotlin File을 누르게 되면 위 사진과 같이 뜨는데 현재 프로젝트 설정이 Kotlin으로 되어 있지 않기 때문에 먼저 설정을 하라는 것이다. OK를 되면 프로젝트가 코틀린 설정으로 바뀌고 build.gradle 파일도 build.gradle.kts로 바꿔준다.

 

Entity 마이그레이션

먼저 Entity를 마이그레이션 해보겠다. 먼저 단축키를 사용하여 최초 변환한 결과들이다. 수정해야될 부분들이 많아서 천천히 수정해보겠다.

 

롬북 어노테이션 제거 전

먼저 롬북 어노테이션을 제거 해보겠다.

 

롬북 어노테이션 제거 후

이제 필드들을 주 생성자 스타일로 변경해 주면 엔티티 마이그레이션은 끝이 난다.

 

이제 Repository를 마이그레이션 해보겠다.

 

Repository 마이그레이션

Repository는 단축키만 사용해도 수정 없이 충분히 마이그레이션을 할 수 있다. (단, 추가한 메서드나 에러가 나는 부분이 있다면 수정 필요)

 

 

Service 마이그레이션

Service도 마찬가지로 단축키를 사용해서 변환하고 롬북을 제거한다.

  • 클래스들 주 생성자 스타일로 변경
  • not null assertion 제거

 

주 생성자 스타일로 변경
not null assertions 제거

빨간 부분을 제거해주면 Service도 마이그레이션이 끝나게 된다

 

Controlloer 마이그레이션

마지막으로 Controller 마이그레이션이다. Controller도 Service와 똑같이 진행하면 된다.

 

Service처럼 주 생성자 스타일로 변경하고 not null assertion도 제거해주면 모든 마이그레이션이 끝이난다.

 

느낀점

이번 코틀린 마이그레이션을 하면서 느낀 점은 필자의 개인적인 생각이지만 코틀린은 메리트가 있다는 것이다. 자바 비해 훨씬 간결하고 제공하는 편의성 기능들을 무시할 수 없는 것 같다. 항상 프로젝트를 진행하면서 자바를 고집해 왔고 코틀린을 배워야 한다는 생각만 있었지 막상 실행하지는 않았었는데 이번 기회에 코틀린도 알게 되어서 좋았던 것 같다. 앞으로는 이펙티브 코틀린이나 코틀린 관련 책들을 읽고 코드를 코틀린스럽게 짜는 방법은 공부해 봐야겠다.