https://explorer89.tistory.com/361
🤔 Future란? (Combine의 비동기 처리)
https://developer.apple.com/documentation/combine/future Future | Apple Developer DocumentationA publisher that eventually produces a single value and then finishes or fails.developer.apple.com 🚀 Future란? (초보자를 위한 쉬운 설명)Future는
explorer89.tistory.com
🤔 Combine에서 Future를 쓰는 의미?
Combine은 비동기 이벤트 스트림을 처리하는 프레임워크
그런데 Combine의 기본 Publisher들은 여러 개의 이벤트를 방출할 수 있는 구조
하지만, 일부 작업은 오직 한 번만 값이 필요
✅ 예제:
- 네트워크 요청 후 결과 한 번만 반환
- Firebase 로그인 (성공 or 실패)
- 파일 다운로드 후 완료되면 한 번만 알림
이런 경우, Future를 사용하면 적절한 해결책이 됨! 🌟
📌 Future가 있을 때 & 없을 때 차이
✅ Future를 사용하면
- 한 번만 값을 방출한 후 자동으로 종료
- 네트워크 요청, 인증, 데이터 로드 같은 작업을 깔끔하게 처리
✅ Future 없이 Combine만 사용하면?
- 일반적인 Publisher(예: PassthroughSubject, Just)를 사용
- 필요 이상으로 불필요한 값이 여러 번 방출될 가능성이 있음
- Just는 즉시 값을 방출하지만, Future는 비동기적으로 값을 전달 가능
📌 Future가 없을 때 예제 (PassthroughSubject 사용)
Future 없이 Combine을 사용하려면 PassthroughSubject를 직접 만들어서 사용
import Combine
let subject = PassthroughSubject<Int, Never>()
func fetchNumber() {
DispatchQueue.global().asyncAfter(deadline: .now() + 2) {
let number = Int.random(in: 1...10)
subject.send(number)
subject.send(completion: .finished) // 종료
}
}
fetchNumber()
let cancellable = subject.sink { completion in
print("✅ 완료: \(completion)")
} receiveValue: { value in
print("🎲 랜덤 숫자: \(value)")
}
✅ 작동은 하지만, 불필요한 코드가 많고 직접 종료를 관리해야 함.
📌 Future가 있을 때 예제
import Combine
func fetchNumber() -> Future<Int, Never> {
return Future { promise in
DispatchQueue.global().asyncAfter(deadline: .now() + 2) {
let number = Int.random(in: 1...10)
promise(.success(number))
}
}
}
let cancellable = fetchNumber()
.sink { value in
print("🎲 랜덤 숫자: \(value)")
}
✅ 자동으로 종료되므로 completion을 신경 쓸 필요가 없음!
📌 결론: Future는 특정 상황에서 더 유용!
Future 사용 | Future 없이 Combine만 사용 | |
✅ 비동기 작업 | 네트워크 요청, 인증, 데이터 로드 | 네트워크 요청 시 직접 Publisher 관리 필요 |
✅ 이벤트 개수 | 오직 1회 | 여러 번 방출될 가능성 있음 |
✅ 관리 필요함 | 자동으로 한 번만 값 방출 후 종료 | PassthroughSubject 는 직접 종료 관리 필요 |
💡 즉, "한 번만 값을 받을 비동기 작업"에는 Future가 훨씬 편리하고 깔끔! 🚀
'UIKIT > 비동기' 카테고리의 다른 글
🤔 Completion Handler를 Combine으로 변경할 때 고려해야 할 점? (0) | 2025.03.12 |
---|---|
🤔 Future란? (Combine의 비동기 처리) (0) | 2025.02.26 |