이미 소장하고 있다면 판매해 보세요.
|
1장. SwiftUI: 새로운 시작
__왜 새로운 UI 프레임워크인가? __SwiftUI 기초 ____선언적과 명령적 ____상태 관리 ____상속 대신 조합 ____뷰가 아닌 것 빼고는 전부 뷰 ____UI는 해당 상태를 나타낸 함수 __SwiftUI 빠르게 맛보기 ____전제 조건 ____새 SwiftUI 앱 만들기 ____앱에 인터랙션 추가 ____SwiftUI의 상태 관리를 사용해 UI와 모델 동기화 유지 __연습문제 __정리 2장. SwiftUI 시작 __만들 앱 __책을 표시하기 위한 뷰 작성 __정적 데이터로 뷰 빌드 __미리 보기를 사용해 뷰가 의도한 대로 작동하는지 확인 __도서 목록 표시 __데이터 바인딩 설정 __프리뷰 캔버스 조절 __코드 재사용 ____Extract Subview를 사용해 코드 리팩터링 ____ContentView 이름 바꾸기 ____복잡한 코드 방지 작업 __뷰와 뷰 수정자 __연습문제 __팁과 트릭 __정리 3장. SwiftUI 구성 요소 __뷰 ____사용자 인터페이스 뷰 ____컨테이너 뷰 ____레이아웃 동작 ____뷰는 UI에 대한 설명일 뿐이다 __뷰 수정자 ____뷰 구성 ____하위 뷰에 뷰 수정자 적용 ____뷰 수정자를 사용해 액션 핸들러 등록 __정리 4장. 상태 관리 __SwiftUI에서 상태 관리 __바인딩 값 유형 __객체 바인딩 __ObservableObject __@StateObject ____사용 시기 __@ObservedObject ____사용 시기 __@EnvironmentObject ____사용 시기 __정리 5장. 리스트에 데이터 표시 __SwiftUI에서 목록 시작 ____리스트 행 내부에 또 다른 SwiftUI 뷰 사용 ____사용자 지정 리스트 행 구축 ____좀 더 복잡한 리스트 행 __동적 리스트 ____리스트 요소 표시 ____리스트 항목 수정 허용을 위한 리스트 바인딩 ____비동기적으로 데이터 가져오기 ____당겨서 새로 고침 ____검색 __스타일링 ____리스트 스타일 ____머리글과 바닥글 ____리스트 셀 ____구분선 __액션 ____스와이프 동작으로 삭제 ____편집 모드를 사용해 항목 이동 및 삭제 ____스와이프 동작 __리스트에서 포커스 관리 ____SwiftUI에서 포커스를 관리하는 방법 ____목록에서 포커스를 관리하는 방법 ____Enter 키 처리 ____MVVM이란? ____빈 항목 없애기 __정리 6장. 입력 폼 만들기 __단순 폼 만들기 __폼에 데이터 표시 __편집 가능 상태로 만들기 __드릴다운 내비게이션 __입력 유효성 검사 ____.onChange(of:) 사용 ____뷰 모델을 사용해 폼 유효성 검사 처리 ____@Binding과 @ObservableObject를 사용해 로컬 소스 오브 트루스를 글로벌 소스 오 ____브 트루스와 동기화하기 ____컴바인을 사용해 폼 유효성 검사 수행 __정리 7장. 컴바인 시작하기 __함수형 반응형 프로그래밍이란? __퍼블리셔 __서브스크라이버 __연산자 __연산자 조합 __퍼블리셔 합치기 __정리 8장. 컴바인으로 UI 상태 다루기 __컴바인을 이용한 입력 유효성 검사 ____회원 가입 Form 뷰 ____뷰 모델 ____사용자 이름 유효성 검사 ____유효성 검사 메시지 표시 ____연산 프로퍼티에 컴바인 파이프라인 캡슐화 ____비밀번호 검증 ____모든 코드 종합 __연습문제 __정리 9장. 컴바인을 사용한 네트워크 통신 __URLSession을 사용해 데이터 읽어오기 __컴바인으로 데이터 패치 ____키 패스를 사용한 튜플 분해 ____데이터 매핑 ____컴바인을 사용한 데이터 가져오기의 단순화 __UI 연결 __멀티스레딩 처리 __네트워크 접근 최적화 ____근본 원인 찾기 ____share 연산자를 이용한 퍼블리셔 공유 ____debounce를 사용한 추가적 UX 최적화 ____removeDuplicates를 사용해 동일한 요청을 2번 보내지 않기 __하나의 코드로 통합 __연습문제 __정리 10장. 컴바인의 오류 처리 __오류 처리 전략 ____오류 무시 ____재시도(기하급수적인 백오프 사용) ____오류 문구 표시 ____전체 뷰를 오류 뷰로 덮어버리기 ____인라인 오류 메시지 표시 __일반적인 오류 조건 및 처리 방법 ____오류 가능성 있는 네트워크 API 구현 ____API 호출과 오류 처리 ____장치/네트워크 오프라인 오류 처리 ____유효성 검사 오류 처리 ____응답 파싱 오류 처리 ____내부 서버 오류 처리 __정리 11장. 컴바인 커스텀 연산자 구현 __컴바인 연산자란? __사용자 정의 연산자 구현 __Delay를 이용한 Retry 연산자 구현 __조건부 재시도 __지수 백오프를 위한 Retry 연산자 구현 __정리 12장. 기존 API를 컴바인으로 래핑 __사례 연구 __컴바인으로 파이어스토어에 접근 ____뷰 모델 및 게시된 프로퍼티 사용 ____컴바인으로 API 래핑 __나만의 퍼블리셔 만들기 ____PassthroughSubject를 이용한 스냅숏 리스너 래핑 ____Future를 사용해 파이어스토어에서 원타임 패치 구현 __정리 13장. 스케줄러와 SwiftUI 결합 __스케줄러란? __스케줄러의 종류 __스케줄러 기본 동작 방식 __스케줄러 전환 ____subscribe(on:)로 업스트림 퍼블리셔 제어 ____receive(on:)으로 다운스트림 서브스크라이버 제어 ____스케줄링에 영향을 미치는 기타 연산자 __비동기 작업 수행 __다른 API와 통합 ____URLSession ____파이어베이스 __정리 14장. async/await 시작 __함수를 사용한 동기식 프로그래밍 __클로저를 사용한 비동기 프로그래밍 __async/await 함수를 사용한 비동기 프로그래밍 ____비동기 함수 정의 및 호출 ____비동기 함수를 병렬로 호출 __정리 15장. URLSession을 사용해 비동기적으로 데이터 가져오기 __URLSession를 사용한 비동기 데이터 가져오기 __비동기 코드 호출 __Task 뷰 수정자 __사용자가 버튼을 탭할 때 비동기 코드 호출 __당겨서 새로 고침을 사용해 뷰를 비동기적으로 업데이트 __Searchable 뷰 및 async/await __메인 스레드에서 UI 업데이트 __정리 16장. 모든 코드 종합: SwiftUI, async/await, 컴바인 __컴바인을 사용해 데이터 가져오기 __async/await를 사용해 데이터 가져오기 __이제 컴바인의 시대는 저무는가? __UI 연결... ____...컴바인 파이프라인까지 ____...async/await 메서드로 변경 __컴바인에서 비동기 코드 호출 __정리 |
Peter Friese
|
◈ 이 책에서 다루는 내용 ◈
◆ SwiftUI로 간단한 UI부터 점점 더 복잡한 UI까지 구축 ◆ SwiftUI의 상태 관리 시스템 이해 ◆ 컴바인과 스위프트의 새로운 async/await API를 사용해 네트워크에 접근하고, 그 외 비동기 API에 접근 ◆ SwiftUI, 컴바인, async/await을 사용해 애플 플랫폼에서 현대적인 애플리케이션 설계와 구조화 ◈ 이 책의 대상 독자 ◈ SwiftUI와 컴바인을 사용한 비동기 프로그래밍은 SwiftUI로 애플리케이션을 만드는 모든 사용자를 위한 책이다. SwiftUI 경험이 있고 상태 관리가 어떻게 작동하는지, 뷰 모델과 컴바인을 사용해 앱을 더 효율적으로 만드는 방법을 더 잘 이해하고 싶다면 이 책이 적합할 것이다. ◈ 이 책의 구성 ◈ 1부에서는 SwiftUI와 그 상태 관리를 다룬다. SwiftUI의 선언적 접근 방식으로 사용자 인터페이스를 구축하는 방법과 SwiftUI의 반응형 상태 관리로 여러 화면에서 애플리케이션 상태를 동기화하는 앱을 쉽게 작성하는 방법을 살펴본다. 2부에서는 애플의 반응형 프레임워크인 컴바인에 중점을 두고, 컴바인의 작동 방식과 백엔드와 인터페이스하는 UI 및 코드 모두에 사용하는 방법을 알아본다. 3부에서는 스위프트의 새로운 구조적 동시성(async/await라고 더 잘 알려져 있음)과 Combine과의 관계, 그리고 이를 사용해 URLSession과 같은 비동기 API 및 파이어베이스와 같은 다른 비동기 API와 인터페이스할 수 있는 앱을 구축하는 방법을 다룬다. ◈ 지은이의 말 ◈ 나는 2009년에 아이폰(iPhone OS(당시 명칭))를 위한 개발을 시작했다. 당시 막 업그레이드한 아이폰 3에서 아이폰 3GS를 갖고 있었고, Xcode와 오브젝티브C(Objective-C)를 사용해 첫 앱을 개발하게 돼 매우 기뻤다. 나는 이미 MS-DOS의 GW-BASIC부터 시작해 윈도우의 비주얼 베이식(Visual Basic) 및 델파이(Delphi), Jbuilder를 사용한 자바(Java), Websphere Application Developer, 이클립스(Eclipse)(기업 고객을 위한 J2EE 및 Spring 애플리케이션 구축용) 등 다양한 IDE, 언어 및 운영체제를 사용해 본 경험이 있다. 하지만 Xcode와 오브젝티브C를 사용하는 것은 다소 충격적이었다. 이전에 사용했던 다른 모든 IDE는 훨씬 더 강력했던 반면(예: 모두 리팩터링 기능을 제공했다), 대괄호만 있는 오브젝티브C는 조금 낯설게 보였기 때문이었다. 지난 수년간의 소프트웨어 개발 경험을 돌이켜보면 개발 환경의 관점에서 델파이야말로 가장 생산성 높았던 개발 도구 중 하나였다. 델파이는 성숙한 객체지향 언어(Object Pascal)와 개발자가 윈도우 앱용 UI를 빠르게 조합할 수 있는 강력한 IDE를 결합했다. 게다가 ‘신속한 애플리케이션 개발’이라는 슬로건도 확실히 매력적이었다. 하지만 Xcode와 오브젝티브C는 미래였기 때문에 나는 마음을 다잡고 사용법을 배우기 위한 여정을 계속했다. 10년 후로 빠르게 돌아가 보면 당시 나는 WWDC 2019를 막 시청한 후 SwiftUI와 그 사용 편의성에 감탄했다. SwiftUI로 UI를 구축하는 것이 매우 빠르게 느껴졌고, 여러 가지 면에서 델파이가 생각났다. 백엔드 시스템을 더 쉽게 구축할 수 있는 프레임워크와 SwiftUI를 결합하면 얼마나 멋질까 생각하기 시작했다. 구글의 개발자 관계 팀(Developer Relations team)에서 iOS 개발자 생태계에 특별히 집중할 사람을 찾고 있을 때 이것이야 말로 나에게 중요한 기회임을 깨달았다. 내가 좋아하는 언어(스위프트), 개발자가 멋진 UI를 빠르게 구축할 수 있는 UI 도구(SwiftUI), 자체 백엔드 시스템을 실행하고 운영할 필요가 없어 개발자의 효율성을 높여주는 SDK(파이어베이스)를 한꺼번에 접할 수 있는 기회였다. 이러한 모든 도구 덕택에 나는 개발자들에게 더 나은 앱을 빠르게 만드는 것을 도와줄 수 있었다. 개발자 애드보킷으로써 파이어베이스 데브렐(DevRel) 팀에 합류한 첫날부터 나는 파이어베이스 iOS SDK의 기능을 보여주기 위한 데모를 만들기 시작했다. 그리고 SwiftUI를 사용해 데모를 작성하는 것이 UIKit을 사용하는 것보다 훨씬 쉽다는 것을 금방 알게 됐다. 이러한 사용 편의성 덕분에 내가 실제로 가르치고 싶었던 내용(파이어베이스 SDK와 해당 API를 사용법)에 집중할 수 있었다. SwiftUI의 선언적 접근 방식은 프로그래밍 방식으로 UI를 구축할 때 코드가 어떻게 구성돼야 하는지에 대해 훨씬 더 많은 아이디어를 제시하므로 다른 개발자가 코드를 볼 때 의도를 매우 쉽게 이해할 수 있다. 또한 함수형 반응형 프로그래밍을 기반으로 하는 상태 관리 모델을 사용하는 SwiftUI와 컴바인을 사용하면 기본 데이터 모델 및 앱의 다른 부분과 항상 동기화되는 UI를 훨씬 쉽게 구축할 수 있다. 그렇지 않은 앱이 얼마나 끔찍한 UX를 제공하는지 우리 모두 알고 있을 것이다. 이 책의 목표는 SwiftUI, 컴바인, async/await 기능을 사용한 애플리케이션 구축 방법을 소개하는 것이다. 또한 몇 가지 가이드를 제시해 파이어베이스와 같은 비동기 백엔드 시스템과 인터페이스하는 무거운 UI 애플리케이션을 구축할 때 선언적 및 기능적 반응형 접근 방식을 사용하는 이점을 활용할 수 있는 앱을 만드는 데 도움을 주려 한다. ◈ 옮긴이의 말 ◈ SwiftUI, 컴바인(Combine), async/await 기술이 애플 생태계에 도입된 지도 어느덧 수년이 흘렀다. 하지만 번역을 시작할 당시, 국내에서는 컴바인을 본격적으로 다룬 서적을 찾기 어려웠기에 이 책의 번역을 결심하게 됐다. 과거 비슷한 비동기 프로그래밍 개념을 가진 RxSwift가 등장했을 때 많은 개발자가 왜 이러한 기술이 필요한지 이해하기 어려워했던 시기가 있었다. 개념을 이해하더라도 이를 실제 화면 구성에 적용하려면 여러 단계를 거쳐야 했고, 러닝 커브도 상당해 쉽게 접근하기 어려웠던 기억이 난다. 새로운 기술을 익힐 때는 개념뿐만 아니라 실제 화면에서 어떻게 구현되는지, 그리고 왜 이러한 개념이 필요한지를 함께 설명하는 것이 중요하다. 이 책은 이러한 관점에서 매우 효과적으로 구성돼 있다. 특히 이 책은 SwiftUI와 컴바인을 함께 활용하는 방법을 설명하고 있어 비동기 프로그래밍을 좀 더 쉽고 자연스럽게 이해할 수 있게 도와준다. 초급자도 큰 어려움 없이 접근할 수 있는 수준으로 구성돼 있어 SwiftUI와 컴바인을 처음 접하는 경우에도 유용할 것이다. 한 가지 강조하고 싶은 부분은 이 책의 예제를 반드시 직접 타이핑해 따라 해보라는 것이다. 단순히 읽는 것과 실제로 구현해보는 것은 큰 차이가 있다. 대부분의 경우 읽기만 해서는 완벽히 이해하기 어렵다. 직접 예제를 따라 해보면서 개발자의 실력은 더욱 탄탄해진다고 믿는다. 이미 나는 현업에서 SwiftUI, 컴바인, async/await를 적절히 조합해 매우 유용하게 사용하고 있다. 이 책의 목차와 예제를 따라가다 보면 체계적으로 잘 정리된 내용을 통해 실무에 바로 적용할 수 있는 통찰을 얻을 수 있을 것이다. 이 책이 독자 여러분의 개발 여정에 도움이 되기를 바라며, 항상 건강하고 즐거운 개발자 생활을 이어가길 바란다. |
|
나는 오랫동안 iOS 앱을 개발해왔고, SwiftUI는 2019년에 출시되자마자 배우기 시작했다. UIKit보다 훨씬 더 직관적이라 생각해 하루라도 빨리 사용하고 싶었던 기억이 난다. 처음에는 SwiftUI에 대한 문서가 많지 않았고 출시 즉시 바로 뛰어든 우리는 많은 부분을 스스로 알아내야 했다. 그래서 나는 SwiftUI로 앱을 빌드하면서 배운 내용을 블로그에 공유하기 시작했다. 몇 달 후 애플의 SwiftUI 팀에서 프레임워크 작업에 함께 참여하자고 연락이 왔다. 귀중한 경험이었으며, SwiftUI의 내부 작동 방식과 API 뒤에 숨겨진 결정 사항들에 대한 훌륭한 관점을 얻을 수 있었다. 물론 SwiftUI가 완벽하지는 않고 아직 더 발전할 시간이 필요하지만 이미 많은 개발자가 애플 플랫폼용 앱을 개발하는 데 많은 행복과 흥미를 느끼고 있다. 수많은 고민의 흔적이 SwiftUI API로 단순함과 직관적인 형태로 스며들어가 있는데, 이를 통해 플랫폼마다 올바른 기본 동작을 구현할 수 얻을 수 있다.
나는 2022년 4월에 애플을 퇴사하고 닐 코얼레싱(Nil Coalescing) 사에 공동 창립자이자 소프트웨어 엔지니어로 합류했다. 더 이상 SwiftUI 프레임워크에 직접 기여할 수 없다는 점은 조금 아쉬웠지만 내가 개발에 참여했던 API를 사용할 수 있고 다른 iOS 개발자들과 SwiftUI 지식을 공유할 수 있다는 점에서는 정말 행복했다. 애플이 위젯킷이나 스위프트 차트와 같은 새로운 프레임워크를 도입하면서 SwiftUI에 얼마나 많은 투자를 하고 있는지를 보면 SwiftUI의 잠재력이 크다고 생각한다. 또한 수많은 개발자가 SwiftUI를 사용하기 시작했고 애플과 커뮤니티로부터 훌륭한 SwiftUI 관련 콘텐츠를 사용할 수 있게 된 것도 기쁘다. SwiftUI로 작업할 계획이 있다면 SwiftUI와 컴바인을 사용한 이 책은 여러분의 컬렉션에 추가하기에 가치 있는 책일 것이다. 실제 프로젝트에서 비동기 API를 호출하는 것은 중요한 부분이기 때문에 SwiftUI 애플리케이션에서 비동기 API를 호출하는 데 초점을 맞춘 점이 매력적이다. 그리고 피터 프리제는 파이어베이스(Firebase)의 개발자 옹호자로 일하면서 파이어베이스 비동기 API를 많이 실험하고 SwiftUI와 함께 사용하는 방법을 가르쳤기 때문에 이에 대해 이야기할 수 있는 적임자다. 이 책은 컴바인과 스위프트 비동기/대기 API를 모두 사용하는 실용적인 예제로 가득 차 있으며, 네트워킹 또는 로컬 비동기 데이터 처리가 포함된 SwiftUI 앱을 개발하는 데 훌륭한 기초가 될 것이다. - 나탈리아 판페로바 (Natalia Panferova) (『Integrating SwiftUI into UIKit Apps』의 저자이자 닐 코얼레싱 사(https://nilcoalescing.com/about/)의 설립자) |