개요
2024년이 되고, iOS 개발자로 취업을 목표로 공부하면서 배웠던 것들에 대해 정리하고
하반기에는 어떤 목표를 가지고 무엇을 공부할지 정리하는 글이다
상반기에 배운 것들 요약
물론 모든 내용을 깊게 이해하고 기억하고 있다면 좋겠지만, 나는 무엇을 모르는지 알 수 있는 것을 목표로 공부했다
자바 스프링을 공부할 때, 스프링과 관련된 기반지식(기본 원리 등)과 구성 요소들을 중점적으로 공부해 두고
실제 코드는 코파일럿의 도움을 많이 받아가며 작성했었는데, 개인적으로 이때 엄청나게 효율적으로 빠르게 배울 수 있었다고 생각한다
iOS 개발 공부를 할 때도 기본이 되는 것들을 중점적으로 우선 공부하려고 했다(WWDC24에 발표에 따르면 올해 안으로 코파일럿 같은 기능이 XCode에서도 공식적으로 지원한다고 한다)
다음은 초기에 목표로 한 공부 키워드들이다
- Swift
- Asynchronous Programming
- Combine
- SwiftUI
- iOS Frameworks
- Clean Architecture
Swift
우선 개발을 하려면 Swift 언어를 공부해야 한다
다행히 정말 잘 만들어진 언어라 배우기 쉬우면서도 강력하다
다른 언어와 달리 프로토콜지향 프로그래밍 방식을 지향한다
Swift는 프로토콜을 사용해서 기존 상속으로 확장하는 방식인 객체지향 프로그래밍 방식의 상속 오버헤드를 없애고 복잡성을 줄인다(수직적 확장보단 수평적 확장)
물론 다양한 장점들이 더 있겠지만, 다음에 언급할 비동기 관련 내용과 더불어 프로토콜은 SwiftUI에서 사용되는 중요한 요소들이라고 생각한다
Asynchronous Programming
개인적으로 어떤 언어를 배울 때, 나는 기본적인 문법들을 보고 비동기 및 병렬 처리 부분을 본다
이유를 잘 모르겠지만, 이런 부분들을 보는 것은 재미있다
비동기 작업을 하기 위해서는 메인스레드 말고 다른 스레드가 존재해야 한다는 점을 생각해 보면, 결국 스레드 관리가 필요하다
Swift 5.5 이전까지는 GCD(Grand Central Dispatch)를 통해 이런 작업을 쉽게 도와줘 비동기 작업을 수행시켰고
Swift Concurrency가 나오면서는 async/await 키워드를 통해 더 간단하게 비동기 작업을 수행시킬 수 있게 되었다
Combine
비동기 작업을 수행하는 방식은 여러 가지가 있을 수 있다
Combine은 반응형 프레임워크로 비동기 이벤트를 처리하고, 이벤트의 흐름을 관리하는 API를 제공해 준다
SwiftUI에서 ViewModel을 구현할 때, Combine은 기반이 되는 프레임워크다
- Subject는 Publisher이자 Subscriber고, ObservableObject의 @Published가 Subject다
SwiftUI
UIKit 프레임워크도 있지만, 나는 SwiftUI를 중점적으로 공부했다
SwiftUI의 뷰는 struct고 View 프로토콜을 따른다
클래스(+클로저)가 아닌 값 타입은 스택에 할당되어 더 빠르고 더 효율적인 메모리 관리가 가능하다
선언적 구문과 함수형 프로그래밍
React 공부 경험이 있어서, 선언적 구문을 사용하는 게 편했다(향후 전망에 더불어 익숙함 때문에 나는 SwiftUI를 선택했다)
선언적 구문은 UI를 어떻게 그릴지가 아니라 무엇을 그릴지에 초점을 맞춘다
이런 구문은 함수형 프로그래밍 방식을 통해 사용할 수 있는데
함수형 프로그래밍에서는 함수가 일급 객체로 취급되며, 상태와 가변 데이터를 피하고, 대신 불변성과 순수 함수를 선호한다
SwiftUI에서는 이러한 함수형 프로그래밍의 원칙들이 적극적으로 활용된다
struct ContentView: View {
var body: some View {
Text("Hello, World!")
}
}
또, ViewModifier는 뷰를 변형시키는데 체인형식으로 코드를 작성하게 된다
Text("Hello, World!")
.font(.largeTitle)
상태관리
SwiftUI에서는 뷰의 body를 순수 함수로 취급하지만, body 함수는 애플리케이션의 상태에 의존한다
이때 이 상태는 @State, @StateObject, … 등의 프로퍼티 래퍼를 통해 관리된다
즉, 이런 프로퍼티 래퍼가 붙은 프로퍼티는 SwiftUI가 관찰하고 있다는 것을 의미하며
상태가 변경되면, SwiftUI는 뷰의 body를 다시 호출하여 UI를 업데이트하게 한다
UIKit 통합
UIKit은 미리 정의된 유용한 UIView들을 제공해 주는데, 이를 SwiftUI는 이를 활용할 수 있는 방법을 제공해 준다
이를위해 UIKit에 관한 기본적인 개념들을 공부했다
보통 UIKit은 Delegate Pattern을 많이 사용하는데 SwiftUI로 통합시키면 Coordinator를 사용한다
iOS Frameworks
애플은 iOS 개발에 도움이 되는 다양한 프레임워크들을 제공해 준다(종류가 너무나 많다)
대충 사용해 보면서 정리했던 것들은 대략적으로 다음과 같다
- Foundation
- Combine
- Observation(WWDC23)
- AVFoundation, AVKit
- UserNotification
- Photos
- SwiftData(WWDC23)
- Core Data
- Core Location
- Mapkit
- EventKit
- WidgetKit
- [x] SiriKit
여러 기능들을 찾아가면서 다양한 프레임워크들에서 어떤 기능들을 제공해 주는지 대략적으로 알게 되었고
특정 프레임워크를 사용해야 할 때, 문서를 읽고 사용하는 방법을 배우는 것에 초점을 두고 공부했다
SiriKit의 경우, 공부해야 한다고 생각했지만 애플디벨로퍼 이슈 때문에 미루게 되었다(WWDC24를 보니 빨리 공부해야겠다)
Clean Architecture
클린 아키텍처 핵심은 관심사의 분리, 인터페이스, 의존규칙이다
앱을 지속적으로 확장하면서 유지보수 가능한 클린 아키텍처를 지향하는 방법에 대해 공부했고
또 아키텍처의 Presentation 부분에서 ViewModel을 이용하는 MVVM과 Controller를 이용하는 MVC의 차이에 대해서도 공부했다
Swift Package
개발을 하다보니 스위프트로 작성된 패키지의 구현도 보고 싶었다
이때 Package.swift 파일을 보면 많은 정보를 얻을 수 있는데
해당 파일에 작성되는 요소들에 대해 정리하고, Package.swift 파일을 보고 패키지를 분석하는 방법을 정리했다
이는 추후 오픈소스기여나 패키지 사용 시에도 많은 도움이 될 것이다
프로젝트
프로젝트를 통해 생각나는 아이디어를 실제로 구현해보기도 했고,
그렇게 막 구현해 보니 유지보수에 어려움을 느껴 클린 아키텍처를 앱에 적용하는 방법을 공부했고,
Core Data, SwiftData, Realm 등 데이터베이스들을 최대한 다양하게 사용하면서 프로젝트를 수행했다
또, Swift Concurrency와 Combine을 어떤 경우에 무엇을 사용하는 게 더 편리하게 코드를 작성할 수 있을까에 대한 나름의 규칙도 만들게 되었다
후반기 계획
공부할 것
- SiriKit
- AppIntent
- WidgetKit
- CloudKit
후반기에 공부할 것들은 WWDC24 발표전에 어느정도 설정했었으나, 발표를 보고 더 확실시되었다
우선 조만간 애플 디벨로퍼를 등록할 것이기에 SiriKit과 CloudKit을 사용할 수 있다
또한, WidgetKit은 동적으로 뭔가 수행시키는 것을 쉽게 할 수 있게 된 것 같아서 아무거나 만들어보고 싶어서 계획에 추가했다
SiriKit과 AppIntent는 애플 개발자라면 향후 앱개발에 있어서 가장 중요한 요소가 될 것이다
내가 생각하는 미래의 앱은 “데이터 수집기(데이터 싸개)”로 본다
사람들은 일상생활에서 앱을 사용하는데, 그때마다 데이터를 만든다
예를들어, 채팅앱이라면 다른 사람과 채팅이 될 수 있고, 운동관리앱이라면 내 운동일지가 될 수 있다
이때 이렇게 저장이 되는 데이터에 대해 Siri는 자연어 쿼리를 바탕으로 단순히 데이터를 불러오거나, 유용하게 변환 또는 인사이트까지 제공할 수 있을 것이다
단순히 하나의 앱과 수행되는 것을 넘어, 여러 앱에서의 유용한 데이터들을 바탕으로 대화에서 사용될 수 있을 것이다
즉, 시리가 이런 앱들의 데이터를 잘 사용하게 되면서 좀 더 나에게 최적화된 인공지능이 될 것이다
이때 AppIntent는 앱에서 제공할 정보를 정의하는 데 중요한 역할을 한다
그렇기에 이 부분들은 시간을 들여서 지금부터 깊게 공부할 것이다
프로젝트
올해 내로 코파일럿 같은 기능을 XCode에서 공식으로 지원하는데,
우선 이를 극한으로 활용할 수 있도록 알아야 할 팁들을 전부 공부하고 프로젝트를 진행하면서 극한으로 활용할 것이다
iStay
기존 iStay 앱에 클린아키텍처를 적용하는 리팩토링을 수행하고, Swift Testing(WWDC24)을 통해 테스트코드를 작성할 것이다
이후 배포까지 파이프라인을 만들어서 실제 앱스토어에 등록하는 것을 목표로 할 것이다
이름 미정
SiriKit을 사용한 앱을 만들면서 SiriKit(+AppIntent) 공부를 할 것이다
오픈소스 기여
WWDC24 발표를 보면, 오픈소스로 진행하는 것들이 많아 보였다
패키지들을 분석하기 위해 상반기엔 우선 Swift Package에 대해 공부를 했었고, 하반기엔 실제로 다양한 패키지들을 분석하고 기여까지 해보고 싶다
마무리
알찬 24년이 되자.. 무엇보다 건강이 우선이다
'iOS+' 카테고리의 다른 글
| EventKit (0) | 2024.08.03 |
|---|---|
| MapKit (1) | 2024.07.27 |
| AVFoundation (0) | 2024.07.14 |
| App Intents (0) | 2024.07.06 |
| Unit Test (0) | 2024.06.22 |