반응형
1. 비동기 프로그래밍
- 비동기 프로그래밍
- 작업을 동시에 실행하거나, 완료 여부를 기다리지 않고 다음 작업을 수행할 수 있는 프로그래밍 방식
- iOS에서는 주로 **GCD(Grand Central Dispatch)**와 비동기 메서드를 사용
- 동기 vs 비동기
- 동기(Synchronous): 작업이 완료될 때까지 대기
- 비동기(Asynchronous): 작업 완료를 기다리지 않고 바로 다음 작업 실행
- GCD의 주요 큐
- Main Queue: UI 작업을 처리
- Global Queue: 백그라운드 작업 처리
- Custom Queue: 사용자 정의 작업 큐
🛠 비동기 프로그래밍 예제
DispatchQueue.global().async {
print("비동기 작업 실행")
DispatchQueue.main.async {
print("UI 업데이트")
}
}
2. 제네릭(Generic)
1. 제네릭
- 코드의 유연성과 재사용성을 높이기 위해, 타입에 의존하지 않는 코드를 작성하는 방법
- 같은 로직을 다양한 타입에서 사용할 수 있도록 함
2. 제네릭 함수
- 하나의 함수로 여러 타입을 처리
func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
3. 제네릭 타입
- 구조체, 클래스, 열거형에서 제네릭을 활용 가능
struct Stack<T> {
private var elements: [T] = []
mutating func push(_ element: T) {
elements.append(element)
}
mutating func pop() -> T? {
return elements.popLast()
}
}
💡 직접 구현해보기
Step 1: 비동기 프로그래밍 구현
- 비동기 데이터 처리
- DispatchQueue.global()을 사용하여 백그라운드에서 숫자를 1부터 5까지 출력한 후, Main Queue에서 "UI 업데이트 완료"를 출력하세요
- 네트워크 시뮬레이션
- DispatchQueue를 사용해 다음을 구현하세요
- 3초간 데이터를 로드하는 작업을 비동기로 수행
- 작업 완료 후, "데이터 로드 완료" 메시지를 메인 큐에서 출력
- DispatchQueue를 사용해 다음을 구현하세요
import UIKit
DispatchQueue.global().async {
for i in 1...5 {
print(i)
}
DispatchQueue.main.async {
print("UI 업데이트 완료")
}
}
DispatchQueue.global().async {
print("데이터 로드 시작")
sleep(3)
DispatchQueue.main.async {
print("데이터 로드 완료")
}
}
Step 2: 제네릭 구현
- 제네릭 함수 작성
- 두 값을 교환하는 제네릭 함수 swapValues<T>를 작성하세요
- 제네릭 스택 구현:
- Stack<T> 구조체를 작성하고 다음 기능을 구현하세요
- push(_:): 스택에 요소 추가
- pop(): 스택에서 요소 제거
- 스택의 현재 상태를 출력하는 메서드
- Stack<T> 구조체를 작성하고 다음 기능을 구현하세요
func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
var a = 10
var b = 20
swapValues(&a, &b)
print(a, b) // 출력: 20, 10
struct Stack<T> {
private var elements: [T] = []
mutating func push(_ element: T) {
elements.append(element)
}
mutating func pop() -> T? {
return elements.popLast()
}
}
var intStack = Stack<Int>()
intStack.push(1)
intStack.push(2)
print(intStack.pop() ?? "스택 공백") // 출력: 2
반응형
'내배캠 iOS 마스터 6기' 카테고리의 다른 글
[ 사전캠프 4일차 ] 클로저/ 객체지향 프로그래밍 (0) | 2025.02.06 |
---|---|
[ 사전캠프 2일차 ] 자료구조/ 메모리 구조 및 ARC (0) | 2025.02.04 |
[ 사전캠프 1일차 ] Struct와 Class / 프로토콜 (0) | 2025.02.04 |