비동기 프로그래밍 / 제네릭
비동기 프로그래밍
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 업데이트")
}
}
제네릭(Generic)
1. 제네릭 :
- 코드의 유연성과 재사용성을 높이기 위해, 타입에 의존하지 않는 코드를 작성하는 방법.
- 같은 로직을 다양한 타입에서 사용할 수 있도록 함.
2. 제네릭 함수
- 하나의 함수로 여러 타입을 처리.
func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
* T : 제네릭 타입 -> 어떤 데이터 타입이든 사용 가능.
* inout : 입력 값 변경 가능 -> 함수 내에서 값을 변경할 수 있도록 허용.
* a 값을 temp에 임시 보관, b 값을 a에 대입, temp에 보관했던 a값을 b에 대입.
* & 연산자 : inout 매개변수를 사용하려면 참조 전달을 위해 &를 붙여야 함.
* 제네릭을 활용하면 어떤 데이터 타입이든 교환 가능.
3. 제네릭 타입
- 구조체, 클래스, 열거형에서 제네릭을 활용 가능.
직접 구현해보기
Step 1 : 비동기 프로그래밍 구현
1. 비동기 데이터 처리 :
DispatchQueue.global()을 사용하여 백그라운드에서 숫자를 1부터 5까지 출력한 후, Main Queue에서 "UI 업데이트 완료"를 출력하세요.
* 백그라운드에서 무거운 작업을 실행하면서 UI를 멈추지 않기 위해.
* UI 업데이트는 반드시 메인 스레드에서 실행해야 하므로 DispatchQueue.main.async 사용
* 비동기 작업을 사용하면 앱이 더 부드럽고 빠르게 동작함.
2. 네트워크 시뮬레이션 :
- DispatchQueue 를 사용해 다음을 구현하세요
- 3초간 데이터를 로드하는 작업을 비동기로 수행.
- 작업 완료 후, "데이터 로드 완료" 메시지를 메인 큐에서 출력.
* 기존방식도 가능했고, chat gpt가 알려준 방법도 가능했음.
* chat gpt 방식이 깔끔해 보이나, 맨위 loadData의 역할이 무엇인지 잘 모르겠음...
(화면을 보여주기 전에 필요한 데이터를 미리 로드하거나, 뷰에 필요한 정보를 설정하는 등의 역할을 한다고 함.)
(네트워크에서 데이터를 받아오거나 DB에서 정보를 로드하는 작업이 될 수 있음.)
Step 2 : 제네릭 구현
1. 제네릭 함수 작성:
- 두 값을 교환하는 제네릭 함수 swapValues<T>를 작성하세요.
2. 제네릭 스택 구현 :
- Stack<T> 구조체를 작성하고 다음 기능을 구현하세요
- push(_:) 스택에 요소 추가.
- pop() 스택에서 요소 제거.
- 스택의 현재 상태를 출력하는 메서드.
'iOS' 카테고리의 다른 글
[iOS] 2025.03.03 팀프로젝트(1) (1) | 2025.03.03 |
---|---|
[iOS] 2025.02.26 Combine (0) | 2025.02.26 |
[iOS] 2025.02.25 클로저 / 객체지향 프로그래밍 (0) | 2025.02.25 |
[iOS] 2025.02.24 자료구조 / 메모리 구조 및 ARC (0) | 2025.02.24 |
[iOS] 2025.02.21 Struct와 Class / 프로토콜 (0) | 2025.02.21 |