ariedaze
์‚ฌ๊ณผ๋†์žฅ
ariedaze
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (18)
    • IOS (6)
    • Swift (5)
    • WWDC (2)
    • Combine (4)
    • ์น˜ํƒ€ํ• ๊ฐœ๋ฐœ์ผ๊ธฐ (1)
    • FOREST (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

  • ์‚ฌ๊ณผ๋†์žฅ์— ์˜ค์‹ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค๐Ÿฅณ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ios
  • ์•ฑ๊ฐœ๋ฐœ
  • iOS์•ฑ
  • ๊ฐœ๋ฐœ
  • Apple
  • iOS์•ฑ๊ฐœ๋ฐœ
  • swift
  • async
  • await
  • combine
  • ์น˜ํƒ€ํ•
  • cheetahfit
  • ์ƒˆ์‹น
  • WWDC
  • Swfit
  • WWDC21
  • swft

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
ariedaze

์‚ฌ๊ณผ๋†์žฅ

Swift | ์ฝ”์ฝ”์•„ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ชจ๋ธ, ARC
Swift

Swift | ์ฝ”์ฝ”์•„ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ชจ๋ธ, ARC

2021. 8. 31. 22:23

๐Ÿ”– ์ฝ”์ฝ”์•„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ชจ๋ธ

Stack์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน๋ณ„ํ•œ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”์—†๋‹ค. ํ•˜์ง€๋งŒ Heap์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์€ ์‹œ์ ์— ์ง์ ‘ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ชจ๋ธ์€ ํž™์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•˜๋ฉด ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ์–ธ๊ธ‰ํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋Š” ๋ชจ๋‘ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ์ด๋‹ค.
Objective-C๋Š” MRC, ARC, Swift๋Š” Objective-C์™€ ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ชจ๋ธ์ธ ARC๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ด€๋ฆฌ๋ชจ๋ธ์ด ์–ธ์–ด์— ์†ํ•˜๋Š” ๊ฑด ์•„๋‹ˆ๊ณ  ์• ํ”Œ์ด ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ธ ์ฝ”์ฝ”์•„์— ์†ํ•ด์žˆ๋‹ค๊ณ  ๋ณด๋Š” ๊ฒƒ์ด ์ •ํ™•ํ•˜๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ชจ๋ธ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์†Œ์œ  ์ •์ฑ…(Ownership Policy) ์™€ ์ฐธ์กฐ ์นด์šดํŠธ(Reference Count) ๋ฅผ ๋จผ์ € ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. ์ธ์Šคํ„ด์Šค๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์†Œ์œ ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์†Œ์œ ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์ œ๊ฑฐ ์‹œ์ ์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์†Œ์œ ์ž ์ˆ˜๋ฅผ ํŒŒ์•…ํ•˜๋Š”๋ฐ ์ด๊ฒƒ์„ ์ฐธ์กฐ์นด์šดํŠธ๋ผ๊ณ  ํ•œ๋‹ค. ์ฆ‰, ์ฐธ์กฐ์นด์šดํŠธ๊ฐ€ 1์ด์ƒ์ด๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์œ ์ง€๋˜๊ณ  0์ด๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ๋œ๋‹ค. ์†Œ์œ ์ž๊ฐ€ retain ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์†Œ์œ ๊ถŒ์„ ์–ป์œผ๋ฉด ์ฐธ์กฐ์นด์šดํŠธ๊ฐ€ +1์ด ๋˜๊ณ , release ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์†Œ์œ ๊ถŒ์„ ํฌ๊ธฐํ•˜๋ฉด ์ฐธ์กฐ์นด์šดํŠธ๊ฐ€ -1์ด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฐธ์กฐ์นด์šดํŠธ๊ฐ€ 0์ด๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฆ‰์‹œ ์ œ๊ฑฐ๋œ๋‹ค.

๐Ÿ’ฟ MRC(Manual Reference Counting)

MRC ๋ชจ๋ธ์—์„œ๋Š” ์†Œ์œ ์ •์ฑ…๊ณผ ๊ด€๋ จ๋œ ๋ชจ๋ธ์„ ์ง์ ‘ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์†Œ์œ  ์ •์ฑ…์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋งค์šฐ!! ์–ด๋ ต๋‹ค. ARC์— ๋น„ํ•ด ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ํ™•๋ฅ ๋„ ๋†’๋‹ค. ๊ทธ๋ž˜์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ „์„ฑ์ด ๋‚ฎ์•„์ง€๊ณ  ๋””๋ฒ„๊น…์ด ์–ด๋ ค์›Œ์ง„๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ๋กœ ARC๊ฐ€ ๋„์ž…๋˜์—ˆ๋‹ค. ARC(Automatic Reference Counting) ์ด๋ฆ„์—์„œ ์ฒ˜๋Ÿผ ์ž๋™์œผ๋กœ ์†Œ์œ  ์ •์ฑ…์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๐Ÿ’ฟ ARC(Automatic Reference Counting)

์†Œ์œ  ์ •์ฑ…๊ณผ ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์€ MRC์™€ ๋™์ผํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ „์„ฑ๋„ ๋†’์•„์ง€๊ฒŒ ๋œ๋‹ค. Objective-C๋Š” MRC, ARC ๋‘˜ ๋‹ค ์ง€์›ํ•˜์ง€๋งŒ ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด ARC๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

 

์šฐ์„  ๊ฐ•ํ•œ ์ฐธ์กฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.
๊ธฐ๋ณธ์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค์™€ ์†Œ์œ ์ž๋Š” ๊ฐ•ํ•œ ์ฐธ์กฐ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค. ๋‹ค์‹œ ์ •๋ฆฌํ•˜์ž๋ฉด ๋Œ€์ƒ์„ ์†Œ์œ ํ•  ๋•Œ๋งˆ๋‹ค ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ณ  ์†Œ์œ ๋ฅผ ํฌ๊ธฐํ•  ๋•Œ๋งˆ๋‹ค ์ฐธ์กฐ ์นด์šดํŠธ๊ฐ€ 1์”ฉ ๊ฐ์†Œํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  0์ด ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ธ์Šคํ„ด์Šค๋Š” ์ œ๊ฑฐ๋œ๋‹ค.

class Person {
	var name = "Ahyeon"
	deinit {
		print("person deinit")
	}

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

var person1: Person?
var person2: Person?
var person3: Person?

person1 = Person()
person2 = person1
person3 = person1

 

 

person1, person2, person3๊ฐ€ Person Instance์™€ ๊ฐ•ํ•œ ์ฐธ์กฐ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.
์•ž์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์†Œ์œ ํ•  ๋•Œ retain ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ฝ”๋“œ์—” ์—†๋‹ค. Swift์—์„œ๋Š” ARC๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•œ ํ›„ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

person1 = nil
person2 = nil

 

 

 

์ด๋ฒˆ์—๋Š” person1, person2 ๋ณ€์ˆ˜์— nil์„ ์ €์žฅํ–ˆ๋‹ค. nil์„ ์ €์žฅํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์†Œ์œ ๊ถŒ์„ ํฌ๊ธฐํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๊ณ  ์†Œ์œ ๊ถŒ์„ ํฌ๊ธฐํ•˜๋ฉด ์ฆ‰์‹œ ๊ฐ•ํ•œ ์ฐธ์กฐ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  ์ฐธ์กฐ์นด์šดํŠธ๊ฐ€ 1์”ฉ ๊ฐ์†Œํ•œ๋‹ค.

person3 = nil

์ด์ œ ๋งˆ์ง€๋ง‰์œผ๋กœ person3 ๋ณ€์ˆ˜์— nil์„ ์ €์žฅํ•ด๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด ๋งˆ์ง€๋ง‰ ์†Œ์œ ๊ถŒ์ž์˜€๋˜ person3์ด ์†Œ์œ ๊ถŒ์„ ํฌ๊ธฐํ•˜๋ฉฐ ์ฐธ์กฐ์นด์šดํŠธ๊ฐ€ 0์ด ๋˜๊ณ  ์ด ์‹œ์ ์— ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์†Œ๋ฉธ๋œ๋‹ค. ๋”ฐ๋ผ์„œ deinit()์ด ํ˜ธ์ถœ๋˜๊ณ  person deinit ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Swift | Array capacity, reserveCapacity  (3) 2021.10.20
Swift | ๊ฐ•ํ•œ ์ฐธ์กฐ์™€ ์•ฝํ•œ ์ฐธ์กฐ! ์ˆœํ™˜ ์ฐธ์กฐ ์‚ฌ์ดํด ํ•ด๊ฒฐ๋ฐฉ๋ฒ•  (0) 2021.09.01
Swift | ๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ์ฐจ์ด  (0) 2021.08.31
Swift | ํด๋กœ์ €  (0) 2021.08.22
    'Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • Swift | Array capacity, reserveCapacity
    • Swift | ๊ฐ•ํ•œ ์ฐธ์กฐ์™€ ์•ฝํ•œ ์ฐธ์กฐ! ์ˆœํ™˜ ์ฐธ์กฐ ์‚ฌ์ดํด ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
    • Swift | ๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ์ฐจ์ด
    • Swift | ํด๋กœ์ €
    ariedaze
    ariedaze

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”