๊ตฌ์กฐ์ฒด์ ํด๋์ค
๊ตฌ์กฐ์ฒด์ ํด๋์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ฉ๋์ ๋ง๊ฒ ๋ฌถ์ด ํํํ๊ณ ์ ํ ๋ ์ ์ฉํ๋ค.
๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค = ๊ฐ ํ์
ํด๋์ค์ ์ธ์คํด์ค = ์ฐธ์กฐ ํ์
๊ตฌ์กฐ์ฒด
๊ตฌ์กฐ์ฒด์ ์ ์
struct ํค์๋๋ก ์ ์
struct ๊ตฌ์กฐ์ฒด ์ด๋ฆ{
ํ๋กํผํฐ์ ๋ฉ์๋๋ค
}
BaicInformation ๊ตฌ์กฐ์ฒด ์ ์
struct BasicInformation{
var name: String
var age: Int
}
๊ตฌ์กฐ์ฒด ์ธ์คํด์ค์ ์์ฑ ๋ฐ ์ด๊ธฐํ
๊ตฌ์กฐ์ฒด ์ ์๋ฅผ ๋ง์น ํ, ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๊ณ ์ ํ ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋๋ ๋ฉค๋ฒ์์ด์ฆ ์ด๋์ ๋ผ์ด์ฆ๋ฅผ ์ฌ์ฉ
์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ ์ด๊ธฐํ๋ ํ ํ๋กํผํฐ ๊ฐ์ ์ ๊ทผํ๊ณ ์ถ๋ค๋ฉด ๋ง์นจํ . ์ฌ์ฉ
๊ตฌ์กฐ์ฒด๋ฅผ ์์ let์ผ๋ก ์ ์ธํ๋ฉด ์ธ์คํด์ค ๋ด๋ถ์ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๊ณ , ๋ณ์ var๋ก ์ ์ธํ๋ฉด ๋ด๋ถ์ ํ๋กํผํฐ๊ฐ var๋ก ์ ์ธ๋ ๊ฒฝ์ฐ์ ๊ฐ์ ๋ณ๊ฒฝํด ์ค ์ ์๋ค.
์์
// ํ๋กํผํฐ ์ด๋ฆ(name, age)์ผ๋ก ์๋ ์์ฑ๋ ์ด๋์
๋ผ์ด์ ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐ์ฒด ์์ฑ
var yagomInfo: BasicInformation = BasicInformation(name: "yagom", age: 99)
yagomInfo.age = 100 // ๋ณ๊ฒฝ๊ฐ๋ฅ
yagomInfo.name = "Seba" // ๋ณ๊ฒฝ๊ฐ๋ฅ
// ํ๋กํผํฐ ์ด๋ฆ(name, age)์ผ๋ก ์๋ ์์ฑ๋ ์ด๋์
๋ผ์ด์ ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐ์ฒด ์์ฑ
let yagomInfo: BasicInformation = BasicInformation(name: "Seba", age: 99)
sebaInfo.age = 100 // ๋ณ๊ฒฝ ๋ถ๊ฐ! ์ค๋ฅ
jennyInfo.age = 100 // ๋ณ๊ฒฝ ๋ถ๊ฐ!
ํด๋์ค
์ค์ํํธ์ ํด๋์ค๋ ๋ถ๋ชจํด๋์ค๊ฐ ์๋๋ผ๋ ์์ ์์ด ๋จ๋ ์ผ๋ก ์ ์ ๊ฐ๋ฅ
ํด๋์ค ์ ์
class ํค์๋๋ก ์ ์
class ํด๋์ค ์ด๋ฆ{
ํ๋กํผํฐ์ ๋ฉ์๋๋ค
}
๋ค๋ง, ํด๋์ค๋ ์์๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ ์์๋ฐ์ ๋๋ ํด๋์ค ์ด๋ฆ ๋ค์ ์ฝ๋ก (:)์ ์จ์ฃผ๊ณ ๋ถ๋ชจํด๋์ค ์ด๋ฆ์ ๋ช ์ํ๋ค.
class ํด๋์ค ์ด๋ฆ : ๋ถ๋ชจํด๋์ค ์ด๋ฆ {
ํ๋กํผํฐ์ ๋ฉ์๋๋ค
}
Person ํด๋์ค ์ ์
class Person{
var height: Float = 0.0
var weight: Float = 0.0
}
ํด๋์ค ์ธ์คํด์ค์ ์์ฑ๊ณผ ์ด๊ธฐํ
ํด๋์ค๋ฅผ ์ ์ํ ํ, ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๊ณ ์ ํ ๋๋ ๊ธฐ๋ณธ์ ์ธ ์ด๋์ ๋ผ์ด์ ๋ฅผ ์ฌ์ฉํ๋ค.
Person ํด๋์ค์์๋ ํ๋กํผํฐ์ ๊ธฐ๋ณธ๊ฐ์ด ์ง์ ๋์ด ์์ผ๋ฏ๋ก ์ ๋ฌ์ธ์๋ฅผ ํตํ์ฌ ๋ฐ๋ก ์ด๊น๊ฐ์ ์ ๋ฌํด์ฃผ์ง ์์๋ ๋๋ค.
์ธ์คํด์ค์ ๊ฐ์ฒด
์ธ์คํด์ค = ๊ฐ์ฒด
๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ฒด๋ผ๊ณ ๋ถ๋ฅธ๋ค. ๋ฌผ๋ก ์ค์ํํธ์์๋ ๊ฐ์ฒด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด ํ๋ฆฐ ๊ฒ์ ์๋์ง๋ง, ์ค์ํํธ ๊ณต์ ๋ฌธ์์๋ ์ข ๋ ํ์ ์ ์ธ ์ธ์คํด์ค๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ค.
์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ ์ด๊ธฐํ๋ ํ ( ์ด๋์ ๋ผ์ด์ฆ ๋ ํ ) ํ๋กํผํฐ ๊ฐ์ ์ ๊ทผํ๊ณ ์ถ๋ค๋ฉด ๋ง์นจํ . ๋ฅผ ์ฌ์ฉ
๊ตฌ์กฐ์ฒด์๋ ๋ค๋ฅด๊ฒ ํด๋์ค์ ์ธ์คํด์ค๋ ์ฐธ์กฐ ํ์ ์ด๋ฏ๋ก ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ let ์ผ๋ก ์ ์ธํด๋
๋ด๋ถ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
Person ํด๋์ค์ ์ธ์คํด์ค ์์ฑ ๋ฐ ์ฌ์ฉ
var yagom: Person = Person()
yagom.height = 123.4
yagom.weight = 123.4
let jenny: Person = Person()
jenny.height = 123.4
jenny.weight = 123.4
ํด๋์ค ์ธ์คํด์ค์ ์๋ฉธ
ํด๋์ค์ ์ธ์คํด์ค๋ ์ฐธ์กฐ ํ์ ์ด๋ฏ๋ก ๋๋ ์ฐธ์กฐํ ํ์๊ฐ ์์ ๋ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ (์๋ฉธ)๋๋ค.
์๋ฉธ๋๊ธฐ ์ง์ , deinit ๋ฉ์๋ ํธ์ถ
deinit : ๋์ด๋์ ๋ผ์ด์
deinit ๋ฉ์๋๋ ํด๋์ค๋น ํ๋๋ง ๊ตฌํํ ์ ์์ผ๋ฉฐ, ๋งค๊ฐ๋ณ์์ ๋ฐํ ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
Person ํด๋์ค์ ์ธ์คํด์ค ์์ฑ ๋ฐ ์๋ฉธ
class Person{
var height: Float = 0.0
var weight: Float = 0.0
deinit{
print("Person ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋ฉธ๋ฉ๋๋ค.")
}
}
var yagom: Person? = Person()
yagom = nil // Person ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋ฉธ๋ฉ๋๋ค.
๊ตฌ์กฐ์ฒด์ ํด๋์ค์ ์ฐจ์ด
- ๊ฐ์ ์
- ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ํ๋กํผํฐ๋ฅผ ์ ์ํ ์ ์๋ค.
- ๊ธฐ๋ฅ ์คํ์ ์ํด ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์๋ค.
- ์๋ธ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ํตํด ๊ตฌ์กฐ์ฒด ๋๋ ํด๋์ค๊ฐ ๊ฐ๋ ๊ฐ์ ์ ๊ทผํ๋๋ก ์๋ธ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ํ ์ ์๋ค.
- ์ด๊ธฐํ๋ ๋์ ์ํ๋ฅผ ์ง์ ํ๊ธฐ ์ํด ์ด๋์ ๋ผ์ด์ ๋ฅผ ์ ์ํ ์ ์๋ค.
- ์ด๊ธฐ๊ตฌํ๊ณผ ๋๋ถ์ด ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ์ํด ์ต์คํ ์ ์ ํตํด ํ์ฅํ ์ ์๋ค.
- ํน์ ๊ธฐ๋ฅ์ ์คํํ๊ธฐ ์ํด ํน์ ํ๋กํ ์ฝ์ ์ค์ํ ์ ์๋ค.
- ๋ค๋ฅธ ์
- ๊ตฌ์กฐ์ฒด๋ ์์ํ ์ ์๋ค.
- ํ์ ์บ์คํ ์ ํด๋์ค์ ์ธ์คํด์ค์์๋ง ํ์ฉ๋๋ค.
- ๋์ด๋์ ๋ผ์ด์ ๋ ํด๋์ค์ ์ธ์คํด์ค์๋ง ํ์ฉํ ์ ์๋ค.
- ์ฐธ์กฐ ํ์ ๊ณ์ฐ์ ํด๋์ค์ ์ธ์คํด์ค์์๋ง ์ ์ฉ๋๋ค.
๊ฐ ํ์ ๊ณผ ์ฐธ์กฐ ํ์
๊ฐ ํ์ ๊ณผ ์ฐธ์กฐ ํ์ ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ : ๋ฌด์์ด ์ ๋ฌ๋๋๋
์ฆ, ๊ฐ ํ์ ์ ๊ฐ ์ ๋ฌ์ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๊ณ , ์ฐธ์กฐ ํ์ ์ ๊ฐ์ด ์ ๋ฌ๋ ๋๋ ๊ฐ์ ๋ณต์ฌํ์ง ์๊ณ ์ฐธ์กฐ(์ฃผ์)๊ฐ ์ ๋ฌ
๊ฐ ํ์ ๊ณผ ์ฐธ์กฐํ์ ์ ์ฐจ์ด
struct BasicInformation{
let name: String
var age: Int
}
var yagomInfo: BasicInformation = BasicInformation(name: "yagom", age: 99)
yagomInfo.age = 100
// yagomInfo์ ๊ฐ์ ๋ณต์ฌํ์ฌ ํ ๋นํ๋ค.
var friendInfo: BasicInformation = yagomInfo
print("yagom's age: \(yagomInfo.age)") // 100
print("friend's age: \(friendInfo.age)") // 100
friendInfo.age = 999
print("yagom's age: \(yagomInfo.age)") // 100 - yagom์ ๊ฐ์ ๋ณ๋ ์๋ค.
print("friend's age: \(friendInfo.age)")
// 999 - friendInfo๋ yagomInfo์ ๊ฐ์ ๋ณต์ฌํด์๊ธฐ ๋๋ฌธ์ ๋ณ๊ฐ์ ๊ฐ์ ๊ฐ๋๋ค.
class Person{
var height: Float = 0.0
var weight: Float = 0.0
}
var yagom: Person = Person()
var friend: Person = yagom // yagom์ ์ฐธ์กฐ๋ฅผ ํ ๋นํ๋ค.
print("yagom's height: \(yagom.height)") // 0.0
print("friend's height: \(friend.height)") // 0.0
friend.height = 185.5
print("yagom's height: \(yagom.height)")
// 185.5 - friend๋ yagom์ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
print("friend's height: \(friend.height)")
// 185.5 - ์ด๋ฅผ ํตํด yagom์ด ์ฐธ์กฐํ๋ ๊ณณ๊ณผ friend๊ฐ ์ฐธ์กฐํ๋ ๊ณณ์ด ๊ฐ์์ ์ ์ ์๋ค.
func changeBasicInfo(_ info: BasicInformation){
var copiedInfo: BasicInformation = info
copiedInfo.age = 1
}
func changePersonInfo(_ info: Person){
info.height = 155.3
}
// changeBasicInfo(_:)๋ก ์ ๋ฌ๋๋ ์ ๋ฌ์ธ์๋ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์
// yagomInfo์ ๊ฐ๋ง ์ ๋ฌ๋๋ ๊ฒ์ด๋ค.
changeBasicInfo(yagomInfo)
print("yagom's age: \(yagomInfo.age)") // 100
// changePersonInfo(_:)์ ์ ๋ฌ์ธ์๋ก yagom์ ์ฐธ์กฐ๊ฐ ์ ๋ฌ๋์๊ธฐ ๋๋ฌธ์
// yagom์ด ์ฐธ์กฐํ๋ ๊ฐ๋ค์ ๋ณํ๊ฐ ์๊ธด๋ค.
changePersonInfo(yagom)
print("yagom's height: \(yagom.height)") // 155.3
๊ฐ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ํจ์์ ์ ๋ฌ์ธ์๋ก ์ ๋ฌํ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ฌ์ธ์๋ฅผ ์ํ ์ธ์คํด์ค๊ฐ ์๋ก ์์ฑ๋๋ค. ์์ฑ๋ ์ ์ธ์คํด์ค์๋ ์ ๋ฌํ๋ ค๋ ๊ฐ์ด ๋ณต์ฌ๋์ด ๋ค์ด๊ฐ๋ค. ๋ฐ๋ฉด ์ฐธ์กฐํ์ ์ ๋ฐ์ดํฐ๋ ์ ๋ฌ์ธ์๋ก ์ ๋ฌํ ๋ ๊ธฐ์กด ์ธ์คํด์ค์ ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ๋ฏ๋ก ์๋ก์ด ์ธ์คํด์ค๊ฐ ์๋ ๊ธฐ์กด์ ์ธ์คํด์ค ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ๋ค.
๊ตฌ์กฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ์ฐ๊ด๋ ๊ฐ๋จํ ๊ฐ์ ์งํฉ์ ์บก์ํํ๋ ๊ฒ๋ง์ด ๋ชฉ์ ์ผ ๋
- ์บก์ํํ ๊ฐ์ ์ฐธ์กฐํ๋ ๊ฒ๋ณด๋ค ๋ณต์ฌํ๋ ๊ฒ์ด ํฉ๋นํ ๋
- ๊ตฌ์กฐ์ฒด์ ์ ์ฅ๋ ํ๋กํผํฐ๊ฐ ๊ฐ ํ์ ์ด๋ฉฐ ์ฐธ์กฐํ๋ ๊ฒ๋ณด๋ค ๋ณต์ฌํ๋ ๊ฒ์ด ํฉ๋นํ ๋
- ๋ค๋ฅธ ํ์ ์ผ๋ก๋ถํฐ ์์๋ฐ๊ฑฐ๋ ์์ ์ ์์ํ ํ์๊ฐ ์์ ๋
์ด๋ฐ ๋ช๊ฐ์ง ์ํฉ์ ์ ์ธํ๋ฉด ํด๋์ค๋ก ์ ์ํ์ฌ ์ฌ์ฉํ๋ค.
'๐ iOS > ๊ธฐ์ด๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift ๊ธฐ์ด] ์ธ์คํด์ค ์์ฑ ๋ฐ ์๋ฉธ (0) | 2023.01.15 |
---|---|
[Swift ๊ธฐ์ด] ํ๋กํผํฐ์ ๋ฉ์๋ (0) | 2023.01.10 |
[Swift ๊ธฐ์ด] ์ต์ ๋ (0) | 2023.01.04 |
[Swift ๊ธฐ์ด] ํจ์ (0) | 2023.01.01 |
[Swift ๊ธฐ์ด] ํ๋ฆ์ ์ด (0) | 2022.12.31 |