[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🍎 Apple 101

[RxSwift] Reactive Programming & RxSwift

부스트캠프에서 만난 팀원들과 하는 스터디의 이번주 주제 중 하나는 'RxSwift를 왜 사용하는지 설명하시오.'였다. 그런데 막상 공부하려고 보니 아직 Reactive Programming에 대해서도 정확히 파악하고 있지 못함을 느꼈다. (저번에 스터디도 했는데... 더 열심히 해야겠다...🥲 ) 그래서 이번 기회에 Reactive Programming와 RxSwift의 간단한 개념, 그리고 RxSwift를 왜 사용하는지와 단점까지 차례대로 정리해볼까 한다! Reactive Programming Reactive Programming이란 비동기적 데이터 흐름과 전달에 관한 프로그래밍 패러다임이다. 이러한 Reative Programming의 핵심은 모든 것을 비동기적 데이터의 Stream으로 간주하고, 다..

[CoreData] 기초개념 (1): Entity, CRUD

CoreData란? Apple에서 제공하는 데이터관리 프레임워크로, 데이터를 유지 및 캐싱할 수 있을 뿐 아니라 Cloudkit을 사용해 여러 장치에 데이터를 동기화하는 것도 가능하다. 내부적으로 SQLite를 사용하고 있어 데이터베이스처럼 사용도 가능하지만, 정확히 말하면 데이터베이스는 아니다. SQLite에 데이터를 저장하고 관리하는 프레임워크라고 보는 편이 더 맞는 표현이다. CoreData 설정 프로젝트를 생성할때 Use CoreData를 체크해서 만들 수 있다. 프로젝트를 생성 후 확인해보면 위와 같이 데이터모델 파일이 새로 생겨있음을 알 수 있다. // MARK: - Core Data stack lazy var persistentContainer: NSPersistentContainer = {..

[Swift] UserDefaults와 Codable, NSCoding

UserDefaults 사용자의 데이터를 저장할 수 있는 영구저장소의 일종이다. plist파일로 존재하여 Key-Data 방식으로 데이터를 읽고 저장한다. Float, Int, Double, Bool, String, URL 등 Swift에서 기본적으로 제공하는 자료구조 및 NSData, NSString, NSNumber 등 NS 관련 자료구조를 저장할 수 있다. 이 외의 인스턴스에 대해서는 추가적인 처리가 필요하다. 공통유형의 객체를 쉽게 읽고 저장할 수 있지만, 하나의 파일로 관리되는만큼 그 크기가 너무 방대해지면 오버헤드가 발생할 수 있다. 따라서 일반적으로 기본적인 몇가지 설정들만 저장될 것이 권장된다. 싱글톤을 기반으로 구성되어 있기 때문에 UserDefaults.standard의 형식으로 사용한..

🍎 Apple/Swift 2022.01.01

[Xcode] Instruments란?

Instruments? Xcode에서 제공하는 성능분석 및 테스트 도구. 프로세스 및 디바이스 장치의 상태를 프로파일링 하여 성능을 자세히 분석하는 기능을 제공한다. 그 외에도 Instruments를 통해 수행 가능한 기능들은 다음과 같다. 하나 이상의 앱 또는 프로세스의 동작 검사 Wi-Fi 및 Bluetooth와 같은 기기별 기능 검사 시뮬레이터 또는 물리적 장치에서 프로파일링 수행 소스 코드의 문제 추적 앱에 대한 성능 분석 수행 누수, 버려진 메모리, 좀비와 같은 앱의 메모리 문제 찾기 전력 효율성을 높이기 위해 앱을 최적화하는 방법 식별 일반적인 시스템 수준 문제 해결 수행 기기 구성을 템플릿으로 저장 Trace document 프로파일링에 사용되는 설정 Xcode 자체에서 생성 및 저장 가능 ..

🍎 Apple/Xcode 2021.12.30

[Swift] Dynamic Dispatch 줄이기

Dispatch? Dispatch : 어떤 메서드를 호출할 것인가를 결정하여 실행하는 과정 Static Dispatch : 컴파일 시점에서 어떤 메소드가 사용될지 명확히 결정되는 것 Dynamic Dispatch : 런타임 시점에 어떤 메소드가 실행될지 결정되는 것, Swift에서는 class마다 vtable이라는 것을 가지고 있어서 이를 참조하면서 함수가 호출되기 때문에 이에 따른 overhead가 발생하게 된다. 즉 Dynamic Dispatch를 하면 성능의 하락이 있을 수 있다. 따라서 이를 최대한 줄이는 것이 성능상 도움이 된다. Swift에서의 Dispatch Swift의 struct와 class 중 struct를 먼저 생각해보자. struct는 값 타입이라 한 곳에서만 존재하고 상속도 없다...

🍎 Apple/Swift 2021.12.16

[UIKit] Frame vs Bounds

개인적인 학습 정리를 위한 글입니다. 🧐 CGPoint : 위치를 표현하기 위한 구조체로 x좌표와 y좌표의 값을 CGFloat으로 가진다. CGSize : 크기를 표현하기 위한 구조체로 너비와 높이 값을 CGFloat으로 가진다. CGRect : 사각형의 위치(origin)와 크기(size)를 포함하는 구조체로, origin과 size를 각각 CGPoint와 CGSize로 가진다. UIView는 기본적으로 frame과 bounds값을 모두 가지는데, 이들은 둘 다 CGRect이다. 둘 모두 좌표와 크기를 가진다는 의미이다. 둘의 차이를 검색해서 찾아보면 Frame : SuperView의 좌표 시스템에서의 위치와 크기 Bounds : 자신만의 좌표 시스템에서의 위치와 크기 정도로 정의되는 경우가 많다. 이..

🍎 Apple/UIKit 2021.11.10

[UIKit] Diffable Datasource

기존의 DataSource와 UI는 각각 시간에 따라 변경되는 자신만의 버전(truth)을 가지고 있는데, 이것이 맞지 않으면 에러가 발생한다. reloadData를 수행하기 전까지는 중앙화된 하나의 버전(truth)가 존재하지 않아 에러가 발생하기 쉽다. reloadData를 수행하더라도 애니메이션없이 화면을 갱신하게 되기 때문에 사용자 경험을 저하시킬 수 있다. Diffable Datasource 개념 그에 따라 Apple에서 도입한 것이 Differble DataSource이다. performBatchUpdates()같은 복잡한 메소드를 사용하지 않고, apply()라는 하나의 메소드로 관리하게 된다. Snapshot: UI의 버전(truth)를 저장하는 개념이다. 각 section과 item에 대..

🍎 Apple/UIKit 2021.10.20

M1 맥북 CocoaPods pod install error 해결

m1 맥북에서 CocoaPods를 설치하고 사용하다 에러를 마주했다. 설치는 잘되었고, pod init까지도 문제없었다. 하지만 pod install을 수행해 본격적으로 패키지를 다운받으려하니 에러가 출력되며 패키지설치가 되지 않았다. 'Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.' 와 같은 메세지가 출력되면서 설치가 완료되는 것이 정상적인 수행인데, 그것이 이루어지지 않았다. 아무래도 m1이 arm 기반 프로세서이기 때문에 다르게 동작하는 부분이 있는 것 같다. 해결방법 터미널을 Rosetta를 사용하여 열고,sudo gem install ffi를 입력해 ffi를 설치 후 폴더로 이..

🍎 Apple/Error 2021.10.03

[Swift] Codable Protocol

Codable 자신을 특정표현으로 변환하거나 변환될 수 있는 타입 쉽게말해 특정표현으로 인코딩할 수 있고, 특정표현으로부터 디코딩될 수 있는 타입이라는 것이다. typealias Codable = Decodable & Encodable 실제로 Codable은 위와 같이 Decodable과 Encodable가 함께 존재하는 형태로 이루어져 있다. 여기서 특정표현은 여러가지가 있을 수 있지만, 주로 다루게 되는 것은 JSON이다. Class, Enum, Struct에서 모두 사용이 가능하다. Codable 프로토콜을 채택한 구조체로 Encoding, Decoding을 해보며 이해해보자. Encoding struct DataModel : Codable { var title : String var number ..

🍎 Apple/Swift 2021.09.02

[Xcode] 다크모드 Color Set 생성

다크모드 Color Set 생성 iOS 프로젝트에서 Assets.xcassets 클릭 후 화면 왼쪽 아래의 + 버튼 클릭 New Color Set을 눌러 새로운 Color Set을 생성할 수 있다. 옵션에서 Appearances를 Any, Light, Dark로 바꾸면 각 모드에 따른 색을 추가할 수 있다. 이제 ColorSet 생성이 완료되었다. Name에서 원하는 이름을 주고 프로젝트에서 활용하면 된다. cf. 이미지도 마찬가지로 Assets.xcassets에서 이미지를 만들고 Apperance 옵션을 수정한 다음, 다크모드에서 열릴 이미지를 첨부하면 처리가능

🍎 Apple/Xcode 2021.08.27