๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค2024 ์•ˆ๋“œ๋กœ์ด๋“œ/โ˜€๏ธ ํ•˜๊ณ„ ์ธํ„ด ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ก

var๊ณผ val์˜ ์ฐจ์ด๋ฅผ ์•„์‹œ๋‚˜์š”?

by hyeonha 2024. 9. 10.

๋ชฉ์ฐจ

    ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—

    ์ฝ”๋“œ๋ฅผ ์งˆ๋ฌธํ•˜๋‹ค๊ฐ€ ์™œ var๋กœ ์„ ์–ธํ–ˆ๋ƒ๋Š” ์งˆ๋ฌธ์„ ๋ฐ›์•˜๋‹ค.

    ๋‚˜๋Š” ๊ฐ’์„ ๊ณ„์† ๋ณ€๊ฒฝํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— var๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„ ์–ธํ–ˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ์•„๋‹ˆ์—ˆ๋‹ค!!!!

    ๊ทธ๋™์•ˆ ํ—ท๊ฐˆ๋ฆฌ๋˜ val๊ณผ var์— ๋Œ€ํ•ด ๋‹จ์ˆœํžˆ val์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€, var์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์ด๋ผ๊ณ ๋งŒ ์•„๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ œ๋Œ€๋กœ ์•Œ๊ธฐ์œ„ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณด์•˜๋‹ค.

     

     val

    • ์ดˆ๊ธฐํ™” ํ›„ ๊ฐ’ ๋ณ€๊ฒฝ์€ ๋ถˆ๊ฐ€๋Šฅ
    • ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด์˜ ๋‚ด๋ถ€๊ฐ’ ๋ณ€๊ฒฝ์€ ๊ฐ€๋Šฅ
    ์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ด์•ผ??!
    // โŒ  ์ด๋ฏธ ๊ฐ’์„ ํ• ๋‹นํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ๊ฐ’ ํ• ๋‹น ๋ถˆ๊ฐ€, ์ฆ‰ ๋šฑ์€ ๋šฑํ”ผ๋‹ค
    val ddoung = "ddongpi"
    ddoung = "no ddongpi"
    
    // ๐Ÿ™†‍โ™€๏ธ ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ฐ’์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ 
    val ddoung = arrayListOf("Bara")
    ddoung.add("ddung")
    
     /*
        ๋น„์ฝ˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•œ flow ๋ณ€์ˆ˜
     */
     
     private val _beaconData =  MutableStateFlow<List<BeaconsData>>(
       emptyList()
     )
    
     val beaconData : StateFlow<List<BeaconsData>> = _beaconData.asStateFlow()
    

     

     

    ์—ฌ๊ธฐ์„œ๋Š” ์™œ _beaconData๋ฅผ val๋กœ ์„ ์–ธํ•ด๋„ ๋˜๋Š” ๊ฑธ๊นŒ?

     

    ์ฐธ์กฐ์˜ ๋ถˆ๋ณ€์„ฑ

    1. val๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์ฐธ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค.
    2. ์ฆ‰ __beaconData๋Š” ํ•ญ์ƒ ๋™์ผํ•œ MutableStateFlow ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    ์–ด ๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” _beaconData์˜ ๊ฐ’์„ ๊ณ„์† ์—…๋ฐ์ดํŠธํ•ด์ฃผ์—ˆ๋Š”๋ฐ??
    1. MutableStateFlow๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š”(Mutable)ํ•œ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. MutableStateFlow์˜ ๋™์ž‘ ๋ฐฉ์‹
      1. ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ value ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
      2. ์ƒˆ๋กœ์šด ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ ์‹ค์ œ๋กœ๋Š” ์ƒˆ๋กœ์šด MutableStateFlow ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ธฐ์กด ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.!!

    ์ฆ‰ val๋กœ ์„ ์–ธ ์‹œ ์ฐธ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฐธ์กฐํ•˜๋Š” ๊ฐœ์ฒด์˜ ๋‚ด์šฉ์€ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    var

    ๊ทธ๋ ‡๋‹ค๋ฉด var์€ ์ฐธ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋‹ค.

    // ๐Ÿ™†‍โ™€๏ธ ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ๊ฐ’์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ 
    val ddoung = arrayListOf("Bara")
    ddoung.add("ddung")
    
    //  ๐Ÿ™†‍โ™€๏ธ ์ด๋ฏธ ๊ฐ’์„ ํ• ๋‹นํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ๊ฐ’ ํ• ๋‹น ๊ฐ€๋Šฅ, ์ฆ‰ ๋šฑ์€ ๋˜ฅํ”ผ๊ฐ€ ์•„๋‹ˆ๋‹ค..
    val ddoung = "ddongpi"
    ddoung = "no ddongpi"
    

     

    ๐Ÿ˜ฆ ๊ทธ๋Ÿฌ๋ฉด
    ๋ฌธ์ž์—ด์ด ์–ด๋–ป๊ฒŒ , ์–ด๋””์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด๊ณ 
    ํ• ๋‹น์€ ์–ด๋–ป๊ฒŒ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์ด๋ฉฐ,
    ํ• ๋‹น์ด ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š” ๊ฑธ๊นŒ?

     

    - ๋ฌธ์ž์—ด ํ’€ : JVM์—์„œ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŠน์ˆ˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

    ๋งŒ์•ฝ ์ฝ”๋“œ์— "no ddongpi”์™€ ๊ฐ™์€ ๋ฌธ์ž์—ด์ด ์‚ฌ์šฉ๋˜๋ฉด JVM์€ ๋ฌธ์ž์—ด ํ’€์— ๋™์ผํ•œ ๋ฌธ์ž์—ด์ด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ง€ ํ™•์ธํ•œ๋‹ค.

     

    ๋งŒ์•ฝ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ → ๊ธฐ์กด ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์žฌ์‚ฌ์šฉ๋จ

    ๋งŒ์•ฝ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ → JVM์€ ๋ฌธ์ž์—ด ํ’€์— ์ƒˆ ๋ฌธ์ž์—ด ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

    ์ด ๊ธฐ์ˆ ์„ ๋ฌธ์ž์—ด ์ธํ„ฐ๋‹์ด๋ผ๊ณ  ํ•จ!

     

    (์‹ ๊ธฐํ•˜๋‹น...)

     

    ๋‹ค์‹œ ์•„๊นŒ ์˜ˆ์‹œ๋กœ ๋Œ์•„๊ฐ€๋ฉด

    val ddoung = "ddongpi"
    ddoung = "no ddongpi"
    

     

    ์—ฌ๊ธฐ์„œ val ddoung = "ddongpi" ๋ฅผ ํ†ตํ•ด ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ์ž์—ด ddongpi ๊ฐ€ ์ƒ์„ฑ๋จ.

     

    JVM์€ ๋ฌธ์ž์—ด ํ’€์„ ๊ฒ€์‚ฌํ•˜์—ฌ ddongpi ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

    ๋งŒ์•ฝ ์—†๋‹ค๋ฉด “ddongpi" ๋ฅผ ๋ฌธ์ž์—ด ํ’€์— ์ถ”๊ฐ€ํ•œ๋‹ค.

    ๊ทธ๋Ÿผ ์ด์ œ ddoung ๋ณ€์ˆ˜๋Š” ddongpi ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๋ณด์œ ํ•œ๋‹ค.

     

    ์žฌํ• ๋‹น ddoung = "no ddongpi" ์—์„œ๋Š” JVM์€ ๋ฌธ์ž์—ด ํ’€์— "no ddongpi" ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์ง€ ํ™•์ธํ•œ๋‹ค.

    ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ƒ์„ฑ๋˜์–ด ํ’€์— ์ €์žฅ๋œ๋‹ค.

     

    ddoung ์ด ๋ณด์œ ํ•œ ์ฐธ์กฐ๊ฐ€ no ddongpi ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ณ€๊ฒฝ๋˜์–ด์„œ ์ด์ œ ddoung ๋Š” ddongpi ์—์„œ ๋ฒ—์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.!!

     

    ๋น ๋ฐค ์—„์ฒญ๋‚˜๋‹ค..!

     

    ๊ต‰์žฅํ•ด ์—„์ฒญ๋‚˜!!!

     

     

    ๊ทธ๋Ÿฌ๋ฉด ํ• ๋‹น์€ ๋ญ˜ ์˜๋ฏธํ•˜๋‚˜?
    • ์ฐธ์กฐ
      • ddoung์€ ๋ฌธ์ž์—ด ํ’€์˜ ๋ฌธ์ž์—ด ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๋ณด์œ 
      • ๋ฌธ์ž์—ด ์ž์ฒด๋ฅผ ๋ณด์œ ํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ๋ฌธ์ž์—ด์˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋งŒ ๋ณด์œ (์ฃผ์†Œ)
    • ๋ณ€์ˆ˜ ์žฌํ• ๋‹น
      • ๋ณ€์ˆ˜๋ฅผ ์žฌํ• ๋‹นํ•˜๋ฉด(ddoung = "no ddongpi") ์ฐธ์กฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์–ด ์ƒˆ ๋ฌธ์ž์—ด์ด ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹ค๋ฅธ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋จ

     

     

    ๊ทธ๋™์•ˆ ๊ณ„์† val๊ณผ var์˜ ์ฐจ์ด๊ฐ€ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ ๋“œ๋””์–ด ์ดํ•ดํ•œ ๊ฒƒ ๊ฐ™๋‹ค!

     

    728x90