์ซ์ ์๋ฃํ๋ผ๋ฆฌ๋ to์๋ฃํ() ๋ฉ์๋๋ฅผ ํ์ฉํ ์ ์๋ค.
ํ์ง๋ง ๋ฌธ์์ด์ ์ซ์๋ก ๋ณ๊ฒฝํ ๋๋ ๋ณ๋์ ๋ฉ์๋๊ฐ ํ์ํ๋ค.
var num1 = 20
var num2 = 30.2
var num3 = num2.toInt()
var num4 = num1.toDouble()
var strNum5 = "10"
var strNum6 = "10.21"
var num5 = Integer.parseInt(strNum5)
var num6 = strNum6.toDouble()
"์ซ์ ํํ์ ๋ฌธ์์ด"์ ์ซ์๋ก ๋ฐ๊พธ๋ ค๋ฉด
Integer.parseInt(๋ฌธ์์ด)
"์ค์ ํํ์ ๋ฌธ์์ด"์ ์ค์๋ก ๋ฐ๊พธ๋ ค๋ฉด
๋ฌธ์์ด.toDouble()
์์๊ด๊ณ์์ ๊ฐ๋ฅ
๋ถ๋ชจ ํด๋์ค๋ ์์ ํด๋์ค์ ์ ๋ณด๋ฅผ ๋ค ๊ฐ์ง๊ณ ์์ง๋ง ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ์ ๋ณด๋ฅผ ๋ค ๊ฐ์ง๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ๋ค์ด ์บ์คํ ์ ์ค๋ฅ๊ฐ ๋๋ค
if(name is String) { //name์ด String ํ์
์ธ์ง ํ์ธ
println("name์ String ํ์
์
๋๋ค")
} else {
println("name์ String ํ์
์ด ์๋๋๋ค")
}
๋ฉ์๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํดํ๋ค.
ํ์ง๋ง Pair๋ฅผ ํ์ฉํด ๋ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ฆฌํดํ ์ ์๋ค
Triple์ ํ์ฉํ๋ฉด ์ธ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ฆฌํดํ ์ ์๋ค.
var strNum = "10"
var result = strNum?.let {
// ์ค๊ดํธ ์์์๋ it์ผ๋ก ํ์ฉํจ
Integer.parseInt(it)
}
null์ด ์๋ ๋๊ฐ ํ์คํ ๋๋ง ์ฌ์ฉํ๋ผ๊ณ ..?
var alphabets = "abcd"
with(alphabets) { //alphabets์ ํ์คํ null์ด ์๋๋ค
// var result = this.subSequence(0,2)
var result = subSequence(0,2)
println(result)
}
var student = Student("์ฐธ์", 10)
var result = student?.also {
it.age = 50
}
var student = Student("์ฐธ์", 10)
var result = student?.apply {
student.age = 50
}
Q.also์ apply์ ์ฐจ์ด์
1)๊ฐ์ฒด์์ ํธ์ถํ์ง ์์ ๋
2)๊ฐ์ฒด์์ ํธ์ถํ ๋
:with์ ๋ฌ๋ฆฌ null์ฒดํฌ๋ฅผ ์ํํ ์ ์์ผ๋ฏ๋ก ๋์ฑ ์์ ํ๊ฒ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
->with๋ณด๋ค๋ run์ ์ฌ์ฉํด์ null์ฒดํฌ์ ์์ ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒ
var totalPrice = run {
var computer = 10000
var mouse = 5000
computer+mouse
}
์์ ๊ฐ์ฒด์ ๋๋คํจ์๊ฐ์ ๊ธด๋ฐํ ๊ด๊ณ๊ฐ ์กด์ฌํ๋ค
์ธ๋ถ์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค
์ํ๋ ๋ฉ์๋๊ฐ ์์ง๋ง ๋ด๊ฐ ์ค๊ณํ ํด๋์ค๊ฐ ์๋ ๋ ์ธ๋ถ์์ ๋ฉ์๋๋ฅผ
๊ด๋ฆฌํ๋ค
1. ์์ ๋ค์ด๋ก๋
2. ๋ฉ์ผ ์ ์ก
3. ์๋ฆผ
์์ 3๊ฐ์ ์์ ์ ์์ฐจ์ ์ผ๋ก ์งํํ๋ค๊ณ ํ์ ๋(๋๊ธฐ) ๋ค๋ฅธ ์์ ์ ํ์ง ๋ชปํ๊ณ ์ฑ์ด ๋ฉ์ถ๋ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์
๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์คํํ๋ฉด ์ฌ๋ฌ ๊ฐ์ง์ ๋ก์ง๋ค์ด ์๋ฃ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋์์ ์คํํ ์ ์๋ค.
๋๊ธฐ์ ํ๋ก๊ทธ๋๋ฐ : ์์
์ ์์๋๋ก ํ๋์ฉ ์ํํ๋ ํ์
๊ผญ ๋๊ธฐ์ ์ผ๋ก ์คํํ์ง ์์๋ ๋๋ ๊ธฐ๋ฅ์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํ๋ ๊ฒ ์ข์
์ฐ๋ ๋ : ๋ก์ง์ ๋์์ ์คํํ ์ ์๋๋ก ๋์์ค
์ฐ๋ฆฌ๋ ์ด๋๊น์ง fun main์ด๋ผ๋ ๋ฉ์ธ ์ฐ๋ ๋ ์์์ ๋ก์ง์ ์คํํ๊ธฐ ๋๋ฌธ์ ๋์์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง ๋ณ๋์ ์์ ์ฐ๋ ๋๋ฅผ ์์ฑํ๋ฉด ๋์์ ๋ก์ง์ ์คํํ ์ ์๋ค.
์ฝํ๋ฆฐ์ thread ํค์๋๋ก ์ฐ๋ ๋๋ฅผ ์์ฑํ ์ ์๋ค
ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์ ์คํ๋๋ ๊ฒ์ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋๋ฐ ์ฐ๋ ๋๋ ์ด ํ๋ก์ธ์ค๋ณด๋ค ๋ ์์ ๋จ์์ด๋ค.
ํ๋ก์ธ์ค ์์๋ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๊ฐ ์กด์ฌํ ์ ์๋๋ฐ ์ต์ 1๊ฐ์ ๋ฉ์ธ ์ฐ๋ ๋๊ฐ ์กด์ฌํ๋ค.
์ฐ๋ ๋๋ ํ๋ก์ธ์ค ์์์ ๊ฐ๊ฐ์ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ stack์ ๊ฐ์ง
๋ ์ฐ๋ ๋๊ฐ ๋์์ ์ฒ๋ฆฌ๋๋ค. ๋์์ ์ฒ๋ฆฌ๋๋ค๋ ๊ฒ์ ํ๋์ CPU ์์์ ๊ฒฝ์ํ๋ค.
->๊ทธ๋์ ๋๋ค์ฑ์ ๊ฐ์ง
1. ์ฝ๋ฃจํด์ ์ฌ์ฉ
2. dependency ์ถ๊ฐ ํ
3. import kotlin.concurrent.thread
Q. ์ฐ๋ ๋๋ผ๋ฆฌ์ ์์๋ ๋ณด์ฅ๋์ง ์์.
์คํํ ๋๋ง๋ค ๋ฌ๋ผ์ง ์ ์์. ???????????????????????
๋จผ์ CPU์ ์ ๊ทผํ ์ฐ๋ ๋๊ฐ ์์์ ํ ๋น๋ฐ์
Q. ์ฝ๋ฃจํด??????????????
์ฐ๋ ๋๋ฅผ ์ฌ๋ฌ๊ฐ ์จ์ผ ํ๋๋ฐ ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐฉ์์ธ๊ฐ???
Q. ์ ์ฐ๋ ๋ํ๊ณ ์ฝ๋ฃจํด์ ๋ค๋ฅธ๊ฑด๊ฐ????
์ฐ๋ ๋๋ณด๋ค ๋์ฑ ๊ฒฝ๋ํ๋ ๋์์ฒ๋ฆฌ ๊ธฐ๋ฅ์ธ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๊ฒ ํด์ค
๋ก์ง๋ค์ ํ๋ํด์ ์คํํ์๋ ๊ฒ ๋ชฉํ์ด๊ณ ๊ตฌ๊ธ์์ ์ ๊ทน ๊ถ์ฅ
์ฝ๋ฃจํด์ ๋น๋์ ํจ๊ป ์ฌ์ฉ
launch(๊ฒฐ๊ณผ๊ฐX)์ async(๊ฒฐ๊ณผ๊ฐO) ๋น๋๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
์ฝ๋ฃจํด์ ์ค์ฝํ๋ก ๋ฒ์๋ฅผ ์ง์ ํ ์ ์๋ค
GlobalScope : ์ฑ์ด ์คํ๋ ์ดํ์ ๊ณ์ ์ํ๋์ด์ผ ํ ๋ ์ฌ์ฉ
CoroutineScope : ํ์ํ ๋๋ง ์์ฑํ๊ณ ์ฌ์ฉํ์ ์ ๋ฆฌ๊ฐ ํ์!
ํ๋์ ์ฐ๋ ๋ ์์์ ์ฌ๋ฌ ์ฝ๋ฃจํด์ผ๋ก ๋๋ ์
Q.ํ๋ก์ธ์ค๋ฅผ ์ฐ๋ ๋๋ก ๋๋๋ ๊ฑฐ๋ ๊ฐ์ ์๋ฆฌ์ธ๊ฐ????????
๋คํธ์ํฌ๋ ๋์คํฌ ์์ (๋ฐฑ๊ทธ๋ผ์ด๋)์ ํ๋ค๊ฐ UI ์์ ์ ํด์ผํ ๋๊ฐ ์๋๋ฐ ์ด๋ ๊ฒ Dispatcher ๊ฐ์ ๋ณํ์ ํด์ผ ํ ๋ withContext๋ฅผ ์ฌ์ฉ
์๋๋ก์ด๋ ์ฑ์์๋ ํญ์ ํ๋ฉด์ด ๋์์ ธ์๊ธฐ ๋๋ฌธ์ ๋ฉ์ธ์ฐ๋ ๋๊ฐ ๋๋์ง ์๋๋ฐ ์ค์ตํ๊ฒฝ์ ์คํ ํ ์ข ๋ฃ๋๋ JVMํ๊ฒฝ์ด๊ธฐ ๋๋ฌธ์ ์ผ๋งค๋ก join์ ์ถ๊ฐํด์คฌ๋ค.
Q. ์ด๋ค ์ฝ๋ฃจํด ์ค์ฝํ??? ๊ทธ๋ฅ GlobalScope??????????
var job = GlobalScope.launch {
delay(3000)
println("์ฌ๊ธฐ๋ ์ฝ๋ฃจํด...")
}
-๋ค๋ฅธ ์ฝ๋ฃจํด ์ค์ฝํ
var job = CoroutineScope(Dispatchers.Default).launch {
delay(3000)
println("์ฌ๊ธฐ๋ ์ฝ๋ฃจํด...")
}
์ฝ๋ฃจํด์ ์ฐ๋ ๋๋ณด๋ค ๊ฐ๋ฒผ์
์ฐ๋ ๋์ ์ฝ๋ฃจํด ๋ ๋ค ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ๊ธฐ์ ์ด๋ค
๋์์ฑ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ ์ปจํ
์คํธ ์ค์์นญ์ด ์ค์ํ ๊ฐ๋
์ด๋ค.
: ์์
ํ๋ํ๋์ ๋จ์ :ย Thread
๋์์ฑ ๋ณด์ฅ ์๋จ :ย Context Switching
์ด์์ฒด์ ์ปค๋์ ์ํย Context Switchingย ์ ํตํด ๋์์ฑ์ ๋ณด์ฅ
Blocking
: ์์
ํ๋ํ๋์ ๋จ์ :ย Coroutine Object
๋์์ฑ ๋ณด์ฅ ์๋จ :ย Programmer Switching (No-Context Switching)
์์ค ์ฝ๋๋ฅผ ํตํดย Switchingย ์์ ์ย ๋ง์๋๋กย ์ ํด์ (OS๋ ๊ด์ฌํ์ง ์์์)
Suspendย (Non-Blocking)
ํ๋์ ์ฐ๋ ๋์์ ์ฌ๋ฌ Task Object๋ค์ ๋์์ ์ํ
ํ๋์ ์ฐ๋ ๋์์ ๋ค์์ ์ฝ๋ฃจํด์ ์ํํ ์ ์์ด์
์ฐ๋ ๋๋ ์ฝ๋ฃจํด์ ๊ฐ์์ ๋ฐฉ๋ฒ์ผ๋ก ๋์์ฑ์ ๋ณด์ฅํ๋ ๊ธฐ์ ์ด๋ค
์ฝ๋ฃจํด์ ํ๋์ ์ฐ๋ ๋๋ฅผ ๋์ฑ ์๊ฒ ์ชผ๊ฐ์ ์ฌ์ฉํ๋ ๊ธฐ์
์ฝ๋ฃจํด์ ์ฐ๋ ๋๋ณด๋ค CPU ์์์ ์ ์ฝํ๊ธฐ ๋๋ฌธ์ Light-Weight Thread๋ผ๊ณ ๋ถ๋ฆผ