val constant = 10 | 불변 (final) |
var variable = 10 | 가변 |
val x: Int = 10 | 명시적 타입 |
lateinit var name: String | 지연 초기화 |
val lazy by lazy { } | 지연 초기화 |
const val MAX = 100 | 컴파일 타임 상수 |
Int, Long, Short, Byte | 정수 타입 |
Float, Double | 부동소수점 |
Boolean | 불리언 |
Char | 문자 |
String | 문자열 |
Any | 루트 타입 |
Unit | void 동등 |
Nothing | 반환 없음 |
var name: String? | Nullable 타입 |
name?.length | 안전 호출 |
name ?: "default" | 엘비스 연산자 |
name!! | 널 아님 단언 |
name?.let { } | 안전 let |
as? | 안전 캐스트 |
listOf(1, 2, 3) | 불변 리스트 |
mutableListOf(1, 2, 3) | 가변 리스트 |
emptyList<Int>() | 빈 리스트 |
list[0] | 요소 얻기 |
list.getOrNull(0) | 안전 얻기 |
list.first() / list.last() | 첫/마지막 |
list + element | 요소 추가 |
list - element | 요소 제거 |
mapOf("a" to 1, "b" to 2) | 불변 맵 |
mutableMapOf<String, Int>() | 가변 맵 |
map["key"] | 값 얻기 (nullable) |
map.getOrDefault("key", 0) | 기본값으로 얻기 |
setOf(1, 2, 3) | 불변 집합 |
mutableSetOf<Int>() | 가변 집합 |
.filter { it > 0 } | 요소 필터링 |
.map { it * 2 } | 요소 변환 |
.flatMap { it.items } | 중첩 평탄화 |
.forEach { } | 요소 반복 |
.reduce { acc, x -> acc + x } | 단일로 축소 |
.fold(0) { acc, x -> acc + x } | 초기값으로 접기 |
.groupBy { it.category } | 키로 그룹화 |
.sortedBy { it.name } | 선택자로 정렬 |
fun name() { } | 기본 함수 |
fun name(): Int { return 0 } | 반환 타입 있음 |
fun name() = expression | 단일 표현식 |
fun name(x: Int = 0) | 기본 매개변수 |
fun name(vararg items: Int) | vararg 매개변수 |
fun name(block: () -> Unit) | 함수 매개변수 |
infix fun Int.add(x: Int) | infix 함수 |
tailrec fun factorial(n: Int) | 꼬리 재귀 |
{ x: Int -> x * 2 } | 람다 표현식 |
{ it * 2 } | 암시적 it |
list.map { it * 2 } | 후행 람다 |
::functionName | 함수 참조 |
Type::method | 메서드 참조 |
{ _, y -> y } | 미사용 매개변수 |
obj.let { it.method() } | let - 람다 결과 반환 |
obj.run { method() } | run - this를 수신자로 |
obj.apply { prop = value } | apply - 객체 반환 |
obj.also { print(it) } | also - 부수 효과 |
with(obj) { method() } | with - null 체크 없음 |
obj.takeIf { condition } | takeIf - 조건부 |
obj.takeUnless { condition } | takeUnless - 부정 |
class MyClass { } | 클래스 정의 |
class MyClass(val prop: Int) | 기본 생성자 |
constructor(x: Int) : this() | 보조 생성자 |
init { } | 초기화 블록 |
open class Parent | 상속 가능 |
class Child : Parent() | 상속 |
abstract class MyClass | 추상 클래스 |
sealed class Result | 봉인 클래스 |
data class User(val name: String) | 데이터 클래스 |
object Singleton { } | 객체 선언 |
companion object { } | 동반 객체 |
enum class State { ACTIVE, INACTIVE } | 열거형 클래스 |
value class Email(val value: String) | 값 클래스 |
inner class Inner | 내부 클래스 |
interface MyInterface { } | 인터페이스 정의 |
class MyClass : Interface | 인터페이스 구현 |
fun interface SAM { fun run() } | 함수형 인터페이스 |
class MyClass : Interface by delegate | 위임 |
var prop by Delegates.observable() | 속성 위임 |
suspend fun fetchData() | suspend 함수 |
launch { } | 실행 후 잊기 |
async { } | Deferred 반환 |
deferred.await() | 결과 대기 |
runBlocking { } | 블로킹 코루틴 |
coroutineScope { } | 새 스코프 |
withContext(Dispatchers.IO) { } | 컨텍스트 전환 |
Dispatchers.Main | 메인/UI 스레드 |
Dispatchers.IO | I/O 작업 |
Dispatchers.Default | CPU 집약적 |
Dispatchers.Unconfined | 특정 스레드 없음 |
Job() | 작업 생성 |
job.cancel() | 작업 취소 |
SupervisorJob() | 독립적 자식 |
flow { emit(value) } | flow 생성 |
flowOf(1, 2, 3) | 값에서 flow |
.collect { } | 값 수집 |
.map { } | 값 변환 |
.filter { } | 값 필터링 |
.catch { } | 에러 처리 |
.stateIn(scope) | StateFlow로 변환 |
MutableStateFlow(initial) | 가변 상태 플로우 |