iOS ๐/Swift
Swift08 - ๊ฐ ํ์ vs ์ฐธ์กฐํ์
yongmin.Lee
2021. 2. 1. 20:57
๊ฐ ํ์ (Value Type)
- ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ํ ๋ ๊ฐ์ ๋ณต์ฌํ์ฌ ์ ๋ฌํฉ๋๋ค.
- ๊ตฌ์กฐ์ฒด
- ์ด๊ฑฐํ
๊ฐ ํ์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ์ฐ๊ด๋ ๋ช๋ช์ ๊ฐ๋ค์ ๋ชจ์์ ํ๋์ ๋ฐ์ดํฐ ํ์ ์ผ๋ก ํํํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ๋ค๋ฅธ ๊ฐ์ฒด ๋๋ ํจ์ ๋ฑ์ผ๋ก ์ ๋ฌ๋ ๋ ์ฐธ์กฐ๊ฐ ์๋๋ผ ๋ณต์ฌ(๊ฐ ๋ณต์ฌ) ํ ๊ฒฝ์ฐ
- ์์ ์ ์์ํ ํ์๊ฐ ์๊ฑฐ๋, ๋ค๋ฅธ ํ์ ์ ์์ ๋ฐ์ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ
- ์ค์ํํธ์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ์ ๋ชจ๋ ๊ตฌ์กฐ์ฒด๋ก ๊ตฌํ๋์ด์์ต๋๋ค.
- ์ค์์คํธ๋ ๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ ์ฌ์ฉ์ ์ ํธํฉ๋๋ค.
struct ValueType {
var property = 1
}
// ์ฒซ ๋ฒ์งธ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค
let firstStructInstance = ValueType()
// ๋ ๋ฒ์งธ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค์ ์ฒซ ๋ฒ์งธ ์ธ์คํด์ค ๊ฐ ๋ณต์ฌ
var secondStructInstance = firstStructInstance
// ๋ ๋ฒ์งธ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค ํ๋กํผํฐ ๊ฐ ์์
secondStructInstance.property = 2
// ๋ ๋ฒ์งธ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค๋ ์ฒซ ๋ฒ์งธ ๊ตฌ์กฐ์ฒด๋ฅผ ๋๊ฐ์ด ๋ณต์ฌํ
// ๋ณ๋์ ์ธ์คํด์ค์ด๊ธฐ ๋๋ฌธ์
// ๋ ๋ฒ์งธ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค์ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํด๋
// ์ฒซ ๋ฒ์งธ ๊ตฌ์กฐ์ฒด ์ธ์คํด์ค์ ํ๋กํผํฐ ๊ฐ์๋ ์ํฅ์ด ์์
print("first struct instance property : \(firstStructInstance.property)") // 1
print("second struct instance property : \(secondStructInstance.property)") // 2
์ฐธ์กฐ ํ์ (Reference Type) :
- ๋ฐ์ดํฐ๋ฅผ ์ ํ ํ ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ์ ๋ฌํฉ๋๋ค.
- ํด๋์ค
- Apple ํ๋ ์์ํฌ๋ ๋๋ถ๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
class ReferenceType {
var property = 1
}
// ํด๋์ค ์ธ์คํด์ค ์์ฑ ํ ์ฒซ ๋ฒ์งธ ์ฐธ์กฐ ์์ฑ
let firstClassReference = ReferenceType()
// ๋ ๋ฒ์งธ ์ฐธ์กฐ ๋ณ์์ ์ฒซ ๋ฒ์งธ ์ฐธ์กฐ ํ ๋น
let secondClassReference = firstClassReference
secondClassReference.property = 2
// ๋ ๋ฒ์งธ ํด๋์ค ์ฐธ์กฐ๋ ์ฒซ ๋ฒ์งธ ํด๋์ค ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์
// ๋ ๋ฒ์งธ ์ฐธ์กฐ๋ฅผ ํตํด ์ธ์คํด์ค์ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด
// ์ฒซ ๋ฒ์งธ ํด๋์ค ์ธ์คํด์ค์ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํ๊ฒ ๋จ
print("first class reference property : \(firstClassReference.property)") // 2
print("second class reference property : \(secondClassReference.property)") // 2