Kotlin youtube ์์ฝ์ธ๋ฏํ ๊ฐ์๋ฌธ
์คํ๋ง์บ ํ 2018 [TrackB Session2] : ์ฟ ํก Kotlin Backend ์ ์ฉ๊ธฐ
์ฝํ๋ฆฐ์ ์ข์์
- ์๋ฐ์ ํธํ์ฑ 100% (@JvmXXX์ด๋ ธํ ์ด์ ์ฌ์ฉ์)
- Familiar Syntax
- Smart Casts(’is,’as’)
- ํ์ ์ ์ค์ฌ ์ธ ์ ์๋ค.
- is / !is
- if instanse of
- as / as?
- ? ๊ฐ ๋ถ์ผ๋ฉด nullable
- Data Class
- copy ๋ผ๋ ํจ์
- ์ฝํ๋ฆฐ์์๋ immutable ์ด ๊ธฐ๋ณธ์ด๋ค.
- ํ์ ๋ ์ค๊ณ ์ฝ๊ธฐ๋ ํธํ๋ค.
- copy ๋ผ๋ ํจ์
- Default Argument
- String Templates
fun read(b: ByteArray, offset:Int = 0, length:Int = b.size) {
TODO("Not Imlemented")
}
val s = "abc"
val str = "$s.length is ${s.length}" // abc.length is 3
// no getter setter
val tomAge = map["tom"] ?: 0 // get
map["jane"] = 29 // set
- Extension Functions(C#)
- ์์์์ด ํ์ฅ ๊ฐ๋ฅ
- Null Safety
if (text != null) text.length else -1
test?.length ?: -1
- Coroutines
๋์์
- No namespace
- packagename ์ด ์๋ค → ๊ฐ์ ธ๋ค ์ธ ๋ ํท๊ฐ๋ฆด ์ ์์
- No static modifier
- static ์์ฝ์ด๊ฐ ์๋ค
- companion object ๋ก ๋ง๋ค์ด์ผ ํจ
- Final by default
- Java(Open) ๋ ๋ค๋ฅธ์ ์์ ์ฑ vs ์ฑ๋ฅ
Coroutines
- Readable, clean code
- Not exclusive, Cooperative
- Experimental
- Kotlin Way
suspend fun work(): String {
delay(200L)
return "done"
}
fun moreWork(): Deferred<Unit> = async {
print("Work started")
val str = work()
print("Work completed. $str")
}
runBlocking {
moreWork().await()
}
suspend, async, await ๋ง ๋นผ๋ฉด ๋๊ธฐ๊ฐ ๋๋ค.
๋์ tip
- ๊ฐ๋ฐ์ ์์ค ํธ์ฐจ๊ฐ ํฌ๋ค
- ๋ณํ๋ฅผ ์ถ๊ตฌํ๋ ค๋ฉด
- ๊ฐ๊ด์ ์๊ฐ
- History ๋ฐ ํ์ค ์ํฉ์ ๋ํ ์ดํด
- ํ ์กฐ์ง์ ๊ฐ๋ฐ ์ญ๋ ํ๊ฐ
- ๋๊ธฐ๋ถ์ฌ - ํ์์ฑ ์ค๋๋ณด๋ค๋ ์๊ฐํ ์ ์๋๋ก ์๊ทน
- ์ถฉ๋ถํ ํ์ต์๊ฐ
- ๋ณํ ๊ฒฝํ ๊ณต์
- Code Quality ์ค์์ฑ ์ธ์
- ์ฑ๊ณต์ฌ๋ก๋ ์์ ๊ฒ ๋ถํฐ
- ํจ๊ณผ
- Safety, Readable code
- ์ฑ๋ฅํฅ์
- Latency ๊ฐ์, High throughput
- asynchronous/non-blocking ์ ์ฉ ์ฉ์ด
- ์ ์ง๋ณด์์ฑ ํฅ์ → ์ฅ์ ๊ฐ์
Tip
- ๊ธฐ๋ณธ๊ธฐํ์ต - 5์ผ๋ง ํฌ์ํด๋ผ, ์ผ๋จ ์ฝ๋ฉX
- ์ค๋งno Refactoring์ ํ์๋ค
- Coroutines์ ๋ํ ํ์ต ๋ฐ ํ
์คํธ
- ์ด์ฐจํผ ๋น๋๊ธฐ๋ ์ด๋ ต๋ค
- Coroutines๋ ํ๋์ ๋ฐฉ๋ฒ์ผ ๋ฟ์ด๋ค.
๋ฌด๋ ค 2018๋ ์์...์๊ฐ๋ณด๋ค ์์ ๋ถํฐ ์ฝํ๋ง์ ์จ์๊ตฌ๋.. ์ฟ ํก๊ฐ์ ๋จธ๊ธฐ์ ์์๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์๊ฐ๋ณด๋ค ๋ง์ด ์ฐ๋๊ตฌ๋... ๋ณด๋ฉด์ ์ฌ๋ฌ๋ฒ ์ถฉ๊ฒฉ๋ฐ์๋ค๐ซ +์๊ทน
์ด์ ์ Webflux ์ฐ๋ฉด์ Java Reactive API ๋ฅผ ์ฐ๋๊ฒ ์๋ฟ์ง(?) ์์์ ์ด๋ ค์ ๋ ๊ธฐ์ต์ด ์์๋๋ฐ๐ ์ฝํ๋ฆฐ ์ฝ๋ฃจํด๊ณผ ํจ๊ป๋ผ๋ฉด..์ด๋๋ ์ง ๐ฅน ๊ฐ ์ ์,,,,,,์ ๋๊ฒ์ง
์ฝํ๋ฆฐ์ k๋ ์ ๋ชฐ๋๋๋ฐ (์คํฐ๋์์ ์ข ์ข final, immutable ํค์๋๋ฅผ ๋ฃ๊ธด ํ๋ค.) ์ฝํ๋ฆฐ์ด ์ ์ข๊ณ ์ฝ๋ฃจํด์ด ๋ญ์ง๋ ์์ฝ ์ ๋ฆฌํด์ ๋ค์ ๊ธฐ๋ถ์ด๋ค. ์ด๋ฒ์ฃผ ์ํด๋ฆฌ์๋, ํ ์ปจ๋ฒค์ ์ ๋ํด ๋งค๊ฐ๋ณ์์ ๊ผญ final์ ์จ์ค์ผ ํ๋๊ฐ์ ๋ํ ์์,,ํ ๋ก ์ด ์์๋๋ฐ ์ฝํ๋ฆฐ์์๋ final, immutable์ด ๋น์ฐํ๊ฑฐ๋ผ๊ณ ์๊ณ ์๋ค,,,์ฑ๋ฅ์ด ํฌ๊ฒ ๋ฌธ์ ๋์ง ์๋ ์ ์ด๋ผ๋ฉด final ์ฐ๋๊ฒ ์ข๊ฒ ๋ฐ...! ๋ผ๊ณ ์๊ธฐํ๊ณ ์ถ์๋๋ฐ ๊ธฐ์ต์ด ๊ฐ๋ฌผ๊ฐ๋ฌผํด์ ๋ง์ ๋ชปํ๋ ,,, ์์ฉ
'study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
@Transactional(readOnly=true) (0) | 2022.03.16 |
---|---|
[Java] ์์ดํ 5 ์์์ ์ง์ ๋ช ์ํ์ง ๋ง๊ณ ์์กด ๊ฐ์ฒด ์ฃผ์ ์ ์ฌ์ฉํ๋ผ (0) | 2021.05.09 |
[spring boot] mock test (2) | 2021.04.18 |
[spring boot] swagger ์ ์ฉ (0) | 2021.04.06 |