Kotlin 공식 문서 살펴보기 (2) - Idioms
05 Jan 2022DTO
data class Customer(val name: String, val email: String)
data
키워드와 함께 사용한 Customer 클래스는 아래의 기능을 제공한다.
- 모든 속성의 getter(
var
일 경우에는 setter 포함) equals()
hashCode()
toString()
copy()
- 모든 속성에 대해 component1()부터 componentN()까지
함수 매개변수 기본값 설정
fun foo(a: Int = 0, b: String = "") { ... }
리스트 필터링
val positives = list.filter { x -> x > 0 }
더 짧게도 가능하다!
val positives = list.filter { it > 0 }
콜렉션에 요소가 있는지 확인하기
if ("tom@test.com" in emailsList) { ... }
if ("jane@test.com" !in emailsList) { ... }
문자열 넣기
println("I am $name.")
인스턴스 확인
when (x) {
is Foo -> ...
is Bar -> ...
else -> ...
}
읽기 전용 list & map
val list = listOf("a", "b", "c")
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
map 탐색하기
for ((k, v) in map) {
println("$k -> $v")
}
범위 반복하기
for (i in 1..100) { .. } // 100을 포함한다
for (i in 1 until 100) { .. } // 100을 포함하지 않는다
for (x in 2..10 step 2) { .. }
for (x in 10 downTo 1) { .. }
(1..10).forEach { .. }
Lazy Property
val p: String by lazy {
..
}
싱글톤
object Resource {
val name = "Name"
}
추상클래스 인스턴스화
abstract class MyAbstractClass {
abstract fun doFirstThing()
abstract fun doSecondThing()
}
fun main() {
val myObject = object : MyAbstractClass() {
override fun doFirstThing() {
// ..
}
override fun doSecondThing() {
// ..
}
}
myObject.doFirstThing()
}
if not null 줄이기
val files = File("Test").listFiles()
println(files?.size) // files 가 null 이 아닐 경우에만 size 가 출력된다
if not null else 줄이기
val files = File("Test").listFiles()
println(files?.size ?: "empty") // files 가 null 이면 'empty' 출력
null 일 경우, 명령문 실행하기
val values = ...
val email = values["email"] ?: throw IllegalStateException("Email is missing.")
비어있을 수 있는 콜렉션에서 첫번째 아이템 가져오기
val emails = ..
val firstEmail = emails.firstOrNull() ?: ""
when 문에서 반환하기
fun transform(color: String): Int {
return when (color) {
"Red" -> 0
"Green" -> 1
"Blue" -> 2
else -> throw IllegalArgumentException("Invalid color")
}
}
try-catch 식
fun test() {
val result = try {
count()
} catch (e: ArithmeticException) {
throw IllegalStateException(e)
}
}
if 식
val y = if (x == 1) {
"one"
} else if (x == 2) {
"two"
} else {
"other"
}
Unit을 반환하는 메소드의 builder 스타일 사용법
fun arrayOfMinusOnes(size: Int): IntArray {
return IntArray(size).apply { fill(-1) }
}
인스턴스에서 여러 메서드 호출하기
with
를 사용해서 여러 메서드를 호출한다.
class Turtle {
fun penDown()
fun penUp()
fun turn(degrees: Double)
fun forward(pixels: Double)
}
val myTurtle = Turtle()
with(myTurtle) {
penDown()
for (i in 1..4) {
forward(100.0)
turn(90.0)
}
penUp()
}
객체 속성 구성하기
apply
를 사용해서 속성을 적용한다.
val myRectangle = Rectangle().apply {
length = 3
breadth = 4
color = 0xFAFAFA
}
두 변수 값 바꾸기
var a = 1
var b = 2
a = b.also { b = a }