๐Ÿ”ฅTIL๐Ÿ”ฅ์ŠคํŒŒ๋ฅดํƒ€ | ๋น„๋™๊ธฐ

hyihyiยท2023๋…„ 12์›” 8์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
15/69
post-thumbnail

์ž๋ฃŒํ˜• ๊ฐ„์˜ ๋ณ€ํ™˜

์ผ๋ฐ˜ ์ž๋ฃŒํ˜•๊ฐ„์˜ ๋ณ€ํ™˜

์ˆซ์ž ์ž๋ฃŒํ˜•๋ผ๋ฆฌ๋Š” 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()

๊ฐ์ฒด ์ž๋ฃŒํ˜•๊ฐ„์˜ ๋ณ€ํ™˜

์ƒ์†๊ด€๊ณ„์—์„œ ๊ฐ€๋Šฅ

์—… ์บ์ŠคํŒ… : ์ž์‹ ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ

๋‹ค์šด ์บ์ŠคํŒ… : ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ž์‹ ํด๋ž˜์Šค์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑ

๋ถ€๋ชจ ํด๋ž˜์Šค๋Š” ์ž์‹ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ •๋ณด๋ฅผ ๋‹ค ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์šด ์บ์ŠคํŒ…์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค

์ž๋ฃŒํ˜• ํƒ€์ž… ํ™•์ธ

is ํ‚ค์›Œ๋“œ

if(name is String) { //name์ด String ํƒ€์ž…์ธ์ง€ ํ™•์ธ
    println("name์€ String ํƒ€์ž…์ž…๋‹ˆ๋‹ค")
} else {
    println("name์€ String ํƒ€์ž…์ด ์•„๋‹™๋‹ˆ๋‹ค")
}

์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค ๋ฆฌํ„ด

๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
ํ•˜์ง€๋งŒ Pair๋ฅผ ํ™œ์šฉํ•ด ๋‘ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๋‹ค
Triple์„ ํ™œ์šฉํ•˜๋ฉด ์„ธ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๊ธฐ ์ž์‹ ์˜ ๊ฐ์ฒด ์ „๋‹ฌ

let : ๋‚ด ๊ฐ์ฒด๋ฅผ it์œผ๋กœ ๋„˜๊ฒจ์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฆฌํ„ดํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์”€

var strNum = "10"
var result = strNum?.let {
     // ์ค‘๊ด„ํ˜ธ ์•ˆ์—์„œ๋Š” it์œผ๋กœ ํ™œ์šฉํ•จ
     Integer.parseInt(it)
}

with : this๋กœ ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ƒ๋žต๊ฐ€๋Šฅํ•ด์„œ null์ด ์•„๋‹˜์ด ํ™•์‹คํ•  ๋•Œ๋งŒ ์“ฐ์ž

null์ด ์•„๋‹ ๋•Œ๊ฐ€ ํ™•์‹คํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋ผ๊ณ ..?

var alphabets = "abcd"

with(alphabets) { //alphabets์€ ํ™•์‹คํžˆ null์ด ์•„๋‹ˆ๋‹ค
//      var result = this.subSequence(0,2)
    var result = subSequence(0,2)
    println(result)
}

also : it์— ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค

var student = Student("์ฐธ์ƒˆ", 10)

var result = student?.also {
    it.age = 50
}

apply : this๋กœ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ฃผ๋กœ ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๊ณ  ๋ฐ”๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

var student = Student("์ฐธ์ƒˆ", 10)

var result = student?.apply {
    student.age = 50
}

Q.also์™€ apply์˜ ์ฐจ์ด์ 

run : ์ž„์‹œ๋กœ ์ค‘๊ด„ํ˜ธ ์˜์—ญ์„ ๋งŒ๋“ฆ

1)๊ฐ์ฒด์—์„œ ํ˜ธ์ถœํ•˜์ง€ ์•Š์„ ๋•Œ
2)๊ฐ์ฒด์—์„œ ํ˜ธ์ถœํ•  ๋•Œ
:with์™€ ๋‹ฌ๋ฆฌ null์ฒดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋”์šฑ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

->with๋ณด๋‹ค๋Š” run์„ ์‚ฌ์šฉํ•ด์„œ null์ฒดํฌ์— ์•ˆ์ •์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœ

var totalPrice = run {
    var computer = 10000
    var mouse = 5000

    computer+mouse
}

Scope Function

์ˆ˜์‹ ๊ฐ์ฒด์™€ ๋žŒ๋‹คํ•จ์ˆ˜๊ฐ„์˜ ๊ธด๋ฐ€ํ•œ ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค

ํ™•์žฅ ํ•จ์ˆ˜

์™ธ๋ถ€์—์„œ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค
์›ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์ง€๋งŒ ๋‚ด๊ฐ€ ์„ค๊ณ„ํ•œ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ ๋•Œ ์™ธ๋ถ€์—์„œ ๋ฉ”์†Œ๋“œ๋ฅผ
๊ด€๋ฆฌํ•œ๋‹ค

๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

1. ์˜์ƒ ๋‹ค์šด๋กœ๋“œ 
2. ๋ฉ”์ผ ์ „์†ก 
3. ์•Œ๋ฆผ

