{"id":16921903,"url":"https://github.com/bugoverdose/java-to-kotlin","last_synced_at":"2026-04-05T21:01:46.366Z","repository":{"id":109988778,"uuid":"393892290","full_name":"bugoverdose/java-to-kotlin","owner":"bugoverdose","description":"mini conference - example code","archived":false,"fork":false,"pushed_at":"2021-08-17T09:53:03.000Z","size":85,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-20T23:32:04.469Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bugoverdose.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-08T07:35:27.000Z","updated_at":"2021-08-17T09:53:06.000Z","dependencies_parsed_at":"2023-03-13T13:59:37.119Z","dependency_job_id":null,"html_url":"https://github.com/bugoverdose/java-to-kotlin","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bugoverdose/java-to-kotlin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bugoverdose%2Fjava-to-kotlin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bugoverdose%2Fjava-to-kotlin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bugoverdose%2Fjava-to-kotlin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bugoverdose%2Fjava-to-kotlin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bugoverdose","download_url":"https://codeload.github.com/bugoverdose/java-to-kotlin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bugoverdose%2Fjava-to-kotlin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274935996,"owners_count":25376837,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-13T02:00:10.085Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T19:53:27.623Z","updated_at":"2025-12-30T21:23:48.246Z","avatar_url":"https://github.com/bugoverdose.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java to Kotlin\n\n### 목표\n\n- Spring 어플리케이션들이 Java에서 Kotlin으로 넘어가고 있는 최신 트렌드에 대한 최소한의 이해\n- Java와 Kotlin 문법 비교 (Java 코드는 비교를 위한 최소한의 예제일 뿐. Bad Practice에 해당되는 내용도 존재)\n- Kotlin에 관심이 있는 입문자들에게 도움이 되도록 만든 최소한의 예제 코드 제공\n- 소스 코드만으로도 어느정도 내용 이해되도록 주석으로 설명 달기\n  \u003cbr\u003e\u003c/br\u003e\n\n### 1부: 코틀린 입문\n\n- 예제 코드: [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)\n\n#### 표준 출력 문법과 중괄호 여부\n\n- Java : System.out.println(\"Hello World!\");\n- Kotlin : println(\"Hello World!\")\n\n#### var의 차이\n\n- Java : 지역 변수 자료형 추론 (JS의 let과 유사)\n- Kotlin : 수정 가능한 변수로 선언 (Java의 디폴트 자료 선언 방식; val vs var)\n\n#### nullable 타입\n\n- Java : 참조 자료형 멤버변수들은 null이 디폴트 값. 주로 Optional을 활용. 모든 자료형이 null이 될 수는 있음. @Nullable도 지원됨.\n- Kotlin : 모든 자료형에 대해 nullable 설정 가능. 때문에 safe call 등 null 값 체크 관련 기능이 많음.\n\n#### 생성자\n\n- Java : {} 내부에 멤버변수들 선언 =\u003e {} 내부에 선언한 멤버변수들을 매개변수로 받는 생성자 정의하여 사용. =\u003e new 키워드 필요.\n- Kotlin : 클래스 정의 첫 줄에 ()에 생성자로 사용할 매개변수들 지정. 해당 변수들은 {} 내부에 별도로 작성 불필요. =\u003e new 키워드 불필요. 가독성 증가\n\n#### 클래스\n\n- Java : getter, setter, toString 등 전부 {} 내부에 구현 필요\n- Kotlin : getter, setter 불필요. data class로 선언하면 toString 등의 메서드 전부 자동 생성됨\n\n#### 스코프 함수(let, also 등)\n\n- Kotlin 문법의 꽃. 간단한 작업들을 체이닝하는 데 용이.\n  \u003cbr\u003e\u003c/br\u003e\n\n### 2부: Spring 프로젝트 코드 비교 예제\n\n- 예제 코드: [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)\n\n#### 코드 내용 요약\n\n- Spring Boot + JPA를 통한 CRUD 기초\n- Controller - Service - Repository 구조.\n- Request DTO, command, model, entity를 통한 객체 유형 세분화\n- @PostContruct를 통한 앱 구동 시점에 작업 실행하는 방법.\n- ExceptionHandler를 통한 요청에 대한 예외 처리 방식 설정. 커스텀 Exception Type 정의 방법.\n  \u003cbr\u003e\u003c/br\u003e\n\n### 정리\n\n1. Kotlin이라고 하면 안드로이드 개발, 함수형 프로그래밍만 생각하는 것이 일반적일 것이다. 하지만 Kotlin은 기본적으로 Java와 동일한 JVM 언어이므로 Java로 작성된 모든 코드들은 Kotlin으로 작성될 수 있다. 실제로 IntelliJ에서 Java 코드를 .kt 파일에 붙여넣을 경우 Kotlin 코드로 자동 변환되며, Kotlin 코드도 자바로 변환하여 볼 수 있다(Tools \u003e Kotlin \u003e Show Kotlin Bytecode \u003e Decompile).\n2. 현재 실무에서는 Java + Lombok 조합을 통해 코드 가독성과 생산성을 크게 개선하였다고는 하지만 이는 근본적인 해결책이 된다고 보기는 어려우며, 오히려 각 클래스의 구조에 대한 이해 없이 @Data를 남발하는 것은 지양해야 한다고 생각한다.\n\n3. 이에 반해 Kotlin은 다양한 측면에서 Java의 단점을 해결해준다고 볼 수 있다. 실제로 [SpringInitializr](https://start.spring.io/)은 Java와 Kotlin으로 Spring 프로젝트를 셋업해주며, Java 코드를 Kotlin 코드로 리팩토링하는 작업은 전세계적인 흐름으로 보인다.\n\n4. 본격적으로 Kotlin에 입문하고 싶다면 [Kotlin 공식문서](https://kotlinlang.org/docs/home.html)와 [Kotlin in Action](http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR\u0026mallGb=KOR\u0026barcode=9791161750712\u0026orderClick=LEa\u0026Kc=) 추천한다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbugoverdose%2Fjava-to-kotlin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbugoverdose%2Fjava-to-kotlin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbugoverdose%2Fjava-to-kotlin/lists"}