Today I Learned_230706

1 분 소요

실무 프로젝트로 배우는 Kotlin & Spring : 리팩토링부터 서비스 구현까지

Part 1. 코틀린 이해하기

코틀린은 Jetbrain사에서 만든 언어

IntelliJ에서 코틀린 관련 기능들을 완벽하게 지원한다

Java는 현대적 언어에 비해 기능이 부족하다

Java에서 best-practice로 불리는 기법들을 언어적 차원에서 제공

자바에서는 클래스를 만들고 그 안에서 메소드를 만들어야만 함

코틀린은 간단한 함수들을 탑레벨로 위치시켜서 별도 클래스 없이 함수를 만들 수 있다.

멀티플랫폼 언어로 서버, 클라이언트 모두 사용 가능

스프링에서도 코틀린을 공식 언어로 지원

Ktor, Exposed

100% 코틀린으로 작성된 프레임워크

Quarkus

Micronaut

Javalin 등 경량 web framework 등장 → 코틀린 지원

자바와 코틀린의 차이점

Checked Exception

Error : 시스템에 비정상적인 상황이 발생해 복구가 불가능

Exception

RunTimeException이 아니면 모두 CheckedException (IO/FileNotFound)

→ try/catch로 감싸주지 않거나 throw로 던져주지 않으면 컴파일 불가

RuntimeException : NPE, ArrayIDX 등등.. 컴파일 타임에 파악하기가 어려움 → UncheckedException

checkedException의 catch문에서 의미없는 처리가 반복

→ 코틀린은 checkedException을 강제하지 않는다.

자바는 원시 자료형 지원. 코틀린은 레퍼런스 타입만 지원.

타입 안에 유용한 유틸리티 메소드등이 존재

컴파일 시점에는 자바로 컴파일이 된다. 코틀린의 레퍼런스 타입은 최적화된 방향으로 컴파일된다.

코틀린에서는 static이 없다 → companion object

삼항 연산자도 존재하지 않는다. 자바에서는 if else로 값을 리턴할 수 없는데, 코틀린에서 if else는 식이므로 값을 리턴할 수 있다.

코틀린은 세미콜론이 필수가 아니다

코틀린에서는 개발자가 임의로 객체의 함수나 프로퍼티를 확장해서 사용할 수 있다.

데이터클래스 : 데이터를 보관하거나 전달하는 목적을 가진 불변객체로 사용

기존 자바에서는 Lombok(@Data)을 사용했다. JDK15에서는 record로 추가됨

문자열 템플릿

  • 문자열에 변수를 사용하거나 여러 행으로 된 텍스트 블록을 만들 수 있다
  • 문자열 템플릿 내에 if else를 넣어 사용하는 등 유연하게 사용할 수 있다.

자바에서는 정식 출시가 되지 않음

널 안정성 - 코틀린은 언어적 차원에서 NPE가 발생할 가능성을 제거한다.

notnull과 Nullable을 구분할 수 있다.

자바의 옵셔널은 값을 래핑하기때문에 객체 생성에 따른 오버헤드가 발생하고, 컴파일 단계에서 null 가능성을 검사하지 않는다.

코틀린에서는 NPE를 자연스럽게 방지할 수 있는 기법들을 제공하고 있다.

기타 등등

→ 스마트 캐스트, 실드 클래스, 위임, 중위 표현식, 연산자 오버로딩, 코루틴 등 언어적 차원에서 다양한 기능들을 제공하고 있다.

스프링의 코틀린 지원

스프링은 공식적으로 코틀린을 지원한다.

spring initialize에서 코틀린 세팅을 쉽게 해 준다.

@ConfigurationProperties

불변객체와 가변객체 개념이 있음.

스프링에서 쉽게 불변으로 된 객체를 만들 수 있다.

함수 명에 띄어쓰기가 가능하다. 예약어로도 가능하다 (백틱 포함하면 된다)

기존 자바 API에 확장 기능 추가

스프링 Fu

실험적인 프로젝트

JavaDSL 또는 KotlinDSL로 작성 가능

카테고리:

업데이트: