Swiftμμ λκΈ° μμ κ³Ό λΉλκΈ° μμ μ μ°¨μ΄μ μ μ€λͺ νμΈμ. κ°κ°μ μΈμ μ¬μ©νλμ?
λκΈ°μ μμ κ³Ό λΉλκΈ°μ μμ μ κ°κ° κ³ μ ν νΉμ±κ³Ό μ¬μ© μ¬λ‘λ₯Ό κ°μ§ μλ‘ λ€λ₯Έ μ½λ μ€ν λ°©μμ μλ―Έν©λλ€.
λ©μΈ μ€λ λκ° μ°¨λ¨λλ©΄ μ±μ΄ μλ΅νμ§ μκ±°λ λ©μΆλ λ± μ¬μ©μ νκ²½μ΄ μ νλ μ μμΌλ―λ‘ λ©μΈ μ€λ λμ μλ΅μ±μ μ μ§νλ κ²μ΄ μ€μν©λλ€. λ°λΌμ λ€μ μκ°μ΄ 걸릴 μ μλ μμ μ λΉλκΈ°μ μΌλ‘ μννμ¬ λ©μΈ μ€λ λκ° μ¬μ©μ μνΈ μμ©μ κ³μ μ²λ¦¬νκ³ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μννκ² μ λ°μ΄νΈν μ μλλ‘ ν΄μΌ ν©λλ€.
λκΈ°μ μμ μμλ νλ‘κ·Έλ¨μ΄ λ€μ μ½λ μ€λ‘ λμ΄κ°κΈ° μ μ μμ μ΄ μλ£λ λκΉμ§ κΈ°λ€λ¦½λλ€. μμ μ΄ μλ£λ λκΉμ§ μ€ν νλ¦μ΄ μ°¨λ¨λ©λλ€. λκΈ°μ μμ μ μμ°¨μ μΌλ‘ μ°¨λ‘λ‘ μ€νλκΈ° λλ¬Έμ μΆλ‘ νκΈ°κ° κ°λ¨ν©λλ€.
μΌλ°μ μΌλ‘ λΉ λ₯΄κ³ , μ°¨λ¨λμ§ μμΌλ©°, λ€νΈμν¬ μμ²κ³Ό κ°μ΄ μ μ¬μ μΌλ‘ μκ°μ΄ λ§μ΄ 걸리λ μμ μ΄ ν¬ν¨λμ§ μλ μμ μ λκΈ° μμ μ μ¬μ©ν©λλ€. λκΈ°μ μμ μ κ°λ¨ν κ³μ°, μΈλ©λͺ¨λ¦¬ λ°μ΄ν° μ‘°μ λλ λμ λλ μ§μ°μ΄λ μ¬μ©μ μΈν°νμ΄μ€μ μ μ§ μμ΄ λΉ λ₯΄κ² μλ£ν μ μλ κΈ°ν μμ μ μ ν©ν©λλ€.
μ)
func synchronousTask() {
print("Swiftable")
print("iOS")
print("Community")
}
synchronousTask()
// Swiftable
// iOS
// Communityκ° μ½λ μ€μ΄ μ€νλκΈ° μ μ μ΄μ μ½λ μ€μ΄ μλ£λ λκΉμ§ κΈ°λ€λ¦¬κΈ° λλ¬Έμ λͺ¨λ μΈμ ν¨μκ° μ°¨λ‘λ‘ μ€νλ©λλ€.
λ€λ₯Έ μμλ₯Ό ν΅ν΄ μ΄ν΄ν΄ λ΄
μλ€. sort() λ©μλλ₯Ό μ¬μ©νμ¬ λ¬Έμμ΄μ λ°°μ΄μ μ μ리μμ μ λ ¬νλ ν¨μλ₯Ό μ μν΄ λ³΄κ² μ΅λλ€. sort() λ©μλλ λ¬Έμμ΄μ κΈ°λ³Έ μ λ ¬ κΈ°μ€(μνλ²³ μμ)μ λ°λΌ λ°°μ΄μ μμλ₯Ό μ€λ¦μ°¨μμΌλ‘ μ¬μ λ ¬νλ λκΈ°μ μ°μ°μ
λλ€.
μ)
var words = ["swiftable", "developer", "community"]
func sortWords() {
words.sort() // synchronous in-memory sorting
}
sortWords()
print("words: \(words)")
// words: ["community", "developer", "swiftable"]sortWords() ν¨μλ₯Ό νΈμΆνλ©΄ νμ¬ μ€λ λμμ words.sort() μ€μ λκΈ°μ μΌλ‘ μ€νν©λλ€. μ¦, νμ¬ μ€λ λ(μ΄ κ²½μ° λ©μΈ μ€λ λ)λ λ€μ μ½λ μ€λ‘ μ΄λνκΈ° μ μ μ λ ¬ μμ
μ΄ μλ£λ λκΉμ§ μ°¨λ¨νκ³ λκΈ°ν©λλ€.
μ΄ κ²½μ° μΈλ©λͺ¨λ¦¬ λ°°μ΄μ μ λ ¬νλ λ° λκΈ°μ μ°μ°μ μ¬μ©νλ©΄ μμ μ΄ λΉ λ₯Ό κ°λ₯μ±μ΄ λκ³ μ¬μ©μ μΈν°νμ΄μ€κ° λμ λκ² μ§μ°λκ±°λ λ©μΆμ§ μμΌλ―λ‘ νμ©λ©λλ€.
λΉλκΈ° μμ μμλ νλ‘κ·Έλ¨μ΄ μμ μ΄ μλ£λ λκΉμ§ κΈ°λ€λ¦¬μ§ μμ΅λλ€. λμ λΉλκΈ° μμ μ΄ μλ£λ λκΉμ§ κΈ°λ€λ¦¬λ λμ λ€λ₯Έ μμ μ κ³μ μ€νν©λλ€. λΉλκΈ° μμ μ μΌλ°μ μΌλ‘ λ€νΈμν¬ μμ², νμΌ I/O λλ μ λλ©μ΄μ κ³Ό κ°μ΄ μλ£νλ λ° λ€μ μκ°μ΄ 걸릴 μ μλ μμ μ μ¬μ©λ©λλ€.
μ)
let imageURL = URL(string: "https://example.com/image.jpg")!
let task = URLSession.shared.dataTask(with: imageURL) { data, response, error in
if let data = data, let image = UIImage(data: data) {
DispatchQueue.main.async {
// update downloaded image to UI on the main queue
}
}
}
task.resume() // asynchronous image downloadμμ μμμ μ΄λ―Έμ§ λ€μ΄λ‘λ μμ μ λ°±κ·ΈλΌμ΄λ λκΈ°μ΄μμ λΉλκΈ°μ μΌλ‘ μνλλ λ°λ©΄, λ©μΈ λκΈ°μ΄μ μλ΅μ±μ μ μ§νλ©° μ¬μ©μ μνΈμμ©μ΄λ λ€λ₯Έ μμ μ μ²λ¦¬ν μ μμ΅λλ€. μ΄λ―Έμ§ λ°μ΄ν°κ° λ€μ΄λ‘λλλ©΄ μλ£ νΈλ€λ¬κ° νΈμΆλκ³ λ©μΈ λκΈ°μ΄μ μ΄λ―Έμ§λ₯Ό ν λΉνμ¬ μνν UI μ λ°μ΄νΈλ₯Ό 보μ₯ν©λλ€.
λΉλκΈ° μ΄λ―Έμ§ λ‘λ©μ μ¬μ©νλ©΄ μκ°μ΄ μ€λ 걸릴 μ μλ λ€μ΄λ‘λ νλ‘μΈμ€ μ€μ λ©μΈ μ€λ λκ° μ°¨λ¨λμ΄ μ¬μ©μ μΈν°νμ΄μ€κ° μλ΅νμ§ μκ±°λ μ μ§λλ κ²μ λ°©μ§ν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ λ€νΈμν¬ μ΄μμ΄λ κΈ°ν μ₯κΈ° μ€ν μμ μ μ²λ¦¬ν λμλ μννκ³ λ°μμ΄ λΉ λ₯Έ μ¬μ©μ κ²½νμ 보μ₯ν©λλ€
κ°κ°μ μ¬μ© μκΈ°:
λκΈ° μμ
:
νΉμ μμ
μ΄ μμ°¨μ μΌλ‘ μλ£λλλ‘ ν΄μΌ νκ³ λ€μ μ½λ μ€μ΄ μ΄μ μμ
μ κ²°κ³Όμ λ°λΌ λ¬λΌμ§λ κ²½μ° λκΈ°ν μμ
μ μ¬μ©νμΈμ. λκΈ°μ μμ
μ μ€ν νλ¦μ μ°¨λ¨νλ κ²μ΄ νμ©λλ λ¨μνκ³ μλͺ
μ΄ μ§§μ μμ
μ μ ν©ν©λλ€.
λΉλκΈ° μμ : μ¬μ©μ μ λ ₯μ κΈ°λ€λ¦¬λ λ€νΈμν¬ μμ² μμ κ³Ό κ°μ΄ μ€ν νλ¦μ μ°¨λ¨ν΄μλ μ λλ μ₯κΈ° μ€ν μμ μ μνν΄μΌ νλ κ²½μ° λΉλκΈ° μμ μ μ¬μ©νμΈμ. λΉλκΈ° μμ μ UIμ λ°μμ±μ μ μ§νκ³ μμ μ λμμ μ€ννμ¬ μ λ°μ μΈ μ±λ₯μ ν₯μμν€λ λ° νμμ μ λλ€.
Swiftλ Grand Central Dispatch(GCD), Operations, μ΅μ async/await ꡬ문 λ± λΉλκΈ° μμ μμ μ μν μ¬λ¬ λ©μ»€λμ¦μ μ 곡ν©λλ€. μ΄λ¬ν λ©μ»€λμ¦μ μ¬μ©νλ©΄ λ°±κ·ΈλΌμ΄λ λκΈ°μ΄μ΄λ 컨ν μ€νΈμ μμ μ λμ€ν¨μΉνκ³ ν΄λΉ μμ μ κ²°κ³Ό λλ μλ£λ₯Ό λΉλκΈ°μ μΌλ‘ μ²λ¦¬νμ¬ λ©μΈ μ€λ λκ° κ³μ μλ΅ν μ μλλ‘ ν μ μμ΅λλ€.
