[Kotlin] 1-2. 이디엄
이디엄
DTO 생성(POJO?POCO)
data class Customer(val name : String, val email : String)
다음 기능을 가진 Customer 클래스 제공
- 모든 프로퍼티에 대한 getter(var의 경우 setter)
- equals()
- hashCode()
- toString()
- copy()
- 모든 프로퍼티에 대한 component1(), component2(), …
***함수 파라미터 기본 값
fun foo(a: Int = 0, b: String:"") {...} // 디폴드 값
리스트 필터링
val positives = list.filter{it > 0}
스트링 삽입
println("Name $name")
인스턴스 검사
when (x) {
is Foo -> ...
is Bar -> ...
else -> ...
}
쌍으로 맵이나 목록 탐색
for ((k, v) in map) {
println("$s -> $k")
}
범위 사용
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) {...}
if (x in 1..10) {...}
읽기 전용 리스트
val list = listOf("a", "b", "c")
읽기 전용 맵
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
맵 접근
println(map["key"])
map["key"] = value
지연(lazy) 프로퍼티
val p: String by lazy {
// 문자열 계산
}
확장 함수
fun String.spaceToCamelCase() {...}
"Convert this to camelCase".spaceToCamelCase()
싱글톤 생성
object Resource {
val name = "Name"
}
If not null 축약
val files = File("Test").listFiles()
println(files?.size)
If not null else 축약
val files = File("Test").listFiles()
println(files?.size ?: "empty")
null이면 문장 실행
val values = ...
val email = values["email"] ?: throw IllegalStateException("Email is mssing")
null이 아니면 실행
val value = ...
value?.let {
... // null이 아닌 블록 실행
}
null이 아니면 null 가능 값 매핑
val value = ...
val mapped = value?.let {transformValue(it)} ?: defaultValueIfValueIsNull
when 문장에서 리턴
fun transform(color: String): Int {
return when (color) {
"Red" -> 0
"Green" -> 1
"Blue" -> 2
else -> throw IllegalArgumenstException("Invalid color param value")
try/catch 식
fun test() {
val result = try {
count()
} catch (e: ArithmeticException) {
throw IllegalStateException(e)
}
// 결과로 작업
}
if 식
fun foo(param: Int) {
val result = if (param == 1) {
"one"
} else if (param == 2) {
"two"
} else {
"three"
}
}
Unit을 리턴하는 메서드의 빌더-방식 용법
fun arrayOfMinusOnes(size: Int): IntArray {
return IntArray(size).apply {fill(-1)}
}
단일 식 함수
fun theAnswer() = 42
다음과 동일
fun theAnswer() : Int {
return 42
}
단일 식 함수는 다른 이디엄과 쓸 수 있으며 코드를 더 짧게 만들어줌
fun transform(color: String): Int = when(color) {
"Red" -> 0
"Blue" -> 1
"Green" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
객체 인스턴스의 메서드를 여러 번 호출(‘with’)
class Turtle {
fun penDown()
fun penUp()
fun turn(degrees: Double)
fun forward(pixels: Double)
}
val myTurtle = Turtle()
with (myTurtle) { // 100 pix 사각형 그리기
penDown()
for(i in 1..4) {
forward(100.0)
turn(90.0)
}
penUp()
}
null 가능 Boolean 사용
val b: Boolean? = ...
if(b == true) {
...
} else {
// 'b'는 false나 null
}