์ ์ด ๊นจ์ ์๋ฒฝ์ ํฌ์คํ ํ๊ธฐ๋ ์ ๋ง ์ค๋๋ง์ด๋ค์
์ด๋ฒ์๋ ์ฝํ๋ฆฐ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฌธ๋ฒ์ ๋ํด์ ์์๋ดค์ต๋๋ค.
์ฝํ๋ฆฐ์์ ์์ฃผ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ๋ค
1. ํด๋์ค ๋ง๋ค๊ธฐ
data class Customer(val name: String, val email: String)
์ฝํ๋ฆฐ์์๋ ์ด ํ์ค์ด๋ฉด ๊ฐ๋จํ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ํ, ์๋ ๋ฉ์๋๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋ฉ๋๋ค.
- getters, setters
- equals()
- hashCode()
- toString()
- copy() <-- ์๋ฐ์ clone๊ณผ ๊ฐ์ ๋ ์
- component1(), component2(), ... <--์ด๊ฑด ๋์ค์ ํด๋์ค์ ๋ํด ์์ธํ ๋ณด๊ฒ๋ ๋ ์๊ฒ๋ ๊ฒ ๊ฐ๋ค์
2. ํจ์ ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋ณธ ๊ฐ ์ค์
ํจ์ ์ ์ ์ ์ ๋ฌ๋ฐ์ ํ๋ผ๋ฏธํฐ์ ๊ธฐ๋ณธ๊ฐ์ ์๋์ ๊ฐ์ด ์ค์ ํ ์ ์๋ค.
fun foo(a: Int = 0, b: String = "") { ... }
์ ์ฝ๋๋ foo ํจ์ ํธ์ถ ์ Int ํ์ ๊ณผ String ํ์ ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ์ผ๋ก 0๊ณผ ๋น ์คํธ๋ง ""์ ์ด์ฉํ์ฌ ๋ก์ง์ ์ฒ๋ฆฌํ๊ฒ๋๋ค. ๋ฐ๋ผ์ ํจ์ ํธ์ถ ์ foo()๋ผ๊ณ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
3. ๋ฆฌ์คํธ ํํฐ๋ง
val positives = list.filter { x -> x > 0 }
์๋ฐ์ stream์์ ํํฐ๋ง ํ๋ ๊ฒ์ฒ๋ผ ๋๋ค์์ ์ด์ฉํด์ ๋ฆฌ์คํธ์์ ํน์ ์กฐ๊ฑด์ ํด๋นํ๋ ๊ฒ๋ค๋ง ์ ๋ณํ ์ ์๋ค.
๋ํ it ํค์๋๋ฅผ ์ด์ฉํด์ ์๋์ ๊ฐ์ด ๋ ๊ฐ๊ฒฐํ๊ฒ ์์ฑ๋ ๊ฐ๋ฅํ๋ค.
val positives = list.filter { it > 0 }
4. ์ปฌ๋ ์ ์์ ํน์ ์์ ์กด์ฌ์ ๋ฌด ํ์ธํ๊ธฐ
// ํน์ ์คํธ๋ง์ด ๋ฆฌ์คํธ์ ์กด์ฌํ๋์ง ํ์ธ
if ("john@example.com" in emailsList) { ... }
// ํน์ ์คํธ๋ง์ด ๋ฆฌ์คํธ์ ์กด์ฌํ์ง ์๋์ง ํ์ธ
if ("jane@example.com" !in emailsList) { ... }
5. ์คํธ๋ง ํฌ๋งคํ (String Interpolation)
var name = "ํฉ๋นํ"
println("Name $name")
์คํธ๋ง ๋ด์ ๋ณ์์ ๊ฐ์ ๋ฃ์ ์ ์๋ ๊ธฐ๋ฅ์ผ๋ก ์๋ฐ์ ์คํธ๋ง ํฌ๋งคํฐ์ ์ ์ฌํ ๊ธฐ๋ฅ์ด๋ค.
6. ์ธ์คํด์ค ๊ฒ์ฌ (Instance Check)
when (x) {
is Foo -> ...
is Bar -> ...
else -> ...
}
์ฝํ๋ฆฐ์์ when ์ ์๋ฐ์ switch ๋ฌธ๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ์ผ๋ก ์ข ๋ ๊ฐ๊ฒฐํ๊ฒ switch๋ฌธ์ ํํํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
7. Map ์ํํ๊ธฐ (Traversing a map/list of pairs)
for ((k, v) in map) {
println("$k -> $v")
}
์๋ฐ์์๋ keySet์ด๋ values๋ฅผ ๊ฐ๊ฐ ๊ฐ์ ธ์์ ์ฒ๋ฆฌํด์ผ ํ์ง๋ง ์ฝํ๋ฆฐ์์๋ key, value ๋ฅผ ๋์์ ๊ฐ์ ธ์์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
8. ๋ฒ์ ์ฌ์ฉ๋ฒ
loop๋ฅผ ์ํด์๋ ํน์ ๋ฒ์๋ฅผ ์ง์ ํด์ค์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ฝํ๋ฆฐ์์๋ ์๋์ ๊ฐ์ด ๋ค์ํ ๋ฒ์์ง์ ๋ฒ์ ์ ๊ณตํด์ฃผ๊ณ ์๋ค.
for (i in 1..100) { ... } // closed range: 100 ํฌํจ
for (i in 1 until 100) { ... } // half-open range: 100 ๋ฏธํฌํจ
for (x in 2..10 step 2) { ... } // 2๋ถํฐ 2์ฉ ์ฆ๊ฐํ๋ฉด์ 10๊น์ง ...
for (x in 10 downTo 1) { ... } // 10๋ถํฐ 1์ฉ ๊ฐ์ํ๋ฉด์ 1๊น์ง ...
if (x in 1..10) { ... } // ๋ง์ฝ x๊ฐ 1์ด์ 10์ดํ๋ฉด ...
9. Read-Only List/Map
val list = listOf("a", "b", "c")
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
listOf, mapOf ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ธฐ์ ์ฉ ๋ฆฌ์คํธ๋ ๋งต์ ์์ฑํ ์ ์๋ค.
10. ํค๋ฅผ ์ด์ฉํ ๋งต์ ๊ฐ ์ฝ์ด์ค๊ธฐ
println(map["key"])
map["key"] = value
์ฝํ๋ฆฐ์์๋ ๋งต์ ์์์ ์ ๊ทผํ ๋ ๋ฐฐ์ด์ฒ๋ผ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
11. Lazy ์์ฑ
val p: String by lazy {
// compute the string
}
12. ํ์ฅ ํจ์ (Extension Functions)
fun String.spaceToCamelCase() { ... }
"Convert this to camelcase".spaceToCamelCase()
String์ ํ์ฅํจ์๋ฅผ ์์๋ก ์ถ๊ฐ์ ์ํ์ฌ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค
13. ์ฑ๊ธํด ๊ฐ์ฒด ์์ฑํ๊ธฐ
object Resource {
val name = "Name"
}
14. if not null ์ ๊ฐ๊ฒฐํ๊ฒ ์์ฑ
val files = File("Test").listFiles()
println(files?.size)
files์ size๋ฅผ ํธ์ถํ ๋ nullable์ ์๋ฏธํ๋ ?๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด not null์ผ ๊ฒฝ์ฐ์๋ง ์คํํ๊ฒ ๋๋ค. ๋ง์ฝ files๊ฐ null์ด๋ผ๋ฉด null์ด ์ถ๋ ฅ๋๋ค.
15. if not null and else
val files = File("Test").listFiles()
println(files?.size ?: "empty")
์ด๋ฒ์๋ if not null ์ else ์กฐ๊ฑด์ ๋ถ์ฌ null์ด๋ฉด "empty" ๋ฅผ ์ถ๋ ฅํ๋๋ก ๋ณ๊ฒฝํ์๋ค.
16. null์ผ ๊ฒฝ์ฐ ๋ฌธ(statement) ์คํํ๊ธฐ
val values = ...
val email = values["email"] ?: throw IllegalStateException("Email is missing!")
17. possibly empty collection์์ ์ฒซ๋ฒ์งธ ์์ ๊ฐ์ ธ์ค๊ธฐ
val emails = ... // might be empty
val mainEmail = emails.firstOrNull() ?: ""
18. null์ด ์๋ ๊ฒฝ์ฐ ์คํํ๊ธฐ
val value = ...
value?.let {
... // ๋ธ๋ญ๋ด์ ๋ฌธ์ฅ์ value๊ฐ not null์ผ ๊ฒฝ์ฐ์ ์คํํ๋ค
}
19. nullable Boolean
val b: Boolean? = ...
if (b == true) {
...
} else {
// `b` is false or null
}
Booleanํ์ ์ ๋ณ์๊ฐ null์ธ์ง ์๋์ง ๋ณ๋๋ก ๊ฒ์ฌํ ํ์๊ฐ ์๋ค.
20. ๋ ๋ณ์์ ๊ฐ ์ค์ํ๊ธฐ
var a = 1
var b = 2
a = b.also { b = a }
์๋ฐ์์๋ ๋ ๋ณ์์ ๊ฐ์ swapํ ๋ ์์๋ณ์๋ฅผ ํ๋ ์ถ๊ฐ๋ก ๋ง๋ค์ด์ swapํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์ง๋ง ์ฝํ๋ฆฐ์์๋ ๊ทธ๋ด ํ์๊ฐ ์๋ค.
์ด์ธ์๋ ์ฌ๋ฌ๊ฐ์ง ์๋ฐ๋ณด๋ค ๋ ์ฝ๊ณ ๊ฐ๊ฒฐํด์ง ์์ฃผ ์ฌ์ฉ๋๋ ๋ฌธ๋ฒ์ด ์์ผ๋ ์ด ์ ๋๋ง ์๊ฐํฉ๋๋ค.
๋๋จธ์ง๋ ์๋ ์ถ์ฒ์ ์ธ๊ธํ ์ฝํ๋ฆฐ ๊ณต์์ฌ์ดํธ์์ ํ์ธํด๋ณด์ธ์.
์ด๋ ์ ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ์ ์ต์ํด์ง๋ฉด ์ฌ์ด ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด๋ฅผ ์ฝํ๋ฆฐ์ผ๋ก ํ๋ฉด์ ๋น ๋ฅด๊ฒ ์ตํ๋ณผ ๊ณํ์ ๋๋ค.
'๐ป Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Elasticsearch] Kibana์์ ์กฐํ์ x of y shards failed ์ค๋ฅ ๋ฐ์ (0) | 2020.06.29 |
---|---|
AWS ES์ logback์ผ๋ก ๋ก๊น ํ๊ธฐ (์ปค์คํ ์ดํ๋) (0) | 2020.06.21 |
[Kotlin/JVM] ์ฝํ๋ฆฐ ์ธ์ด์ ํน์ง (์ฝํ๋ฆฐ์ด๋?) (0) | 2020.05.26 |
[AWS/Java] Elasticsearch ์ธ๋ฑ์ค S3๋ก ๋ฐฑ์ /๋ณต์ ํ๊ธฐ (0) | 2020.05.25 |
[Kotlin/JVM] ์ฝํ๋ฆฐ ๊ธฐ๋ณธ๋ฌธ๋ฒ (Basic Syntax) (0) | 2020.05.15 |