비동기 프로그래밍/제네릭
개념 바로 알기
1. 비동기 프로그래밍
1.
비동기 프로그래밍:
•
작업을 동시에 실행하거나, 완료 여부를 기다리지 않고 다음 작업을 수행할 수 있는 프로그래밍 방식.
•
iOS에서는 주로 **GCD(Grand Central Dispatch)**와 비동기 메서드를 사용.
2.
동기 vs 비동기
•
동기(Synchronous): 작업이 완료될 때까지 대기.
•
비동기(Asynchronous): 작업 완료를 기다리지 않고 바로 다음 작업 실행.
3.
GCD의 주요 큐:
•
Main Queue: UI 작업을 처리.
•
Global Queue: 백그라운드 작업 처리.
•
Custom Queue: 사용자 정의 작업 큐.
비동기 프로그래밍 예제
DispatchQueue.global().async {
print("비동기 작업 실행")
DispatchQueue.main.async {
print("UI 업데이트")
}
}
Swift
복사
2. 제네릭(Generic)
1.
제네릭:
•
코드의 유연성과 재사용성을 높이기 위해, 타입에 의존하지 않는 코드를 작성하는 방법.
•
같은 로직을 다양한 타입에서 사용할 수 있도록 함.
2.
제네릭 함수
•
하나의 함수로 여러 타입을 처리.
func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
Swift
복사
3.
제네릭 타입
•
구조체, 클래스, 열거형에서 제네릭을 활용 가능.
struct Stack<T> {
private var elements: [T] = []
mutating func push(_ element: T) {
elements.append(element)
}
mutating func pop() -> T? {
return elements.popLast()
}
}
Swift
복사
직접 구현해보기
앞서 복습한비동기 프로그래밍은 iOS에서 UI 작업과 백그라운드 작업을 효율적으로 처리하는 데 필수적입니다.
제네릭(Generic)은 타입에 의존하지 않고 재사용 가능한 코드를 작성할 수 있어 유연성과 효율성을 제공합니다.
이 두 개념은 iOS 개발의 핵심이니 직접 구현하며 익혀보세요!
Step 1: 비동기 프로그래밍 구현
1.
비동기 데이터 처리:
•
DispatchQueue.global()을 사용하여 백그라운드에서 숫자를 1부터 5까지 출력한 후, Main Queue에서 "UI 업데이트 완료"를 출력하세요.
힌트:
DispatchQueue.global().async {
for i in 1...5 {
print(i)
}
DispatchQueue.main.async {
print("UI 업데이트 완료")
}
}
Swift
복사
2.
네트워크 시뮬레이션:
•
DispatchQueue를 사용해 다음을 구현하세요:
◦
3초간 데이터를 로드하는 작업을 비동기로 수행.
◦
작업 완료 후, "데이터 로드 완료" 메시지를 메인 큐에서 출력.
Step 2: 제네릭 구현
1.
제네릭 함수 작성:
•
두 값을 교환하는 제네릭 함수 swapValues<T>를 작성하세요.
•
예제 입력:
var a = 10
var b = 20
swapValues(&a, &b)
print(a, b) // 출력: 20, 10
Swift
복사
2.
제네릭 스택 구현:
•
Stack<T> 구조체를 작성하고 다음 기능을 구현하세요:
◦
push(_:): 스택에 요소 추가.
◦
pop(): 스택에서 요소 제거.
◦
스택의 현재 상태를 출력하는 메서드.
•
예제 입력:
var intStack = Stack<Int>()
intStack.push(1)
intStack.push(2)
print(intStack.pop()) // 출력: 2
Swift
복사