์ธ์คํด์ค ๋๋ ํ์ ์ ๋ถ๋ถ์ธ ์ ์ฅ๋ ๊ฐ๊ณผ ๊ณ์ฐ๋ ๊ฐ์ ์ ๊ทผํ๋ค.
ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์์ ๊ฐ์ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค.
ํ๋กํผํฐ๋ ๊ฐ์ ๋ํ ์ ์ฅ์ฌ๋ถ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ฅํ๋กํผํฐ์ ๊ณ์ฐํ๋กํผํฐ๋ก ๊ตฌ๋ถ๋๋ค.
- ํ๋กํผํฐ์ ์์น
: ํด๋์ค์ ๋ด๋ถ์, ๋ฉ์๋์ ์ธ๋ถ์ ์ ์ํ๋ค. ๋ฉ์๋ ๋ด๋ถ๋ ํ๋กํผํฐ๊ฐ ์๋ ์ง์ญ๋ณ์.
1. ์ ์ฅํ๋กํผํฐ
์์ ๋ฐ ๋ณ์๋ฅผ ์ฌ์ฉํด ์ ์ ๊ฐ๋ฅํ๋ฉฐ ์ ๋ ฅ๋ ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ์ ์ฅ๋ ๊ฐ์ ์ ๊ณตํ๋ ์ญํ .
ํด๋์ค์ ๊ตฌ์กฐ์ฒด์์๋ ์ฌ์ฉ๊ฐ๋ฅํ์ง๋ง ์ด๊ฑฐํ์์๋ ์ฌ์ฉํ ์ ์์.
1-1. ์ง์ฐ ์ ์ฅ ํ๋กํผํฐ(lazy)
lazy ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, ํ๋กํผํฐ๊ฐ ํธ์ถ๋๊ธฐ ์ ๊น์ง๋ ์ ์ธ๋ง ๋ ๋ฟ ์ด๊ธฐํ ๋์ง ์๊ณ ํธ์ถ๋๋ ์์ ์ ์ด๊ธฐํ๋๋ค.
์ฒ์์ผ๋ก ํธ์ถ๋ ๊ฐ์ผ๋ก ์ด๊ธฐํ ๋๋ฉฐ, ๊ทธ ๋ค์๋ถํฐ ํธ์ถ ๋ ๋๋ ์ฒ์ ์ด๊ธฐ๊ฐ์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ๋ค์ ์ด๊ธฐํ ๋์ง ์๋๋ค.
1-2. ํด๋ก์ ๋ฅผ ์ฌ์ฉํ ์ ์ฅํ๋กํผํฐ ์ด๊ธฐํ
์๋๋ UI ๊ด๋ จ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋ง์ด ๋ดค๋ ํ์์ ์ฝ๋๋ค.
๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ์ด ์ข์ ์ด๋ ๊ฒ ์์ ์ ํ๋๋ฐ, ํด๋ก์ ๋ฅผ ์ฌ์ฉํ ์ด๊ธฐํ๋ lazy ํค์๋์ ํจ๊ป ์ฌ์ฉํ๊ธฐ ์ข๋ค.
self๋ฅผ ๋ช ์์ ์ผ๋ก ์ฐธ์กฐํ์ง ์๊ณ ๋ ํ๋กํผํฐ๋ฅผ ์ด๊ธฐํ ํ ์ ์์ด ๊ฐ๊ฒฐํด์ง๋ค.
lazy์ ํจ๊ป ์ฌ์ฉํ๋ค๋ฉด ์ต์ด ํ๋ฒ๋ง ๋ก์ง์ด ์คํ๋๋ฉฐ ์ฐธ์กฐ๋๋ ์์ ์ ๋ง์ถฐ ์ด๊ธฐํ ๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ถ๋ถ์์ ํจ์จ์ ์ด๋ค.
์์ ๊ฐ์ด ์ ์๋ ํด๋ก์ ๊ตฌ๋ฌธ์ ํด๋์ค๋ ๊ตฌ์กฐ์ฒด(SearchView)์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋ ํจ๊ป ์คํ๋์ด
์ด๊ธฐ ๊ฐ์ ๋ฐํํ๊ณ , ์ดํ ํด๋น ์ธ์คํด์ค ๋ด์์๋ ์ฌ์คํ ๋์ง ์๋๋ค.
์ ์ฅ ํ๋กํผํฐ์ ๊ฐ์ ๋ช์ ๋ค์ ์ฐธ์กฐํด๋ ์ฌํ๊ฐ ๋์ง ์๋๋ค.
(์ฐ์ฐ ํ๋กํผํฐ๋ ์ฐธ์กฐ๋ ๋๋ง๋ค ์ฌํ๊ฐ๋ ๊ฐ์ ๋ฐํ)
2. ์ฐ์ฐํ๋กํผํฐ
๋ค๋ฅธ ํ๋กํผํฐ ๊ฐ์ ์ฐ์ฐ ์ฒ๋ฆฌํ์ฌ ๊ฐ์ ์ ์ผ๋ก ๊ฐ์ ์ ๊ณตํ๋ค.
์ด๋ ํ๋กํผํฐ ๊ฐ์ ์ฐธ์กฐํ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ตฌ๋ฌธ์ด get ๊ตฌ๋ฌธ์ด๊ณ return ์ผ๋ก ํ๋กํผํฐ๊ฐ ์ ๊ณตํ๋ ๊ฐ ๋ฐํ.
get, set ๊ตฌ๋ฌธ์ด ์๋๋ฐ get ๊ตฌ๋ฌธ์ ํ์์ด๊ณ get ๊ตฌ๋ฌธ๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฝ๊ธฐ ์ ์ฉ ํ๋กํผํฐ๊ฐ ๋๋ค.
ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ๋ด๋ถ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ๋ณ์๋ง ์ฌ์ฉํด์ ์ ์ ๊ฐ๋ฅ.
var ํ๋กํผํฐ๋ช : ํ์ {
get {
//์ฐ์ฐ๊ณผ์
return ๋ฐํ ๊ฐ
}
set(๋งค๊ฐ๋ณ์๋ช ) {
//์ฐ์ฐ ๊ตฌ๋ฌธ
}
}
์ฐ์ฐํ๋กํผํฐ๋ ๋ค๋ฅธ ํ๋กํผํฐ์ ์์กด์ ์ด๊ฑฐ๋, ํน์ ์ฐ์ฐ์ ํตํด ์ป์ ์ ์๋ ๊ฐ์ ์ ์ํ ๋ ์ฌ์ฉํ๋ค.
ํฌ์ผ๋ชฌ ๋๊ฐ ์ฑ ๋ง๋ค๊ธฐ ๊ณผ์ ์ค์์ API์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ฌ ๋
id๊ฐ ํ์ํ๋ฐ id๊ฐ์ด ํจ๊ป ๋ด๋ ค ์ค์ง ์์์ ์ด๋ ค์์ ๊ฒช์๋ค.
์ด๋ id๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ์ฐ์ฐ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํด๋ณธ ๊ฒฝํ์ด ์๋ค.
์ ์ฅ ํ๋กํผํฐ์ ์ฐ์ฐํ๋กํผํฐ๋ ํด๋์ค๋ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ฐํ์ผ๋ก ๋ง๋ค์ด์ง
๊ฐ๋ณ ์ธ์คํด์ค์ ์์๋์ด ๊ฐ์ ์ ์ฅํ๊ฑฐ๋ ์ฐ์ฐ์ฒ๋ฆฌ.
๋ฐ๋ผ์, ์ด ํ๋กํผํฐ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ด ์ธ์คํด์ค๋ฅผ ํตํด์๋ง ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋ ๊ฐ์ ํ ๋นํ ์ ์๋ค.
์ธ์คํด์ค์ ์์๋ ํ๋กํผํฐ๋ค์ ์ธ์คํด์ค ํ๋กํผํฐ๋ผ๊ณ ํ๋ค.
์์ธ์ ์ผ๋ก ํด๋์ค์ ๊ตฌ์กฐ์ฒด ์์ฒด์ ์์๋์ด ๊ฐ์ ๊ฐ์ง๋,
์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์๋ ์ฌ์ฉํ ์ ์๋ ํ์ ํ๋กํผํฐ๋ ์๋ค.
3. ์ธ์คํด์ค ํ๋กํผํฐ vs ํ์ ํ๋กํผํฐ
๐ ์ธ์คํด์ค ํ๋กํผํฐ
ํน์ ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์ ์ธ์คํด์ค์ ์ํ ํ๋กํผํฐ. ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์ ๊ฐ ์ธ์คํด์ค๋ง๋ค ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง๋ค.
์ธ์คํด์ค๋ฅผ ์์ฑํ ๋๋ง๋ค ์๋ก์ด ์ธ์คํด์ค ํ๋กํผํฐ ์์ฑ
์ฌ์ฉ : ๊ฐ ์ธ์คํด์ค๊ฐ ๊ฐ๋ณ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์งํด์ผ ํ ๋
์์
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let person1 = Person(name: "Alice", age: 30)
let person2 = Person(name: "Bob", age: 25)
print(person1.name) // Alice
print(person2.name) // Bob
name๊ณผ age๋ ์ธ์คํด์ค ํ๋กํผํฐ๋ค. person1๊ณผ person2 ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ ์๋ก ๋ค๋ฅธ name๊ณผ age ๊ฐ์ ๊ฐ์ง๋ค.
๐ ํ์ ํ๋กํผํฐ
ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์ ์ธ์คํด์ค๊ฐ ์๋๋ผ ํ์ ์์ฒด์ ์ํ๋ ํ๋กํผํฐ. ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ณต์ ํ๋ ๊ฐ์ ์ ์งํ ๋ ์ฌ์ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ๋กํผํฐ ์์ static ํค์๋๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค์ ๊ฒฝ์ฐ, ์ฐ์ฐ ํ๋กํผํฐ์ผ ๊ฒฝ์ฐ class ํค์๋๋ ๊ฐ๋ฅํ๋ค.
class๋ฅผ ์ฌ์ฉํด ํ์ ํ๋กํผํฐ๋ฅผ ์ ์ธํ๋ฉด ์์๋ฐ์ ํ์ ํด๋์ค์์ override ๊ฐ๋ฅํ๋ค.
์ฌ์ฉ: ์ธ์คํด์ค๊ฐ ๊ณต์ ํด์ผํ๋ ๋ฐ์ดํฐ๋ ์ค์ ์ ๊ด๋ฆฌํ ๋
์์
class Person {
var name: String
var age: Int
// ํ์
ํ๋กํผํฐ
static var species = "Homo Sapiens"
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let person1 = Person(name: "Alice", age: 30)
let person2 = Person(name: "Bob", age: 25)
print(Person.species) // Homo Sapiens
Person.species = "Human"
print(Person.species) // Human
species๋ ํ์ ํ๋กํผํฐ๋ค.
Person์ด๋ผ๋ ํด๋์ค์ ๋ชจ๋ ์ธ์คํด์ค๋ species๋ผ๋ ๊ณตํต๋ ๊ฐ์ ๊ฐ์ง๋ฉฐ,
์ด ๊ฐ์ ํ์ ์์ฒด์ ์ํด ์๊ธฐ ๋๋ฌธ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์ ๊ทผํ ์ ์๋ค.
NetworkManager์ ํ์ ํ๋กํผํฐ
์ญํ : ๋คํธ์ํฌ ๋งค๋์ ์์ shared๋ ํ์ ํ๋กํผํฐ๋ ์ฑ๊ธํค ํจํด์ผ๋ก ๊ตฌํ๋ ๋คํธ์ํฌ ๋งค๋์ ์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋ค.
์ด๋ฅผ ํตํด ์ฑ ์ ์ฒด์์ ๋์ผํ ๋คํธ์ํฌ ๋งค๋์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ์์ ์ ์ผ๊ด๋๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค.
์ฑ๊ธํค ํจํด: ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์กด์ฌํ๋๋ก ์ ํํ๋ ๋์์ธ ํจํด
์ฌ์ฉ: ๋คํธ์ํฌ ๋งค๋์ ์ ๊ฐ์ ๊ฐ์ฒด๋ ์ฌ๋ฌ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ํ์๊ฐ ์์ผ๋ฉฐ,
ํ๋์ ์ธ์คํด์ค๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๋คํธ์ํฌ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฑ๊ธํค ํจํด์ ์ฌ์ฉ.
์ ์์ ์์ NetworkManager.shared๋ฅผ ํตํด ๋คํธ์ํฌ ๋งค๋์ ์ ์ธ์คํด์ค์ ์ ๊ทผํ๊ณ ์๋ค.
shared๋ ํ์ ํ๋กํผํฐ๋ก, NetworkManager ํด๋์ค์ ๋ชจ๋ ๊ณณ์์ ๋์ผํ ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์๋ค.
4. ํ๋กํผํฐ ์ต์ ๋ฒ
ํ๋กํผํฐ์ ๊ฐ์ ํ๋กํผํฐ ๊ฐ์ ๋ชจ๋ฆฌํฐ๋ง ํ๋ ์ญํ ๋ก, ์ฌ์ฉ์๊ฐ ์ ์ํ ํน์ ์ก์ ์ ๋ฐ์ํ๋๋ก ์ฒ๋ฆฌํ๋ค.
์ ์ฅ ํ๋กํผํฐ์ ์ถ๊ฐํ ์ ์๋ค.
'๐ iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
UITextField์ ๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด (0) | 2024.08.28 |
---|---|
[ Swift ] ํ๋กํ ์ฝ(protocol) (0) | 2024.08.25 |
SceneDelegate์์ navigationController ์ค์ (0) | 2024.08.04 |
register(_:forCellWithReuseIdentifier:) ๋ฉ์๋์์ PosterCell.self๋ฅผ ์ฌ์ฉํ๋ ์ด์ (1) | 2024.08.04 |
[ Swift ๊ธฐ์ด ๋ฌธ๋ฒ ] ์ ๋ค๋ฆญ(Generics) (0) | 2024.07.31 |