DTOs 생성하기
-
Data Transfer Obejct
-
코틀린은 get/set을 별도로 생성해 줄 필요가 없다고 한다.
-
var과 val의 사용에 따라서 get/set 사용법이 다르다.
-
- var의 경우 Read/Write가 모두 가능함.
- val 사용하면 Read-Only가 됨
-
java의 경우
-
- public을 이용하여 직접 접근하여 사용하거나, private으로 정의하고 get/set을 직접 또는 Annotation을 활용하여 구현
-
Kotlin의 경우
-
-
data class를 별도로 제공한다.
-
data class를 data키워드 없이 만들 수도 있지만, 생성자를 통해서 값을 초기화하는 일반적인 방법에서는 다음과 같이 구현할 수 있음
data class Sample(val name: String, val email: String)
-
Read/Write가 가능한 data class. 이 때는 var로 초기화해야함
data class Sample(var name: String, var email: String)
-
data클래스는 생성자로만 초기화 할 수 있나?
-
코틀린의 data 클래스는 최소 한 개의 값을 생성자에 추가해줘야 함
-
data class의 1개만 초기화하도록 하고, data를 다음과 같이 정의할 수 있음
data class Sample(var abc: String) { var name: String = "" var email: String = "" }
-
data 키워드를 제외하고 일반적인 class를 다음과 같이 작성할 수 있음
class Sample() { var abc: String = "" var name: String = "" var email: String = "" }
함수에 기본값 정의
fun add(name: String, email: String = "default") { // ... }
Kotlin Lambdas
-
{ } 만 있으면 람다식이고, onClick함수에는 view변수를 가지기 때문에 view -> 형태로 간단하게 변수를 받게 됨
button.setOnClickListener { view -> view.alpha = 0.5f }
for문에 필터 걸기
-
예시
-
-
5보다 큰 int에 대해서 *2 를 처리하고, 이를 출력하는 코드
Kotlin
list.filter { it > 5 }.map { Log.d("TAG", "index " + (it * 2)) }
Java
for (Integer integer : list) { if (integer > 5) { integer *= 2; Log.e("TAG", "Index " + integer); } }
-
코틀린 null처리
-
List에서는 null이 포함될 수 있음.
-
if문을 이용하여 null처리를 할 수 있지만 kotlin의 list에서는filterNotNull이라는 키워드가 제공됨
-
예시 : null값을 제외한 새로운 List생성
val list2: List<Int?> = listOf(1,2,null,3,4,5) val intList: List<Int> = list2.filterNotNull() intList.map { Log.d("TAG", "NotNull it " + it)}
filterNot
-
filterNot이라는 키워드도 제공
-
filterNot은 조건에 맞는 값을 제외한 결과를 map에서 확인 가능
-
예시 : filterNot에서 null인 아이템을 제외하고, map에서 Log를 확인 할 수 있음
val list2: List<Int?> = listOf(1,2,null,3,4,5) list2.filterNot { it == null }.map { Log.d("TAG", "notNull it " + it) }
String Interpolation
-
string처리를 쉽게 해줌
-
더하기’+’기호를 사용하지 않고 $를 이용하여 쉽게 string을 합칠 수 있음
-
-
예시
Log.d("TAG", "A : $a, B : $b"); fun updateKeyword(val: String?) = "Keyword : $val"
-
Map의 Key/Value를 출력하기
-
map에서 Key, value를 간단하게 출력할 수 있음
-
예시
-
-
람다식을 함께 사용함으로써 아래와 같은 표현이 가능
for ((k, v) in map) { println("$k -> $v") }
-
읽기 전용 list/map 생성하기
// Read-only list val list = listOf("a", "b", "c") // Read-only map val map = mapOf("a" to 1, "b" to 2, "c" to 3)
함수 - Infix notation(중위 표기법)
-
Infix notation을 사용할 경우는 this 라는 키워드로 Int. 의 값을 접근할 수 있게 됨
-
예시
fun Int.max(x: Int): Int = if (this > x) this else x 1.max(15)
하나의 변수일 경우에는 infix키워드를 추가하면 좀 더 단출하게 줄여줄 수 있습니다.
infix fun Int.max(x: Int): Int = if (this > x) this else x 1 max 15
infix 키워드를 추가하면 1 max 15라고 표현 가능