;
필요 없음Byte, Short, Int, Long, Float, Double
(언더스코어 _
가능)Char
(자바처럼 숫자 저장 불가)Boolean
Array<Type>
"Hello $name"
)특징
작은 타입이 큰 타입의 하위 타입 아님 → 명시적 변환 필요
val x: Int = 5
val y: Long = x.toLong()
var
: 변경 가능 변수
val
: 변경 불가 (자바 final
)
null 허용: 타입 뒤에 ?
붙임 → String?
초기화 지연
lateinit var
: 나중에 초기화 (기본타입 불가, null 초기화 불가)val ... by lazy { }
: 처음 사용 시 초기화var age: Int = 10
val name: String = "Kotlin"
lateinit var title: String
val number: Int by lazy { 42 }
엘비스 연산자 ?:
→ null이면 기본값 반환
val str: String? = null
val result = str ?: "기본값"
val score = 85
val grade = when(score) {
in 90..100 -> "A"
in 80..89 -> "B"
else -> "F"
}
기본 문법
fun add(a: Int, b: Int): Int = a + b
반환타입 Unit
(void) 생략 가능
디폴트 파라미터, 이름 지정 인자 가능
infix 함수 → 중위 호출
infix fun Int.times(str: String) = str.repeat(this)
println(2 times "Hi") // HiHi
재귀함수 / 꼬리재귀 (tailrec
) 지원
람다: 익명 함수
val sum = { x: Int, y: Int -> x + y }
println(sum(3, 4))
고차함수: 함수가 함수 인자/리턴 가능
클래스 선언
class Person(val name: String, var age: Int)
val p = Person("Kim", 20)
상속: open
필요
open class Animal
class Dog: Animal()
생성자
중첩 클래스: static 성격
inner 클래스: 바깥 클래스 참조 가능 (this@Outer
)
Data class → toString()
, equals()
, copy()
자동
data class User(val id: Int, val name: String)
Enum class → 열거형
Sealed class → 상속 제한, when
사용 시 else 불필요
Object class → 싱글톤
companion object → 자바 static 대체
List: 순서 + 중복 가능
val list = listOf(1,2,3) // 읽기전용
val mlist = mutableListOf(1,2,3) // 수정 가능
Set: 중복 불가
Map: key-value 구조
Compose: 안드로이드 최신 UI 툴킷 (선언형)
@Composable 함수 → UI의 기본 빌딩 블록
@Composable
fun Greeting(name: String) {
Text(text = "Hello $name")
}
Compose 함수 이름 → 보통 명사형 (DoneButton()
)
상태(State) → 값이 바뀌면 UI 자동 리컴포지션
상태 호이스팅 → 재사용성을 위해 상태를 바깥으로 분리
UI 기본 컴포저블: Text
, Button
, TextField
, Spacer
등