프래그래밍에서 관용구(idioms)는 자주 사용하는 코딩 형태나 패턴이 되겠습니다. 보통 같은 결과를 내는 프로그램을 다른 모양으로 작성할 수 있는데, 관용구는 주로 사용되는 형태를 말합니다. 여기에는 Kotlin에서 자주 사용되어지는 관용구(idioms)를 무작위로 모아둔 내용 입니다.
1. DTO(Data Transfer Object)s 객체 만들기
data class Customer(val name: String, val email: String)
이 간단하게 선언한 Customer 클래스는 다음 기능들을 제공합니다. 코틀린의 Data class에 대해서는 다음에 자세히 알아보겠습니다.
- 모든 속성에 대한 getters (var로 선언 되었을 경우 setters 도 제공) 제공합니다.
- equals()
- hashCode()
- toString()
- copy()
- component1(), component2(), …, 모든 속성에 대해서 제공됩니다.
2. 함수의 매개변수에 대해 기본값을 제공합니다.
fun foo(a: Int = 0, b: String = "") { ... }
3. 리스트를 필터링 합니다.
val positives = list.filter { x -> x > 0 }
또는 훨씬 더 짧은 다른 방식도 있습니다.
val positives = list.filter { it > 0 }
4. 문자열 내에 값을 넣는 방법
println("Name $name")
5. 인스턴스 체크하기
when (x) {
is Foo -> ...
is Bar -> ...
else -> ...
}
6. map/list내의 모든 데이터를 처리하기
for ((k, v) in map) {
println("$k -> $v")
}
k, v는 아무거나 호출되어질 수 있습니다.
7. 범위(range) 사용하기
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) { ... }
8. 읽기 전용 리스트(list)
val list = listOf("a", "b", "c")
9. 읽기 전용 맵(map)
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
10. 맵(map)내의 데이터 사용하기
println(map["key"])
map["key"] = value
11. 지연(lazy) 속선(property)
val p: String by lazy {
// 문자열을 계산합니다.
}
12. 확장 기능(function)
fun String.spaceToCamelCase() { ... }
아래 처럼 사용합니다.
"Convert this to camelcase".spaceToCamelCase()
13. 싱글톤 만들기
object Resource {
val name = "Name"
}
14. null 검사 간단히 하기
val files = File("Test").listFiles()
println(files?.size)
15. null이거나 아닐경우 간단히 하기
val files = File("Test").listFiles()
println(files?.size ?: "empty")
16. null일 경우 문장(statement) 실행하기
val values = ...
val email = values["email"] ?: throw IllegalStateException("Email is missing!")
17. 비어 있을 가능성이 있는 컬렉션의 첫번째 항목 가져오기
val emails = ... // might be empty
val mainEmail = emails.firstOrNull() ?: ""
18. null이 아니면 실행하기
val value = ...
value?.let {
... // null이 아니면 이 블럭이 실행됩니다.
}
19. null이 아닌 경우 null 가능 값 매핑하기
val value = ...
val mapped = value?.let { transformValue(it) } ?: defaultValueIfValueIsNull
20. when 문장으로 return 하기
fun transform(color: String): Int {
return when (color) {
"Red" -> 0
"Green" -> 1
"Blue" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
}
21. 'try/catch' 표현식
fun test() {
val result = try {
count()
} catch (e: ArithmeticException) {
throw IllegalStateException(e)
}
// 결과를 사용한 작업이 이부분에 옵니다.
}
22. 'if' 표현식
fun foo(param: Int) {
val result = if (param == 1) {
"one"
} else if (param == 2) {
"two"
} else {
"three"
}
}
23. Unit를 반환하는 메소드의 Builder 스타일 사용법
fun arrayOfMinusOnes(size: Int): IntArray {
return IntArray(size).apply { fill(-1) }
}
24. 단일 표현식 함수
fun theAnswer() = 42
이 함수는 아래 함수와 동일합니다.
fun theAnswer(): Int {
return 42
}
이것은 다른 관용구와 효과적으로 결합 할 수 있으므로 더 짧은 코드가 되어질수 있습니다. 예 : when- expression을 사용:
fun transform(color: String): Int = when (color) {
"Red" -> 0
"Green" -> 1
"Blue" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
25. 객체 인스턴스에 대해 여러 메소드 호출하기 (with 사용)
class Turtle {
fun penDown()
fun penUp()
fun turn(degrees: Double)
fun forward(pixels: Double)
}
val myTurtle = Turtle()
with(myTurtle) { //draw a 100 pix square
penDown()
for(i in 1..4) {
forward(100.0)
turn(90.0)
}
penUp()
}
26. Java 7의 try with resources 사용
val stream = Files.newInputStream(Paths.get("/some/file.txt"))
stream.buffered().reader().use { reader ->
println(reader.readText())
}
27. 제네릭 형식 정보가 필요한 제네릭 함수에 대한 편리한 형식
// public final class Gson {
// ...
// public T fromJson(JsonElement json, Class classOfT) throws JsonSyntaxException {
// ...
inline fun Gson.fromJson(json: JsonElement): T = this.fromJson(json, T::class.java)
28. null 가능한 Boolean 사용하기
val b: Boolean? = ...
if (b == true) {
...
} else {
// 'b' is false or null
}
29. 두 변수 교환하기
var a = 1
var b = 2
a = b.also { b = a }
'프로그래밍 > Kotlin' 카테고리의 다른 글
Kotlin - 기본 타입(Basic Types) (0) | 2019.07.01 |
---|---|
Kotlin - 코딩 관습(Coding Conventions) (0) | 2019.06.09 |
Kotlin - Basic Syntax(기본 구문) (2/2) (0) | 2019.04.30 |
Kotlin - Basic Syntax(기본 구문) (1/2) (0) | 2019.04.25 |
Eclipse에 Kotlin(코틀린) 플러그인 설치 및 간단한 프로그램 실행해보기 (0) | 2019.03.28 |