์ธ์คํด์ค ์์ฑ ๋ฐ ์๋ฉธ
์ธ์คํฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ๊ณผ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์๋ฉธํ ๋ ์งํ๋๋ ํ๋ก์ธ์ค์ ๋ํด์..
์ธ์คํด์ค ์์ฑ
์ด๊ธฐํ ๊ณผ์ = ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ์ค๋น๋ฅผ ํ๊ธฐ ์ํ์ฌ ์ ์ฅ ํ๋กํผํฐ์ ์ด๊น๊ฐ์ ์ค์ ํ๋ ์ผ
- ์ด๋์ ๋ผ์ด์ ๋ฅผ ์ ์ํ๋ฉด ์ด๊ธฐํ ๊ณผ์ ์ง์ ๊ตฌํ ๊ฐ๋ฅ ( ์ด๋์ ๋ผ์ด์ ์ ์ญํ ์ ๊ทธ์ ์ธ์คํด์ค์ ์ฒซ ์ฌ์ฉ์ ์ํด ์ด๊ธฐํํ๋ ๊ฒ๋ฟ )
- init ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋์ ๋ผ์ด์ ๋งค์๋์์ ํํ
ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์ ๊ธฐ๋ณธ์ ์ธ ํํ์ ์ด๋์ ๋ผ์ด์
Class SomeCLass{
init(){
// ์ด๊ธฐํํ ๋ ํ์ํ ์ฝ๋
}
}
struct SomeStruct{
init(){
// ์ด๊ธฐํํ ๋ ํ์ํ ์ฝ๋
}
}
enum SomeEnum{
case someCase
init(){
// ์ด๊ฑฐํ์ ์ด๊ธฐํํ ๋ ๋ฐ๋์ case์ค ํ๋๊ฐ ๋์ด์ผ ํ๋ค.
self = .someCase
// ์ด๊ธฐํํ ๋ ํ์ํ ์ฝ๋
}
}
ํ๋กํผํฐ ๊ธฐ๋ณธ๊ฐ
๊ตฌ์กฐ์ฒด์ ํด๋์ค์ ์ธ์คํด์ค๋ ์ฒ์ ์์ฑํ ๋ ์ต์ ๋ ์ ์ฅ ํ๋กํผํฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ์ ์ฅ ํ๋กํผํฐ์ ์ด๊ธฐ๊ฐ์ ํ ๋นํด์ผ ํจ
ํ๋กํผํฐ๋ฅผ ์ ์์, ํ๋กํผํฐ ๊ธฐ๋ณธ๊ฐ์ ํ ๋นํ๋ฉด ์ด๋์ ๋ผ์ด์ ์์ ๋ฐ๋ก ์ด๊ธฐ๊ฐ์ ํ ๋นํ์ง ์์๋ ํ๋กํผํฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ด๊ธฐํ
Area ๊ตฌ์กฐ์ฒด์ ์ด๋์ ๋ผ์ด์
struct Area{
var squareMeter: Double
init() {
squareMeter = 0.0 // squareMeter์ ์ด๊น๊ฐ ํ ๋น
}
}
let room: Area = Area()
print(room.squareMeter) // 0.0
Area ๊ตฌ์กฐ์ฒด๋ squareMeter ๋ผ๋ Double ํ์ ์ ์ ์ฅ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. init ์ด๋์ ๋ผ์ด์ ๋ก ์ธ์คํด์ค๋ฅผ ์ด๊ธฐํํ๋ฉฐ
squareMeter์ ์ด๊ธฐ๊ฐ์ 0.0์ด ๋๋ค.
์์ ์ค๋ช ํ๋ฏ์ด ์ด๋์ ๋ผ์ด์ ๋ก ์ ์ฅ ํ๋กํผํฐ์ ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง, ํ๋กํผํฐ๋ฅผ ์ ์ํ ๋ ํ๋กํผํฐ์ ๊ธฐ๋ณธ๊ฐ์ ํ ๋นํ๋ ๋ฐฉ์์ ์ฌ์ฉํ ์๋ ์๋ค.
ํ๋กํผํฐ ๊ธฐ๋ณธ๊ฐ ์ง์
struct Area{
var squareMeter: Double = 0.0 // ํ๋กํผํฐ ๊ธฐ๋ณธ๊ฐ ํ ๋น
}
let room: Area = Area()
print(room.squareMeter) // 0.0
์ด๋์ ๋ผ์ด์ ๋งค๊ฐ๋ณ์
์ด๋์ ๋ผ์ด์ ๋ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ์ ์๋ค.
์ฆ, ์ธ์คํด์ค๋ฅผ ์ด๊ธฐํํ๋ ๊ณผ์ ์ ํ์ํ ๊ฐ์ ์ ๋ฌ๋ฐ์ ์ ์๋ค.
์ด๋์ ๋ผ์ด์ ๋งค๊ฐ๋ณ์
srtuct Area{
var squareMeter : Double
init(fromPy py: Double) { // ์ฒซ๋ฒ์งธ ์ด๋์
๋ผ์ด์
squareMeter = py * 3.3058
}
init(fromSquareMeter squareMeter: Double) { // ๋๋ฒ์งธ ์ด๋์
๋ผ์ด์
self.squareMeter = squareMeter
}
init(value: Double){ // ์ธ๋ฒ์งธ ์ด๋์
๋ผ์ด์
squareMeter = value
}
init(_value : Double) { // ๋ค๋ฒ์งธ ์ด๋์
๋ผ์ด์
squareMeter = value
}
}
let roomOne: Area = Area(fromPy: 15.0)
print(roomOne.squareMeter) // 49.587
let roomTwo: Area = Area(fromSquareMeter : 33.06)
print(roomTwo.squareMeter) // 33.06
let roomThree: Area = Area(value: 30.0)
let roomFour: Area = Area(55.0)
Area() // ์ค๋ฅ ๋ฐ์
์ต์ ๋ ํ๋กํผํฐ ํ์
์ด๊ธฐํ ๊ณผ์ ์์ ๊ฐ์ ์ด๊ธฐํํ์ง ์์๋ ๋๋, ์ฆ ์ธ์คํด์ค๊ฐ ์ฌ์ฉ๋๋ ๋์์ ๊ฐ์ ๊ผญ ๊ฐ์ง ์์๋ ๋๋
์ ์ฅ ํ๋กํผํฐ๊ฐ ์๋ค๋ฉด ํด๋น ํ๋กํผํฐ๋ฅผ ์ต์ ๋๋ก ์ ์ธํ ์ ์๋ค.
์ต์ ๋๋ก ์ ์ธํ ์ ์ฅ ํ๋กํผํฐ๋ ์ด๊ธฐํ ๊ณผ์ ์์ ๊ฐ์ ํ ๋นํด์ฃผ์ง ์๋๋ค๋ฉด ์๋์ผ๋ก nil ์ด ํ ๋น ๋๋ค.
Person ํด๋์ค
class Person{
var name: String
var age: Int?
init(name: String){
self.name = name
}
}
let yagom: Person = Person(name: "yagom")
print(yagom.name) // "yagom"
print(yagom.age) // nil
yagom.age = 99
print(yagom.age) // 99
yagom.name = "Eric"
print(yagom.name) // "Eric"
์์ ํ๋กํผํฐ
์์๋ก ์ ์ธ๋ ์ ์ฅ ํ๋กํผํฐ๋ ์ธ์คํด์ค๋ฅผ ์ด๊ธฐํํ๋ ๊ณผ์ ์์๋ง ๊ฐ์ ํ ๋นํ ์ ์์ผ๋ฉฐ, ์ฒ์ ํ ๋น๋ ์ดํ๋ก๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
๐ ์์ ํ๋กํผํฐ์ ์ฝ์
ํด๋์ค ์ธ์คํด์ค์ ์์ ํ๋กํผํฐ๋ ํ๋กํผํฐ๊ฐ ์ ์๋ ํด๋์ค์์๋ง ์ด๊ธฐํํ ์ ์๋ค.
ํด๋น ํด๋์ค๋ฅผ ์์๋ฐ์ ์์ํด๋์ค์ ์ด๋์ ๋ผ์ด์ ์์๋ ๋ถ๋ชจํด๋์ค์ ์์ ํ๋กํผํฐ ๊ฐ์ ์ด๊ธฐํํ ์ ์๋ค.
์์ ํ๋กํผํฐ์ ์ด๊ธฐํ
class Person {
let name: String
var age: Int?
init(name: String) {
self.name = name
}
}
let yagom: Person = Person(name : "yagom")
yagom.name = "Eric" // ์ค๋ฅ ๋ฐ์
๊ธฐ๋ณธ ์ด๋์ ๋ผ์ด์ ์ ๋ฉค๋ฒ์์ด์ฆ ์ด๋์ ๋ผ์ด์
๊ธฐ๋ณธ ์ด๋์ ๋ผ์ด์ ๋ ํ๋กํผํฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ํ๋กํผํฐ๋ฅผ ์ด๊ธฐํํด์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค. ์ฆ, ๊ธฐ๋ณธ ์ด๋์ ๋ผ์ด์ ๋ ์ ์ฅ ํ๋กํผํฐ์ ๊ธฐ๋ณธ๊ฐ์ด ๋ชจ๋ ์ง์ ๋์ด ์๊ณ , ๋์์ ์ฌ์ฉ์ ์ ์ ์ด๋์ ๋ผ์ด์ ๊ฐ ์ ์๋์ด ์์ง ์์ ์ํ์์ ์ ๊ณต๋๋ค.
๊ตฌ์กฐ์ฒด๋ ์ฌ์ฉ์ ์ ์ ์ด๋์ ๋ผ์ด์ ๋ฅผ ๊ตฌํํ์ง ์์ผ๋ฉด ํ๋กํผํฐ์ ์ด๋ฆ์ผ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ๋ ์ด๋์ ๋ผ์ด์ ์ธ ๋ฉค๋ฒ์์ด์ฆ ์ด๋์ ๋ผ์ด์ ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ค.
์ด๊ธฐํ ์์
๊ตฌ์กฐ์ฒด์ ์ด๊ฑฐํ์ ์ฝ๋์ ์ค๋ณต์ ํผํ๊ธฐ ์ํ์ฌ ์ด๋์ ๋ผ์ด์ ๊ฐ ๋ค๋ฅธ ์ด๋์ ๋ผ์ด์ ์๊ฒ ์ผ๋ถ ์ด๊ธฐํ๋ฅผ ์ํํ๋ ์ด๊ธฐํ ์์์ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค. ํ์ง๋ง, ํด๋์ค๋ ์์์ ์ง์ํ๋ ํฐ๋ผ ๊ฐ๋จํ ์ด๊ธฐํ ์์๋ ํ ์ ์๋ค.
๊ฐ ํ์ ์์ ์ด๋์ ๋ผ์ด์ ๊ฐ ๋ค๋ฅธ ์ด๋์ ๋ผ์ด์ ๋ฅผ ํธ์ถํ๋ ค๋ฉด self.init ์ ์ฌ์ฉํ๋ค.
์คํจ ๊ฐ๋ฅํ ์ด๋์ ๋ผ์ด์
์คํจ ๊ฐ๋ฅ์ฑ์ ๋ดํฌํ ์ด๋์ ๋ผ์ด์ ๋ก์จ, ์คํจํ์๋ nil ์ ๋ฐํํด์ฃผ๋ฏ๋ก ๋ฐํ ํ์ ์ด ์ต์ ๋๋ก ์ง์ ๋๋ค.
๋ฐ๋ผ์ ์คํจ ๊ฐ๋ฅํ ์ด๋์ ๋ผ์ด์ ๋ init ๋์ ์ init? ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋์ ๋ผ์ด์ ์ ๋งค๊ฐ๋ณ์
์คํจํ์ง ์์ ์ด๋์ ๋ผ์ด์ ์ ์คํจ ๊ฐ๋ฅํ ์ด๋์ ๋ผ์ด์ ๋ฅผ ๊ฐ์ ์ด๋ฆ๊ณผ ๊ฐ์ ๋งค๊ฐ๋ณ์ ํ์ ์ ๊ฐ๋๋ก ์ ์ํ ์ ์๋ค.
์คํจ ๊ฐ๋ฅํ ์ด๋์ ๋ผ์ด์ ๋ ์ค์ ๋ก ํน์ ๊ฐ์ ๋ฐํํ์ง ์๋๋ค. ์ด๊ธฐํ๋ฅผ ์คํจํ์ ๋๋ return nil์
๋ฐ๋๋ก ์ด๊ธฐํ์ ์ฑ๊ณตํ์ ๋๋ return ์ ์ ์ด ์ด๊ธฐํ์ ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ํํํ ๋ฟ, ์ค์ ๊ฐ์ ๋ฐํํ์ง๋ ์๋๋ค.
ํจ์๋ฅผ ์ฌ์ฉํ ํ๋กํผํฐ ๊ธฐ๋ณธ๊ฐ ์ค์
์ธ์คํด์ค๋ฅผ ์ด๊ธฐํํ ๋ ํจ์๋ ํด๋ก์ ๊ฐ ํธ์ถ๋๋ฉด์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ์ ํ๋กํผํฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ๊ณตํด์ค๋ค.
๋๋ฌธ์ ํด๋ก์ ๋ ํจ์์ ๋ฐํ ํ์ ์ ํ๋กํผํฐ์ ํ์ ๊ณผ ์ผ์นํด์ผ ํ๋ค.
์ฆ, ํด๋ก์ ๋ด๋ถ์์๋ ์ธ์คํด์ค์ ๋ค๋ฅธ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ฐํ ์๋ ์๋ค๋ ๊ฒ์ด๋ค. ๋ค๋ฅธ ํ๋กํผํฐ์ ๊ธฐ๋ณธ๊ฐ์ด ์๋ค๊ณ ํด๋ ์๋๋ค. ๋ํ, ํด๋ก์ ๋ด๋ถ์์ self ํ๋กํผํฐ๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ธ์คํด์ค ๋ฉ์๋๋ฅผ ํธ์ถํ ์๋ ์๋ค.
ํด๋ก์ ๋ฅผ ํตํ ํ๋กํผํฐ ๊ธฐ๋ณธ๊ฐ ์ค์
class SomeClass {
let someProperty: SomeType = {
// ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉ์ ์ ์ ์ฐ์ฐ์ ํตํ ํ ๋ฐํํด์ค๋ค.
// ๋ฐํ๋๋ ๊ฐ์ ํ์
์ SomeType๊ณผ ๊ฐ์ ํ์
์ด์ด์ผ ํ๋ค.
return someValue()
}()
}
ํด๋ก์ ๋ค์ ์๊ดํธ๊ฐ ๋ถ์ ์ด์ ๋ ํด๋ก์ ๋ฅผ ์คํํ๊ธฐ ์ํด์์ด๋ค.
ํด๋ก์ ๋ค์ ์๊ดํธ๊ฐ ๋ถ์ด ํด๋ก์ ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๊ฐ์ ํ๋กํผํฐ์ ๊ธฐ๋ณธ๊ฐ์ด ๋๋ค.
์ธ์คํด์ค ์๋ฉธ
ํด๋์ค์ ์ธ์คํด์ค๋ ๋์ด๋์ ๋ผ์ด์ ๋ฅผ ๊ตฌํํ ์ ์๋ค. ( ์ด๋์ ๋ผ์ด์ ์ ๋ฐ๋ ์ญํ )
์ฆ, ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๊ธฐ ์ง์ ํด๋์ค ์ธ์คํด์ค์ ๊ด๋ จํ์ฌ ์ํ๋ ์ ๋ฆฌ ์์ ์ ๊ตฌํํ ์ ์๋ค.
๐ก ๋์ด๋์ ๋ผ์ด์
- ๋์ด๋์ ๋ผ์ด์ ๋ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ฉธ๋๊ธฐ ๋ฐ๋ก ์ง์ ์ ํธ์ถ๋๋ค.
- deinit ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ฉด ์๋์ผ๋ก ํธ์ถ๋๋ค.
- ํด๋์ค์ ์ธ์คํด์ค์์๋ง ๊ตฌํํ ์ ์๋ค
- ํด๋์ค์๋ ๋์ด๋์ ๋ผ์ด์ ๋ฅผ ๋จ ํ๋๋ง ๊ตฌํํ ์ ์๋ค.
- ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ์์ผ๋ฉฐ, ์๊ดํธ๋ ์ ์ด์ฃผ์ง ์๋๋ค. ๋ ์๋์ผ๋ก ํธ์ถ๋๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ฝ๋๋ก ํธ์ถํ ์๋ ์๋ค.
๋์ด๋์ ๋ผ์ด์ ์ ๊ตฌํ
class SomeClass{
deinit(){
print("Instance will be deallocated immediately")
}
}
var instance: SomeClass? = SomeClass()
instance = nil // Instance will be deallocated immediately"
'๐ iOS > ๊ธฐ์ด๋ฌธ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift ๊ธฐ์ด] ํด๋ก์ (0) | 2023.01.19 |
---|---|
[Swift ๊ธฐ์ด] ์ ๊ทผ์ ์ด (0) | 2023.01.18 |
[Swift ๊ธฐ์ด] ํ๋กํผํฐ์ ๋ฉ์๋ (0) | 2023.01.10 |
[Swift ๊ธฐ์ด] ๊ตฌ์กฐ์ฒด์ ํด๋์ค (0) | 2023.01.05 |
[Swift ๊ธฐ์ด] ์ต์ ๋ (0) | 2023.01.04 |