코틀린 사용 이유

김도현·2024년 4월 8일

최근에 java + Spring 프로젝트를 Kotlin으로 많이 전환하는 추세이다. 이러한 이유를 알아보자.

왜 Kotlin 인가?

간결성

코틀린은 자바보다 더 간결하고 직관적이다.

  • 자바에서 사용하는 lombok 어노테이션(생성자,게터,세터)들을 코틀린은 묵시적으로 제공하기 때문에 코드 자체가 더 깔끔하다.
  • 기능이 다양한 표준 라이브러리를 제공하기 때문에 반복되는 코드를 줄일 수 있다.

안정성

실행 시점에 오류를 발생시키는 대신 컴파일 시점 검사를 통해 오류를 더 많이 방지해준다.

  • 코틀린은 null이 될 수 없는 값을 추적하며, 실행 시점에 NPE(NullPointException)이 발생할 수 있는 연산을 사용하는 코드를 금지한다.
  • 자바에서 객체의 null을 다루는데 사용되는 많은 코드라인을 생략할 수 있다.

nullable type

  • null이 될 수 있는 타입을 명시적으로 표시할 수 있다.
  • nullable이 아닌 변수에 null을 넣으면 컴파일 타임에 에러를 발생시킨다. (자바는 NPE 발생)

null 체크

자바에서는 NPE를 방지하기 위해 Optional이나 catch를 이용해 짰던 방어로직을 아래와 같은 연산자로 대체할 수 있다.

  • null safe operator(?.): null 아님을 확인 후에 안전하게 호출함
  • elvis operator(?:): null에 대한 직접적인 처리

상호 운용성

java와 100% 호환되며, 기존 라이브러리를 활용할 수 있어서 기존의 자바 코드를 가능하면 최대한 활용할 수 있다.

  • java 클래스를 kotlin 클래스에서, kotlin 클래스를 java 클래스에서 사용할 수 있다.
  • 라이브러리가 어떤 api를 제공하던 간에 코틀린에서 그 api를 활용할 수 있다.

도구 친화

Kotlin은 개발 도구인 ItelliJ IDE를 개발한 JetBrains가 설계한 언어라, 사용하고 있는 IDE intellij가 Kotlin을 더 잘 지원한다.

비동기 처리

코틀린을 사용하면 코루틴을 통한 비동기 처리를 간소화할 수 있다. 물론 자바에서도 RxJava와 같이 비동기를 처리할 수 있는 방법이 있지만, 러닝 커브가 높아 적용하는데 오랜 시간이 걸린다.

반면에 코틀린의 코루틴은 비동기 작업을 더 선언적이고 단순한 방법으로 처리할 수 있도록 설계되었다.

코루틴은 비동기 작업을 일시 중단(suspend)할 수 있는 'suspend' 함수를 사용하여, 비동기 코드를 순차적인 흐름으로 작성할 수 있게 해준다.

Java, Kotlin 코드 비교

생성자

코틀린의 사용자는 기본적으로 프로퍼티의 선언과 초기화를 동시에 하기 때문에 자바에 비해서 코드 양이 훨씬 적다.

프로퍼티 선언으로 만들어진 모든 필드를 포함하는 생성자와, 초기화해준 필드를 제외한 생성자를 따로 선언하지 않아도 된다.

java

@Getter
@Builder
@AllArgsConstructor
public class PageOptionRequest {
  @NotNull(message = "actionType is required!")
  private String actionType;
  @Nullable
  private String os;  
 
  public PageOptionRequest(String actionType) {
    this.actionType = actionType;
    this.os = "ios";
  }
}

kotlin

class PageOptionRequest(
    val actionType: String,
    val os: String? = "ios"
)

data class

data class는 데이터 보관 목적으로 만든 클래스인데, spring 프로젝트의 DTO로 활용하면 매우 편하다. toString(), hashCode(), equals(), copy() 메서드를 기본으로 제공해서, 이에 대한 boilerplate code를 생략할 수 있다.

java

@EqualsAndHashCode
@ToString
public class PageOptionRequest {
   ...
}

kotlin

data class PageOptionRequest(
   ...
)

분기 처리

아래 기능들을 이용해서 분기 처리를 더 깔끔하게 구현할 수 있다.

  • return 값이 있는 if expression: 코틀린에서는 자바와 달리 조건문을 return 값이 있는 '식'으로 제공한다.
  • switch 보다 간결한 when

null 처리

코틀린의 최대 장점인 null처리! 매우 편하고 안전한 null 처리를 제공한다. 자바8부터 Optional을 제공하긴 하지만 Optional 객체로 만드는 과정을 생략할 수 있어 훨씬 간결하다. 

java

Optional.ofNullable(optionRequest.getOs())
    .map(data -> "   and os_type=" + data).orElse("")

kotlin

optionRequest.os?.let { data -> "and os_type=$data" } ?: ""

출처
https://juhi.tistory.com/72

profile
Just do it

0개의 댓글