ํ๋กํ ์ฝ์ด๋?
- ํ๋กํ ์ฝ: ์ต์ํ์ผ๋ก ๊ฐ์ ธ์ผํ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ค. ํด๋น Object๊ฐ task๋ฅผ ์ํํ๊ธฐ ์ํด ๋ฐ๋์ ๊ตฌํํด์ผํ๋ ๊ฒ์ ์ ์ํด์ค๋ค. Java์ interface์ ๋น์ทํ ์ญํ ์ ํ๋ค.
- protocol์ ์ ์ธ์ด๊ณ , type์์ ๊ตฌํํด์ค์ผํ๋ค.
ex1) Swift์์ ์ ๊ณตํ๋ ํ๋กํ ์ฝ ์์ ์ค ํ๋์ธ CustomStringConvertible์ ์ฌ์ฉํ ์ฝ๋
์ฌ์ฉ์๊ฐ ์ง์ ํ ํ๋๋ก class๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
var greeting = "Hello, playground"
class person: CustomStringConvertible {
let name: String
let age: Int
let isFemale: Bool
init(name: String, age: Int, isFemale: Bool) {
self.name = name
self.age = age
self.isFemale = isFemale
}
var description: String {
return "Person (name: \(name), age: \(age), isFemale: \(isFemale))"
}
}
let Jedi = person(name: "Jedi", age: 25, isFemale: true)
let Joshua = person(name: "Joshua", age: 28, isFemale: false)
print(Jedi) // Person (name: Jedi, age: 25, isFemale: true)
ex2) Swift์์ ์ ๊ณตํ๋ ํ๋กํ ์ฝ ์์ ์ค ํ๋์ธ Equatable ์ ์ฌ์ฉํ ์ฝ๋
Equatable์ ์ฌ์ฉํ๋ฉด ์๋ ์์์ฒ๋ผ '==' ์ฐ์ฐ์๋ฅผ Customํ์ฌ ์ํ๋ ๋๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค!
struct Customer: Equatable {
var name: String
var phoneNumber: String
var birthDay: String
// phoneNumber๊ฐ ๊ฐ์ผ๋ฉด ๊ฐ์ ์ธ๋ฌผ์
static func ==(lhs: Customer, rhs: Customer) -> Bool{
return lhs.phoneNumber == rhs.phoneNumber
}
}
let customer1 = Customer(name: "Jedi1", phoneNumber: "010123456789", birthDay: "20220225")
let customer2 = Customer(name: "jedi2", phoneNumber: "010123456789", birthDay: "19000225")
if customer1 == customer2 {
print("Same Customer")
}else{
print("Different Customer")
}
// ์ถ๋ ฅ: Same Customer
ex3) Swift์์ ์ ๊ณตํ๋ ํ๋กํ ์ฝ ์์ ์ค ํ๋์ธ Codable ์ ์ฌ์ฉํ ์ฝ๋
struct๋ฅผ Alamofire๋ URLsession ์ฌ์ฉ ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉํ๋ json ํ์์ผ๋ก ๋ง์ถฐ์ค ์ ์๋ค.
import Foundation
struct Customer: Equatable, Codable {
var name: String
var phoneNumber: String
var birthDay: String
}
let customer1 = Customer(name: "Jedi1", phoneNumber: "010123456789", birthDay: "20220225")
let jsonEncoder = JSONEncoder()
if let jsonData = try? jsonEncoder.encode(customer1), let jsonString = String(data: jsonData, encoding: .utf8){
print(jsonString)
}
์ด๋ ๊ฒ Swift์์ ์ ๊ณตํ๋ ํ๋กํ ์ฝ๋ฟ๋ง ์๋๋ผ, ๊ฐ๋ฐ์๊ฐ ์ค์ค๋ก ํ๋กํ ์ฝ์ ๋ง๋ค์ด ์ฌ์ฉํ ์๋ ์๋ค.
Delegation
- delegation: ํด๋์ค์ ๊ตฌ์กฐ์ฒด๊ฐ ํด์ผํ ์ผ ์ค ์ผ๋ถ๋ฅผ ๋ค๋ฅธ ํ์ ์ ์ธ์คํด์ค๋ก ์์(delegate)ํ๋ ๋์์ธ ํจํด์ด๋ค.
- ์์์ ํ ๋ ํ๋ '์ฝ์'์ ํ๋กํ ์ฝ์ ํตํด ๊ตฌํํ๋ค.
Delegate๋ ์ฌ์ค ์ง์ UIkit์ ์ ์ฉํด์ ์ดํดํ๋ ๊ฒ์ด ์ฝ๊ธฐ ๋๋ฌธ์ ์์์ ํจ๊ป ๋์์ค๊ฒ ์ต๋๋ค ์ด์ด..
'๐ iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] map, flatMap, compactMap ? (0) | 2022.06.28 |
---|---|
[Swift] inout? | ํจ์ ๋ด๋ถ์์ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ง์ํ๊ธฐ (0) | 2022.06.23 |
[Swift] Guard๋ฌธ | guard let (0) | 2021.08.03 |
[Swift] Optionals (0) | 2021.07.26 |
[Swift] ๊ธธ์ด๊ฐ ์ ํด์ง ๋ฆฌ์คํธ ๋ง๋ค๊ณ 0์ผ๋ก ์ด๊ธฐํํ๊ธฐ (0) | 2021.06.30 |