https://github.com/bugoverdose/java-to-kotlin
mini conference - example code
https://github.com/bugoverdose/java-to-kotlin
Last synced: about 2 months ago
JSON representation
mini conference - example code
- Host: GitHub
- URL: https://github.com/bugoverdose/java-to-kotlin
- Owner: bugoverdose
- Created: 2021-08-08T07:35:27.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2021-08-17T09:53:03.000Z (over 4 years ago)
- Last Synced: 2025-03-20T23:32:04.469Z (11 months ago)
- Language: Java
- Homepage:
- Size: 83 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Java to Kotlin
### 목표
- Spring 어플리케이션들이 Java에서 Kotlin으로 넘어가고 있는 최신 트렌드에 대한 최소한의 이해
- Java와 Kotlin 문법 비교 (Java 코드는 비교를 위한 최소한의 예제일 뿐. Bad Practice에 해당되는 내용도 존재)
- Kotlin에 관심이 있는 입문자들에게 도움이 되도록 만든 최소한의 예제 코드 제공
- 소스 코드만으로도 어느정도 내용 이해되도록 주석으로 설명 달기
### 1부: 코틀린 입문
- 예제 코드: [java-basics](https://github.com/bugoverdose/java-to-kotlin/blob/master/java-basics/src/main/java/com/example/javabasics/JavaBasicsApplication.java), [kotlin-basics](https://github.com/bugoverdose/java-to-kotlin/blob/master/kotlin-basics/src/main/kotlin/com/example/kotlinbasics/KotlinBasicsApplication.kt)
#### 표준 출력 문법과 중괄호 여부
- Java : System.out.println("Hello World!");
- Kotlin : println("Hello World!")
#### var의 차이
- Java : 지역 변수 자료형 추론 (JS의 let과 유사)
- Kotlin : 수정 가능한 변수로 선언 (Java의 디폴트 자료 선언 방식; val vs var)
#### nullable 타입
- Java : 참조 자료형 멤버변수들은 null이 디폴트 값. 주로 Optional을 활용. 모든 자료형이 null이 될 수는 있음. @Nullable도 지원됨.
- Kotlin : 모든 자료형에 대해 nullable 설정 가능. 때문에 safe call 등 null 값 체크 관련 기능이 많음.
#### 생성자
- Java : {} 내부에 멤버변수들 선언 => {} 내부에 선언한 멤버변수들을 매개변수로 받는 생성자 정의하여 사용. => new 키워드 필요.
- Kotlin : 클래스 정의 첫 줄에 ()에 생성자로 사용할 매개변수들 지정. 해당 변수들은 {} 내부에 별도로 작성 불필요. => new 키워드 불필요. 가독성 증가
#### 클래스
- Java : getter, setter, toString 등 전부 {} 내부에 구현 필요
- Kotlin : getter, setter 불필요. data class로 선언하면 toString 등의 메서드 전부 자동 생성됨
#### 스코프 함수(let, also 등)
- Kotlin 문법의 꽃. 간단한 작업들을 체이닝하는 데 용이.
### 2부: Spring 프로젝트 코드 비교 예제
- 예제 코드: [java-spring](https://github.com/bugoverdose/java-to-kotlin/blob/master/java-spring/src/main/java/com/example/javaspring/JavaSpringApplication.java), [kotlin-spring](https://github.com/bugoverdose/java-to-kotlin/blob/master/kotlin-spring/src/main/kotlin/com/example/kotlinspring/KotlinSpringApplication.kt)
#### 코드 내용 요약
- Spring Boot + JPA를 통한 CRUD 기초
- Controller - Service - Repository 구조.
- Request DTO, command, model, entity를 통한 객체 유형 세분화
- @PostContruct를 통한 앱 구동 시점에 작업 실행하는 방법.
- ExceptionHandler를 통한 요청에 대한 예외 처리 방식 설정. 커스텀 Exception Type 정의 방법.
### 정리
1. Kotlin이라고 하면 안드로이드 개발, 함수형 프로그래밍만 생각하는 것이 일반적일 것이다. 하지만 Kotlin은 기본적으로 Java와 동일한 JVM 언어이므로 Java로 작성된 모든 코드들은 Kotlin으로 작성될 수 있다. 실제로 IntelliJ에서 Java 코드를 .kt 파일에 붙여넣을 경우 Kotlin 코드로 자동 변환되며, Kotlin 코드도 자바로 변환하여 볼 수 있다(Tools > Kotlin > Show Kotlin Bytecode > Decompile).
2. 현재 실무에서는 Java + Lombok 조합을 통해 코드 가독성과 생산성을 크게 개선하였다고는 하지만 이는 근본적인 해결책이 된다고 보기는 어려우며, 오히려 각 클래스의 구조에 대한 이해 없이 @Data를 남발하는 것은 지양해야 한다고 생각한다.
3. 이에 반해 Kotlin은 다양한 측면에서 Java의 단점을 해결해준다고 볼 수 있다. 실제로 [SpringInitializr](https://start.spring.io/)은 Java와 Kotlin으로 Spring 프로젝트를 셋업해주며, Java 코드를 Kotlin 코드로 리팩토링하는 작업은 전세계적인 흐름으로 보인다.
4. 본격적으로 Kotlin에 입문하고 싶다면 [Kotlin 공식문서](https://kotlinlang.org/docs/home.html)와 [Kotlin in Action](http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791161750712&orderClick=LEa&Kc=) 추천한다.