-
[Swift] ๊ฐํ์ ๊ณผ ์ฐธ์กฐํ์ ( Value Type vs Reference Type )iOS/๐ Swift 2020. 12. 29. 18:30
1์ฐจ ์์ : 2021.06.06
์๋ ํ์ธ์. ์ด๋ฒ ๊ธ์์๋ ์ค์ํํธ์ ๊ฐํ์ ๊ณผ ์ฐธ์กฐํ์ ์ ์ฐจ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๊ด์ ์์ ๋ค๋ฃจ์ด๋ณด๊ฒ ์ต๋๋ค๐ถ
*์์ฑ๊ฐ์์์์ ๊ฐํ์ ๊ณผ ์ฐธ์กฐํ์ ์ ์๋์ฐจ์ด๊ฐ ๊ถ๊ธํ๋ค๋ฉด? -> ์์ฑ๊ฐ์์๋ (Property Observer) ?
Swift์์ ์๋ฃ๊ตฌ์กฐ๋ค์ ๋ค์๊ณผ ๊ฐ์ ํ์ ์ ๊ฐ์ง๋๋ค.
๊ฐ ํ์ ์ฐธ์กฐ ํ์ Structure
Enumeration
TupleClass
Closure/* Value Type */ struct testStruct { var name = "" var age = 0 } /* Reference Type */ class testClass { var name = "" var age = 0 }
๋ํ์ ์ธ ํ์ ์ธ Struct์ Class๋ฅผ ํตํด ๋น๊ตํด ๋ณด๊ฒ ์ต๋๋ค.
๊ฐ๊ฐ์ ๊ฐ์ ์์ฑ์ ๊ฐ์ง์ง๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ๋ฐฉ์์ด ๋ค๋ฆ ๋๋ค.
ํ ์ฅ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฐ ํ์
// Value Type var testStruct = testStruct() /* ๋ณ๊ฐ์ ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด ๊ฐ์ด ๋ณต์ฌ๋จ */ var anotherStruct = value1 anotherStruct.name = "John Doe" anotherStruct.age = 10 // testStruct.name: "", testStruct.age: 0
๊ฐ ํ์ ์ธ struct ์ ๊ฒฝ์ฐ, stack ์์ญ์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ ๋ฌ ์ ์ค์ ๋ฐ์ดํฐ๊ฐ ๋ณต์ฌ๋ฉ๋๋ค.
์ฐธ์กฐ ํ์
// Reference Type var testClass = testClass() /* ์ฃผ์ ๊ฐ๋ง ๋ณต์ฌ๋๋ฏ๋ก, ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํด */ var anotherClass = ref1 anotherClass.name = "Jane Doe" anotherClass.age = 17 // testClass.name: "Jane Doe", testClass.age: 17
์ฐธ์กฐ ํ์ ์ธ class์ ๊ฒฝ์ฐ, heap ์์ญ์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ณ , stack ์์ญ์๋ heap ์์ญ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ ์ฅ๋ฉ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ ๋ฌ์ ์ธ์คํด์ค๊ฐ ์์นํ ์ค์ ์ฃผ์(= heap ์์ญ์ ์ฃผ์)์ ๋ณต์ฌ์ด๋ฉฐ,
๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ฝ๋์์ ref2๋ ref1์ ์ฐธ์กฐ๋ฅผ ์ป์ต๋๋ค. ( Retain Count๋ 1 ์ฆ๊ฐ )
let ํค์๋
let์ผ๋ก ์ ์ธ๋ ์ธ์คํด์ค๋, ์ธ์คํด์ค์ ํ ๋น๋ stack ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ณ๊ฒฝํ์ง ๋ชปํ๊ฒ ํฉ๋๋ค.
๋ฐ๋ผ์ stack ์์ญ์ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ฐ ํ์ ์ธ์คํด์ค ๋ค์ ์์ฑ์ ์์ ํ์ง ๋ชปํฉ๋๋ค.
ํ์ง๋ง stack ์์ญ์ heap์์ญ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์ ์ฅ๋๋ ์ฐธ์กฐ ํ์ ์ธ์คํด์ค๋ค์ ๊ฐ๋ฆฌํค๋ ๋์๋ง ์์ ํ์ง ๋ชปํ ๋ฟ, ์์ฑ์ ์์ ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ๋ฉ๋ชจ๋ฆฌ ๊ด์ ์์์ ๊ฐ ํ์ ๊ณผ ์ฐธ์กฐ ํ์ ์ ์ฐจ์ด์ ์ ๋๋ค.
๋!
๐ค๐ข[์ฐ์งฑ์ iOS ๋ธ๋ก๊ทธ]๐ต๐ป
iOS๋ฅผ ๊ณต๋ถํ๋ฉด์ ๋ฐฐ์ด ๋ด์ฉ์ ๊ธฐ๋กํ๊ณ ์์ต๋๋ค.๋ค์ ๊ธ: ARC - Memory
'iOS > ๐ Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Strong Reference - Memory (0) 2020.12.31 ARC - Memory (0) 2020.12.30 Mutability of Collections - Collections (0) 2020.12.01 Self Type - General (0) 2020.11.27 [Swift] Property Observer (์์ฑ ๊ฐ์์) ๋? (0) 2020.11.27