-
[Swift] ์ธ์คํด์ค(instance)iOS/Swift 2022. 8. 3. 23:45
๐ก ํ์ตํ ๋ด์ฉ
- ๊ธฐ๋ณธ๊ฐ ํ ๋น
- ์ด๋์ ๋ผ์ด์
- ์ต์ ๋
- ์คํจ ๊ฐ๋ฅํ ์ด๋์ ๋ผ์ด์
- ๋์ด๋์ ๋ผ์ด์
์ธ์คํด์ค๊ฐ ์์ฑ์ด ๋๊ธฐ ์ ํ๋กํผํฐ ๊ฐ๋ค์ด ์ด๊ธฐํ๊ฐ ๋์ด์์ด์ผ ํฉ๋๋ค.
๋ง์ฝ ์ด๊ธฐ๊ฐ์ด ์๋ ํด๋์ค๋ฅผ ์ ์ธํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
class StudentB { var name: String var age: Int var major: String
class StudentB์ ์ด๊ธฐ๊ฐ์ด ์๋ค๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๐ก ํ๋กํผํฐ ๊ฐ์ ์ด๊ธฐํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ด ์๋ค.
1. ๊ธฐ๋ณธ๊ฐ ํ ๋น
๋ชจ๋ ์ ์ฅ ํ๋กํผํฐ์ ๊ธฐ๋ณธ๊ฐ์ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ฐ๋ก ์ด๋์ ๋ผ์ด์ ๋ฅผ ํตํด ์ด๊ธฐ๊ฐ์ ํ ๋นํ์ง ์์๋ ๋ฉ๋๋ค.
์์)
class StudentA { var name: String = " " //์ด๋ฆ var age: Int = 0 //๋์ด var major: String = " " //์ ๊ณต } // ์ธ์คํด์ค ์์ฑ let John: StudentA = StudentA() // ์ธ์คํด์ค ์ฌ์ฉ John.name = "John" John.age = 24 John.major = "Digital Media"
2. ์ด๋์ ๋ผ์ด์ (init)
init ํค์๋๋ฅผ ์ฌ์ฉํด์ ํ๋กํผํฐ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ์ง ์๋๋ผ๋ ์ธ์คํด์ค๊ฐ ์์ฑ์ด ๋์ ๋ ์ํ๋ ๊ฐ๋ค์ ๋ฃ์ด์ค ์ ์์ต๋๋ค.
์์)
class StudentB { var name: String var age: Int var major: String // ์ด๋์ ๋ผ์ด์ ๋ก ์ด๊ธฐ๊ฐ ์ค์ init(name: String, age: Int, major: String) { self.name = name self.age = age self.major = major } } let Jessi: StudentB = StudentB(name: "Jessi", age: 23, major: "Visual Design")
self๋?
- ๋ณ์๋ช ์ self๋ฅผ ๋ถ์ฌ์ ์ด๋ฆ์ด ๊ฐ๋๋ผ๋ ์๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค
- init ํค์๋์ ๋งค๊ฐ๋ณ์๋ช (name)๊ณผ ๋ณ์๋ช (name)์ด ๊ฐ์ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๊ฐ ๋ญ ๋งํ๋ ๊ฑด์ง ํท๊ฐ๋ คํฉ๋๋ค๐
3. ์ต์ ๋
ํ๋กํผํฐ ๊ฐ์ด ๊ผญ ํ์ํ ๊ฒ์ด ์๋์ ๋ช ์ํ๊ณ ์ถ์ ๋ ์ต์ ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ต์ ๋ ํ๋กํผํฐ๋ ์ด๊ธฐํํ์ง ์์๋ ๋ฉ๋๋ค.
์์)
class StudentC { var name: String var age: Int var major: String? //์ต์ ๋ //ํ๋กํผํฐ 3๊ฐ ๊ฐ ๋ชจ๋ ์ด๊ธฐํํ๋ ๊ฒฝ์ฐ init(name: String, age: Int, major: String) { self.name = name self.age = age self.major = major } //์ต์ ๋์ ์ ์ธํ 2๊ฐ ๊ฐ์ ์ด๊ธฐํํ๋ ๊ฒฝ์ฐ init(name: String, age: Int) { self.name = name self.age = age } } // ์ธ์คํด์ค ์์ฑ let Jenny: StudentC = StudentC (name: "Jenny", age: 25) let Mike: StudentC = StudentC (name: "Mike", age: 21, major: "Design")
- ์์์ ์ถ์ถ ์ต์
๋
์ฃผ์ํ ์ ์ owner์ ๊ฐ์ ์์์ ์ถ์ถ ์ต์ ๋๋ก ์ ์ธํ๊ธฐ ๋๋ฌธ์ owner ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ ํจ์๋ฅผ ๋ฐ๋ก ํธ์ถํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค(์์ง owner์ ๊ฐ์ nil์ธ ์ํ์ด๊ธฐ ๋๋ฌธ)class Puppy { var name: String var owner: StudentC! init(name: String) { self.name = name } func goOut() { print("\\(name)๊ฐ ์ฃผ์ธ \\(owner.name)์ ์ฐ์ฑ ์ ํฉ๋๋ค") } } // ์ธ์คํด์ค ์์ฑ let cloud: Puppy = Puppy(name: "cloud") // cloud.goOut() //์ฃผ์ธ์ ์์ง nil์ธ ์ํ์ด๋ค cloud.owner = Jenny cloud.goOut()
- owner์ ๊ฐ์ ํ ๋นํ ๋ค ํจ์๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค.
- ์ธ์คํด์ค ์ฌ์ฉ์ ๊ผญ ํ์ํ์ง๋ง ์ด๊ธฐ๊ฐ์ ํ ๋นํ๊ณ ์ถ์ง ์์ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
4. ์คํจ ๊ฐ๋ฅํ ์ด๋์ ๋ผ์ด์
- ์ด๋์ ๋ผ์ด์ ์ ์ ๋ฌ์ธ์๋ก ์๋ชป๋ ๊ฐ์ด๋ ์ ์ ํ์ง ๋ชปํ ๊ฐ์ด ์ ๋ฌ๋์์ ๋ ์คํจ ๊ฐ๋ฅ์ฑ์ ๋ดํฌํ ์ด๋์ ๋ผ์ด์ ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.
- init? ํค์๋๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
์์)
class StudentD { let name: String let age: Int? init?(name: String, age: Int) { if name.isEmpty || age < 0{ return nil } self.name = name self.age = age } }
init? ํค์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ return ๊ฐ์ผ๋ก nil์ ๊ฐ์ง ์ ์์ต๋๋ค.
5. ๋์ด๋์ ๋ผ์ด์
ํด๋์ค์์๋ง ์ฌ์ฉํ ์ ์๊ณ , ๋ฉ๋ชจ๋ฆฌ์์ ์๋ฉธ๋๊ธฐ ์ ์ ๋ฆฌ ์์ ์ ๊ตฌํํฉ๋๋ค.
์์)
class Person { var name: String var pet: Puppy? //์ต์ ๋ var child: StudentC init(name: String, child: StudentC) { self.name = name self.child = child } deinit { if let petName = pet?.name { print("\(name)๊ฐ \(child.name)์๊ฒ \(petName)์ ์ธ๋ํฉ๋๋ค") self.pet?.owner = child } } } // ์ธ์คํด์ค ์์ฑ let donald: Person? = Person(name: "Donald", child: Jenny)
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ์ ๊ทผ ์ ์ด (0) 2022.08.05 [Swift] ๋๋ค ์ซ์ ๋ง๋๋ ๋ฐฉ๋ฒ(Randomisation) (0) 2022.08.04 [Swift] ํ๋กํผํฐ(property) (0) 2022.08.02 [Swift] ๊ตฌ์กฐ์ฒด(struct)์ ํด๋์ค(class) (0) 2022.08.02 [Swift] ์ต์ ๋(Optional) (0) 2022.07.26