์œ„์˜ 3๊ฐœ์˜ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ(๋™๊ธฐ) ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์•ฑ์ด ๋ฉˆ์ถ”๋Š” ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€์˜ ๋กœ์ง๋“ค์ด ์™„๋ฃŒ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋™๊ธฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ์ž‘์—…์„ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜์”ฉ ์ˆ˜ํ–‰ํ•˜๋Š” ํ–‰์œ„
๊ผญ ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ธฐ๋Šฅ์€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒŒ ์ข‹์Œ

๋™๊ธฐ : ์š”์ฒญ ๋ณด๋‚ด๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ์ž‘์—…์„ ๋ฉˆ์ถค, ์ž‘์—…์„ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌ

๋น„๋™๊ธฐ : ์š”์ฒญ ๋ณด๋‚ด๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋˜ ๋‹ค๋ฅธ ์ผ์„ ์ˆ˜ํ–‰, ๋‹ค์–‘ํ•œ ์ผ์„ ํ•œ๊บผ๋ฒˆ์— ์ˆ˜ํ–‰

์“ฐ๋ ˆ๋“œ

์“ฐ๋ ˆ๋“œ : ๋กœ์ง์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ

์šฐ๋ฆฌ๋Š” ์ด๋•Œ๊นŒ์ง€ fun main์ด๋ผ๋Š” ๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ ์œ„์—์„œ ๋กœ์ง์„ ์‹คํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์‹œ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ณ„๋„์˜ ์ž์‹ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋™์‹œ์— ๋กœ์ง์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ฝ”ํ‹€๋ฆฐ์€ thread ํ‚ค์›Œ๋“œ๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค

ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์“ฐ๋ ˆ๋“œ๋Š” ์ด ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๋” ์ž‘์€ ๋‹จ์œ„์ด๋‹ค.

ํ”„๋กœ์„ธ์Šค ์•ˆ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ตœ์†Œ 1๊ฐœ์˜ ๋ฉ”์ธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ๊ฐ๊ฐ์˜ ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ stack์„ ๊ฐ€์ง

๋‘ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ฒ˜๋ฆฌ๋œ๋‹ค. ๋™์‹œ์— ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ CPU ์ž์›์„ ๊ฒฝ์Ÿํ•œ๋‹ค.
->๊ทธ๋ž˜์„œ ๋žœ๋ค์„ฑ์„ ๊ฐ€์ง

1. ์ฝ”๋ฃจํ‹ด์„ ์‚ฌ์šฉ
2. dependency ์ถ”๊ฐ€ ํ›„
3. import kotlin.concurrent.thread

Q. ์“ฐ๋ ˆ๋“œ๋ผ๋ฆฌ์˜ ์ˆœ์„œ๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š์Œ.
์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ. ???????????????????????
๋จผ์ € CPU์— ์ ‘๊ทผํ•œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ž์›์„ ํ• ๋‹น๋ฐ›์Œ

Q. ์ฝ”๋ฃจํ‹ด??????????????
์“ฐ๋ ˆ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์จ์•ผ ํ•˜๋Š”๋ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์ธ๊ฐ€???

Q. ์•„ ์“ฐ๋ ˆ๋“œํ•˜๊ณ  ์ฝ”๋ฃจํ‹ด์€ ๋‹ค๋ฅธ๊ฑด๊ฐ€????

์ฝ”๋ฃจํ‹ด

์“ฐ๋ ˆ๋“œ๋ณด๋‹ค ๋”์šฑ ๊ฒฝ๋Ÿ‰ํ™”๋œ ๋™์‹œ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์ธ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
๋กœ์ง๋“ค์„ ํ˜‘๋™ํ•ด์„œ ์‹คํ–‰ํ•˜์ž๋Š” ๊ฒŒ ๋ชฉํ‘œ์ด๊ณ  ๊ตฌ๊ธ€์—์„œ ์ ๊ทน ๊ถŒ์žฅ

launch, async

์ฝ”๋ฃจํ‹ด์€ ๋นŒ๋”์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ
launch(๊ฒฐ๊ณผ๊ฐ’X)์™€ async(๊ฒฐ๊ณผ๊ฐ’O) ๋นŒ๋”๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ

GlobalScope, CoroutineScope

์ฝ”๋ฃจํ‹ด์€ ์Šค์ฝ”ํ”„๋กœ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค
GlobalScope : ์•ฑ์ด ์‹คํ–‰๋œ ์ดํ›„์— ๊ณ„์† ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ
CoroutineScope : ํ•„์š”ํ•  ๋•Œ๋งŒ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ›„์— ์ •๋ฆฌ๊ฐ€ ํ•„์š”!

ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ์ฝ”๋ฃจํ‹ด์œผ๋กœ ๋‚˜๋ˆ ์”€
Q.ํ”„๋กœ์„ธ์Šค๋ฅผ ์“ฐ๋ ˆ๋“œ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฑฐ๋ž‘ ๊ฐ™์€ ์›๋ฆฌ์ธ๊ฐ€????????

withContext

๋„คํŠธ์›Œํฌ๋‚˜ ๋””์Šคํฌ ์ž‘์—…(๋ฐฑ๊ทธ๋ผ์šด๋“œ)์„ ํ•˜๋‹ค๊ฐ€ 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๋ผ๊ณ  ๋ถˆ๋ฆผ

profile
์ž์œ ๋กญ๊ฒŒ ์“ด ๋‚˜์˜ ์ž์œ ๋กœ์šด Development voyageโ›ต

0๊ฐœ์˜ ๋Œ“๊ธ€