본문 바로가기

iOS43

이미지 캐시 처리와 NSCache 이미지 캐시 처리를 해봅시다! 최근 iOS 프로젝트를 하다가 이미지 캐싱 작업을 하기 위해 NSCache를사용했습니다! 자세히 모르는 상태에서 이미지 캐싱 부분을 구현하긴 했는데... 그래도 알고 넘어가면 더 좋을 것 같아서 NSCache에 대해 간단히 알아보았습니다! 일단 제가 Image Cache in Swift - 이미지 캐싱 사용해보기 와, NSCache란? 라는 게시글을 참고해서 구현한 부분은 아래와 같습니다. 1. 이미지 캐시 작업을 위한 싱글톤 클래스 ImageCacheManager를 생성합니다. 2. 이미지를 가져오기 전에, 캐싱된 내용에 해당 이미지가 존재하는지 먼저 검사합니다. 만약 캐시된 이미지에 해당 이미지가 존재한다면? 그 이미지를 사용하고 여기서 작업을 마칩니다. 만약 캐시된 이.. 2021. 6. 23.
CATransform3D 애니메이션 (1) 얼마 전에 YAPP 동아리 프로젝트를 진행하다가, 인스타그램 마이프로필 화면처럼 스크롤 했을 때 헤더뷰가 상단에 고정된 상태로 스크롤이 되어야 하는 화면을 구현해야하는 경우가 생겼어요! 아래처럼 말이죠.. 아 솔직히 구현하기 너무 까다로울거같다고 생각했거든요?? 그런데 저희 팀 iOS 개발자 분 중에 노란 기업에 다니시는 분이 계시는데, 그 분이 CATransform3DTranslate 로 간단하게 구현할 수 있다는 것을 샘플 코드로 만들어 보여주셨습니다..... 네.... ㅋㅋㅋㅋ 역시... 잘하심..ㅋㅋㅋㅋ 그래서 그 분이 만들어주신 샘플 코드가 어떻게 돌아가는지 제가 직접 분석해서 서비스 디자인에 맞게 재구현해서 결국 마이페이지 화면을 완성할 수 있었어요!! 어떻게 돌아가는지 대충 감은 잡아서 어찌.. 2021. 5. 15.
What's the difference between a singleton and a shared instance in Swift? 매주 AppCoda Weekly 라는 메일구독 서비스를 통해서 iOS 및 디자인에 대한 이슈와 소식을 접하고 있습니다. 그러던 중 며칠 전 받은 이슈 중에서 What's the difference between a singleton and a shared instance in Swift? 라는 게시물을 접하게 되었고, 이를 한글로 번역해서 게시글로 작성하고자 합니다. 영어로 읽히는 대로? 영어를 보고 한글로 읽히는대로? 네.. 그냥 제가 읽히는 대로 적어놨기 때문에 번역이 잘못되었거나, 제가 잘못 이해한 부분이 있을 수도 있지만 그런 부분은 댓글로 알려주시면 바로 수정해볼게요 😄😄 우리가 iOS에서 접할 수 있는 흔한 패턴은 앱 어디에서나 접근할 수 있는 인스턴스를 정의하는 패턴입니다. 그 예시로는 UR.. 2021. 5. 10.
Local Notification (로컬 푸시) 구현하기 대부분 앱을 사용하시다보면 푸시알림을 무수히 받아보셨을거예요. 저도 잠시 계약한 스타트업에서 진행하고 있는 프로젝트에서도 Push 알림을 구현해야한다고 하셔서 푸시알림에 대해 알아보려 합니다! 기본적으로 iOS의 push는 2가지가 있습니다. 로컬 푸시 (Local Notification) : 앱 자체로부터 push를 앱에 띄우는 것 서버 푸시 (Remote Notification) : 서버로부터 push를 앱에 띄우는 것 사실 제가 필요로 하는건 서버 푸시이지만, 서버 푸시를 하려면 뭐 certification과 provisioning profile을 등록하고... APNs에 연결해야하며... 애플 개발자 계정이 필요하고....어쩌구 저쩌구..... 너무 복잡해서ㅠㅠㅠ 일단 간단하게나마 로컬 푸시를 먼.. 2021. 5. 10.
Swift 접근 제어자 (Access Control) 접근 제어자를 왜 사용할까 오늘은 iOS 개발을 할 때 다양하게 활용할 수 있는 접근 제어자에 대해 알아보려합니다. 규모 있는 어플리케이션을 개발하다보면 객체를 사용하는 입장에서 객체 내부적으로 사용하는 변수나 메서드에 접근함으로써 개발자가 의도하지 못한 오동작을 일으키게 될 수 있습니다. 이런 문제로부터 객체의 로직을 보호하기 위해서 적절한 접근 제어자를 통해 외부의 접근을 허용하거나 차단할 필요가 있습니다. 즉, 접근 제어자는 코드를 작성하는 module이나 source file에서 다른 파일에 있는 코드에 대한 접근을 명시적으로 작성하여 관리하는 것입니다. 여기서 module이란, 하나의 프레임워크를 말합니다. 우리가 Swift로 코드를 짤 때 필요에 따라 적절한 import 키워드를 추가하죠? 그.. 2021. 5. 7.
커뮤니케이션 패턴 (Delegate, Notification, KVO, Target-Action) 보통 Delegate, Notification, KVO, Target-Action 같은 것들을 묶어서 커뮤니케이션 패턴 이라고 합니다. 이들이 커뮤니케이션 패턴으로 불리는 이유는 한 가지 공통점 때문인데요, 바로 특정 이벤트가 일어나면 원하는 객체에 알려주어 적절한 조치를 취하도록 한다는 점입니다. 즉, 객체 간의 소통을 위해 사용되는 것들입니다. 어떠한 객체는 그 자체로 존재하면서 다른 객체와 소통하고 싶을 뿐이지 다른 객체에 종속되어 동작하고 싶지는 않을 수 있습니다. 다른 객체에 종속되어 동작한다면 재사용성과 독립된 기능요소 측면에서 바람직하지 않기 때문이죠. 그래서 우리는 각각의 커뮤니케이션 패턴들을 알아볼 예정입니다 :) Delegation delegate는 보통 protocol을 정의하여 사용.. 2021. 5. 4.
Promises 보통 Swift에서 비동기처리를 구현할 때는 delegate 패턴을 사용하거나 RxSwift를 활용하는 등의 방법을 사용합니다. 저도 지금까지 개인프로젝트를 진행할 때 RxSwift에 익숙해질 겸 RxSwift+MVVM 구조를 적용하려고 노력했는데요, 이번에 동아리 프로젝트에서 RxSwift가 아닌 Promises를 사용해보자는 이야기가 나와서 Promises에 대해 한 번 알아보려 합니다. RxSwift는 주로 사용되는 기능들 외의 다른 수많은 기능들은 잘 사용되지 않을 때가 있는데요, 그래서 간단한 프로젝트에서는 사용되지 않는 기능들까지 pod파일로 가지고 있어야 해서 사용해야하는 메서드에 비해 파일의 양이 방대해집니다. 그래서 이번에 구현하려는 개인 프로젝트에서는 Promises를 연습해볼겸 Pro.. 2021. 4. 29.
CGRect, CGPoint, CGSize CGRect, CGPoint, CGSize는 iOS를 개발할 때 스토리보드를 사용하지 않고 코드로 View를 구현하다보면 자주 접할 수 있는 객체들입니다. 사용하다보니 무슨역할을 하는지는 감으로 알겠고, CGPoint랑 CGSize는 이름만으로도 무슨 객체인지 알 수 있겠는데 CGRect는 말로 설명하라그러면 딱 정의하기가 힘들더라구요?? 그래서 간단하게라도 CGRect가 무슨 객체인지 알아봤는데 정말정말 간단한 객체였습니다ㅋㅋ 그래도 머리로 아는 것과 말로 설명하는 건 또 다르니까 블로깅해볼게요! CGPoint와 CGSize 이름 그대로 CGPoint는 2차원 좌표계의 점을 나타내는 구조체이고, CGSize는 너비와 높이를 나타내는 구조체입니다. 사실 정말 이거 그대로예요. CGPoint는 좌표의 x값.. 2021. 4. 16.
UIResponder 모든 ViewController의 상위클래스는 UIViewController! UIViewController의 핵심적인 상위 클래스는 UIResponder! 네 그래서 이번엔 UIResponder를 공부해보려구요❗️ 먼저 UIViewController가 뭐냐 간단히 말하면, 앱에서 View 계층을 관리하는 객체입니다. ViewController의 주요 역할을 살펴보면 아래와 같습니다. 데이터의 변경에 대한 응답으로 View의 콘텐츠를 업데이트합니다. View들을 통해 유저와 상호작용합니다. View의 사이즈를 정의하고 전체적인 인터페이스 레이아웃을 관리합니다. 앱의 다른 ViewController 같은 다른 뷰 객체들과 상호작용합니다. 이런 UIViewController는 UIResponder 객체로써 .. 2021. 4. 16.
첫 테스트코드를 작성해보다. 제가 처음 테스트코드를 작성해보고 난 후의 개인적인 생각을 정리해보고 싶어서 이렇게 글을 쓰게 되었습니다. 아래 테스트코드의 장점이나 TDD에 대한 내용은 다른 블로그의 내용을 좀 더 참고해서 적었습니다! 이전에 TDD에 대해 알게 된 이후 언젠가는 TDD를 꼭 적용해보고 싶다는 생각이 있었습니다. TDD까지는 아니더라도 최소한 테스트코드는 한 번 작성해봐야지 생각했었어요. 하지만 시간에 쫓긴다는 핑계와 이것 말고도 할 게 많다는 핑계로 계속 미루고 미루고 있었습니다. 저는 최근 스타트업과 iOS 프로젝트 하나를 계약해서 하고있는 중인데, 지금 기획만 어느정도 되어 있는 상태고 디자인과 서버 개발은 아직 들어가지 않은 상태입니다. 서비스를 본격적으로 개발하기 전에 디자인과 서버 개발이 이루어져야 하는 현.. 2021. 4. 14.
키체인 (Key Chain) 아이폰 유저라면 한 번쯤은 키체인 로그인을 사용해봤을 것 같습니다. 저는 이번 동아리 프로젝트에서, 그리고 스타트업과 계약해서 진행하고 있는 다른 프로젝트에서 자동로그인 기능을 구현해야하는 상황이 생겼는데요! 사실 자동로그인이라길래 처음에는 로그인 후 받은 token을 저장하거나, 아이디와 비밀번호를 UserDefaults로 저장해서 사용하면 되는건가? 하고 생각했는데, 그렇게 하면 거의 뭐 보안이 💩..ㅋㅋㅋ UserDefaults는 데이터를 있는 그대로 저장하기 때문에 개인정보를 UserDefaults로 저장하게 되면 정말 보안이 취약해집니다!!! 그렇다고 개인정보를 직접 암호화해서 저장하기에는 많이 복잡해지죠ㅠㅠ 그래서 키체인을 사용하려합니다 키체인은 암호화된 데이터베이스로써, 사용자의 Mac, 앱.. 2021. 4. 13.
GCD (Grand Central Dispatch) iOS의 중요한 개념 중 하나인 GCD!! GCD가 뭘까요? GCD는 Grand Central Dispatch 의 줄임말입니다. GCD에 대해 자세하게 알아보기 전에 왜 GCD가 나오게 됐는지, 그 배경부터 살펴보겠습니다. 멀티 코어 프로세서에서는 프로그램의 동작을 멀티 프로세서에게 어떻게 잘 배분하는지가 중요합니다. GCD 이전에는 멀티 스레딩을 위해 Thread와 OperationQueue 등의 클래스를 사용했다고 하는데요, Thread는 복잡할 뿐만 아니라 임계 구역 (Critical Section) 등을 이용한 Lock을 관리하기 까다로웠습니다. 그리고 OperationQueue는 GCD에 비해 무겁고 Boilerplate Code들이 많이 필요한 문제가 있었죠. 그래서 Apple은 GCD를 내놓.. 2021. 3. 23.