일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ios
- tabman
- watchkit
- Complication
- UITableView
- Firebase
- github
- Sendbird
- WWDC22
- Tuist
- backend
- widgetkit
- 코테
- Delegate Pattern
- UIDatePicker
- UIStackView
- createml
- SwiftUI
- Project
- Flutter
- spring
- Coding Test
- swift concurrency
- Swift
- app intents
- task.yield()
- coreml
- fcm
- cloud functions
- Apple Developer Academy
- Today
- Total
azhy의 iOS 이야기
CPS Style 본문
CPS(Continuation-Passing Style)
혹시 CPS에 대해서 들어보신 분이 계실까요?
저도 처음에는 몰랐는데, 회사에 개발자분들하고 이야기하다가 들은 키워드입니다. 조금 알아보니 이미 사용하고 있던 개념이더라고요..
CPS는 제어 흐름과 계산의 결과를 명시적으로 나타내는 스타일입니다. 이 패턴은 함수가 계산의 결과를 반환하지 않고, 다른 함수에 결과를 전달하는 방식으로 동작합니다.
CPS의 핵심 원리는 함수가 결과를 반환하지 않고, 결과를 전달할 다른 함수(컨티뉴에이션)를 호출하는 것입니다.
CPS 패턴의 특징
- 명시적 흐름 제어: 함수가 작업을 완료한 뒤 무엇을 할지 컨티뉴에이션으로 지정합니다.
- 비동기 처리에 유용: 비동기적 작업과 콜백 메커니즘을 구현하기에 적합합니다.
- 스택 프레임 사용 최소화: 재귀적 작업에서도 스택 사용을 줄이는 데 유리합니다.
자 이제 여기서 iOS 관점으로 한번 바라볼까요?
여기서 중요한 부분은 '계산의 결과를 반환하지 않고, 다른 함수에 결과를 전달'입니다. 여기서 알아차리신 분들도 계시겠죠?
바로 iOS에서는 escaping closure과 swift concurrency에서 나온 개념인 continuation입니다.
escaping closure, continuation 둘 다 결과를 반환하지 않고 결과를 전달할 다른 함수를 호출하는 형태를 가지고 있습니다.
따라서 이 두 형태는 CPS 스타일을 활용했다라고 이야기할 수 있습니다.
지금까지 잘 몰랐던 개념이지만, escaping closure와 continuation을 사용할 때 그 안에서 CPS 스타일이 활용된다는 것을 상식으로 알고 있으면 좋을 것 같습니다.
'iOS' 카테고리의 다른 글
[iOS] 비트맵 이미지와 벡터 이미지 (2) | 2024.11.14 |
---|---|
[iOS] Shortcuts을 사용해보자 (1) | 2024.11.14 |
[iOS] 재미있었던 CreateML 사용 후기 (0) | 2024.11.14 |
[iOS] Static Framework & Dynamic Framework (feat. Tuist) (0) | 2024.11.14 |
[iOS] HIG, Human Interface Guide (0) | 2024.11.14 |