liminfo

Kotlin Reference

Kotlin 프로그래밍 레퍼런스

40개 결과

Kotlin Reference 소개

Kotlin 레퍼런스는 기본 문법부터 Kotlin만의 고급 기능까지 아우르는 8개 카테고리로 구성된 완전한 검색 가능 가이드입니다. 기본문법 카테고리는 val/var 변수 선언, 단일 표현식 단축 표기를 포함한 fun 함수 정의, 타입 체크·범위 매칭이 있는 when 표현식, 표현식으로의 if, 범위·downTo·step을 사용한 for/while 반복문, ${} 보간이 있는 문자열 템플릿, 타입 별칭, 구조분해, 표현식으로의 try, 변성이 있는 제네릭을 다룹니다. 클래스 카테고리는 copy()와 구조분해를 가진 data class, init 블록이 있는 기본 생성자, open/sealed 클래스 계층, 싱글톤을 위한 object와 companion object, 기본 구현이 있는 인터페이스, 속성이 있는 enum class를 포함합니다. 함수 카테고리는 람다 표현식, 스코프 함수(let·run·with·apply·also), 인라인/중위 함수를 다룹니다. 컬렉션은 불변·가변 listOf/setOf/mapOf, filter/map/reduce, groupBy/associateWith, flatMap/zip, 지연 시퀀스를 포함합니다. 코루틴은 suspend 함수, launch·async 빌더, Flow 비동기 스트림, coroutineScope 구조적 동시성, Channel을 다룹니다. Null 안전은 ?., ?:, !!, let null 체크, as? 안전 캐스트, lateinit/lazy를 포함합니다. 확장함수와 확장 프로퍼티, 연산자 오버로딩, DSL 빌더·위임 프로퍼티·어노테이션까지 모든 항목에 관용적 Kotlin 코드 예제가 포함되어 있습니다.

Kotlin은 Android 개발의 주 프로그래밍 언어이며 Spring Boot, Ktor, Quarkus 같은 프레임워크로 서버 사이드 개발에도 널리 채택되고 있습니다. 간결한 문법, null 안전 타입 시스템, 일급 코루틴 지원은 Android와 JVM 백엔드 개발자 모두에게 Java 대비 큰 생산성 향상을 제공합니다. 이 레퍼런스는 Java에서 Kotlin으로 전환하는 개발자, Kotlin 관용구를 배우는 Android 엔지니어, Kotlin 코루틴과 함수형 컬렉션 API를 탐구하는 백엔드 개발자를 위해 만들어졌습니다.

레퍼런스는 Kotlin 개발의 8가지 개념적 레이어를 반영합니다: 매일 사용하는 기본 문법 레이어, 객체 지향 클래스 시스템, 함수형 프로그래밍 기능, 강력한 컬렉션 DSL, 코루틴 동시성 모델, null 안전 타입 시스템, 확장 기반 API 설계 패턴, DSL/메타프로그래밍 기능. 각 항목은 관용적 Kotlin을 보여주는 집중된 코드 예제를 포함하므로 구문과 함께 언어 관습도 배울 수 있습니다.

주요 기능

  • 기본 문법: val/var 선언, 단일 표현식 본문을 가진 fun, 타입 매칭이 있는 when 표현식, 표현식으로의 if, 범위(1..5, downTo, step), 문자열 템플릿
  • 클래스 시스템: copy()와 자동 생성 equals/hashCode를 가진 data class, 완전한 when을 위한 sealed class, 상속을 위한 open class, 싱글톤 object, companion object, 기본 구현이 있는 인터페이스, 생성자 파라미터를 가진 enum class
  • 함수형 기능: 람다 구문, 후행 람다 관례, 수신자와 반환값 차이가 있는 5가지 스코프 함수(let·run·with·apply·also)
  • 컬렉션 API: 불변 vs 가변 컬렉션, filter/map/reduce, 키 기반 그룹화 groupBy, Map 생성 associateWith, flatMap/zip, 성능을 위한 지연 시퀀스
  • 코루틴: suspend 함수 기본, launch(발사 후 망각) vs async/await(결과 반환), filter/collect를 가진 반응형 스트림 Flow, 구조적 동시성 coroutineScope, 생산자-소비자 통신 Channel
  • Null 안전: ?. 안전 호출 체이닝, 기본값을 위한 Elvis 연산자 ?:, 비null 단언 !!, null 조건부 실행 let, 안전 캐스트 as?, 지연 초기화 lateinit/lazy
  • String·List·커스텀 타입의 확장함수와 확장 프로퍼티, operator 수정자를 사용한 자연스러운 구문 연산자 오버로딩
  • DSL 패턴: buildString/buildList 빌더 함수, 반응형 속성 Delegates.observable, 전제조건 함수 require/check, @JvmStatic/@Deprecated 어노테이션

자주 묻는 질문

Kotlin에서 val과 var의 차이는 무엇인가요?

val은 불변(읽기 전용) 참조를 선언합니다 — 한 번 할당하면 재할당할 수 없으며 Java의 final과 유사합니다. var는 재할당이 가능한 가변 참조를 선언합니다. 단, val이 객체 자체를 불변으로 만들지는 않습니다: MutableList인 val list에는 여전히 요소를 추가할 수 있습니다. 더 안전하고 예측 가능한 코드를 위해 var보다 val을 선호하세요.

Kotlin의 data class란 무엇이고 언제 사용해야 하나요?

data class는 기본 생성자 파라미터를 기반으로 equals(), hashCode(), toString(), copy(), componentN() 함수를 자동으로 생성합니다. DTO, 도메인 모델 레코드, 동등성이 정체성이 아닌 내용에 기반한 설정 객체 같은 불변 값 객체에 data class를 사용하세요. copy() 함수로 변경된 필드만 바꾼 수정된 복사본을 만들 수 있습니다.

Kotlin 코루틴에서 launch와 async의 차이는 무엇인가요?

launch는 부작용을 위한 코루틴을 시작하고 Job을 반환합니다 — job.cancel()이나 job.join()을 호출합니다. async는 결과를 계산하는 코루틴을 시작하고 Deferred<T>를 반환합니다 — 결과가 준비됐을 때 deferred.await()를 호출합니다. 반환값이 필요 없을 때는 launch를, 동시 계산이 필요하고 결과가 필요할 때는 async를 사용하세요.

let, apply, run, with, also 스코프 함수의 차이는 무엇인가요?

let: 수신자가 it, 람다 결과를 반환 — null 체크와 변환에 사용. run: 수신자가 this, 람다 결과를 반환 — 객체 설정과 계산에 사용. with: 수신자가 this(확장이 아닌 인수로 전달), 람다 결과를 반환. apply: 수신자가 this, 수신자 자체를 반환 — 객체 설정/빌더 패턴에 사용. also: 수신자가 it, 수신자 자체를 반환 — 체인을 끊지 않고 부작용(로깅)에 사용.

Kotlin의 null 안전은 어떻게 동작하나요?

Kotlin에서 타입은 기본적으로 non-nullable입니다. `String`은 null이 될 수 없고, `String?`은 null이 될 수 있습니다. 컴파일러가 컴파일 타임에 null 안전을 강제합니다. 안전 호출 연산자(?.)를 사용하면 NPE 없이 nullable의 메서드를 호출할 수 있습니다: `name?.length`는 예외 대신 null을 반환합니다. Elvis 연산자(?:)로 기본값을 제공하세요: `name?.length ?: 0`. !!은 값이 non-null임이 확실할 때만 사용하세요 — null이면 NPE를 던집니다.

Kotlin 확장함수란 무엇이며 어떻게 동작하나요?

확장함수는 상속이나 데코레이터 없이 기존 클래스에 메서드를 추가할 수 있게 합니다. `fun ClassName.newMethod() { ... }`로 정의합니다. 컴파일러가 수신자를 첫 번째 파라미터로 받는 정적 함수로 변환하는 구문 설탕입니다. 확장함수는 String, List, 서드파티 클래스를 포함한 모든 타입에 정의할 수 있습니다. 클래스를 실제로 수정하지 않으며 호출 지점에서 정적으로 해석됩니다.

Kotlin의 sealed class란 무엇이고 왜 유용한가요?

sealed class는 하위 클래스가 같은 파일(Kotlin 1.5+에서는 같은 패키지)에 정의되도록 제한합니다. Result(Success/Error), UI 상태(Loading/Success/Error), 네트워크 응답 같은 제한된 타입 계층을 나타내는 데 이상적입니다. sealed class를 when 표현식에서 사용하면 컴파일러가 모든 하위 클래스가 처리됐는지 확인할 수 있어 else 분기가 필요 없고 처리되지 않은 케이스로 인한 런타임 오류를 방지합니다.

Kotlin Flow란 무엇이고 suspend 함수와 어떻게 다른가요?

suspend 함수는 완료 시 단일 값을 반환합니다. Flow는 시간이 지남에 따라 여러 값을 방출할 수 있는 콜드 비동기 스트림으로, Kotlin 코루틴 위에 구축된 RxJava Observable과 유사합니다. flow { } 빌더로 Flow를 만들고 emit()으로 값을 생성하세요. 코루틴에서 collect()로 값을 수집하세요. Flow는 콜드입니다 — 수집될 때까지 값을 생성하지 않습니다. Android 개발에서 UI 상태 스트림, 데이터베이스 변경 알림, 이벤트 버스에 Flow를 사용하세요.