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

🍎 Apple 101

[UIKit] ViewController Life Cycle

안녕하세요 이누입니다! 여러분은 ViewController의 Life Cycle에 대해 잘 알고 계신가요? 저는 잘 알다가도 헷갈리거나 모르는 부분이 등장해서 당황스러울 때가 많더라구요. 그래서 오늘은 이를 포함해 전체적인 ViewController의 Life Cycle에 대해 정리해보았습니다. (2022.03.16 내용수정) 가장 먼저 init에 대해 정리하려고 살펴보니 nib, xib 파일에 대한 언급이 있더라구요. 그래서 이 부분부터 정리하고 넘어갑니다. cf. nib란? nib : NeXT Interface Builder (binary 기반), 인터페이스 빌더에서 생성한 객체들을 저장하는 파일입니다. UI를 구성하는 객체들과 이들의 세부설정, 각 객체들간의 관계 등을 포함합니다. xib : XML..

🍎 Apple/UIKit 2022.02.12

[iOS] #selector는 무엇이며 왜 필요할까?

우리는 iOS 개발에서 특정 Control에 target-action을 적용할 때 자연스럽게 Selector라는 타입의 객체(#selector(@objc method))를 사용합니다. 그런데 이것이 정확히 무엇일까요...? 오늘은 이 Selector가 무엇인지, 왜 필요한지 알아보고 정리했습니다! Objective-C에서의 Selector 사실 Selector는 원래 Objective-C에서 사용하던 기능입니다. 이는 특정 메서드를 컴파일타임에 동적으로 식별하고 참조하는 역할을 했습니다. 이러한 특징을 기반으로 Objective-C에서 동적으로 메서드를 동작시키려할 때 Selector를 사용했습니다. 반면 Swift에서는 이런 별도의 객체를 사용하지 않아도 메서드를 동적으로 동작시킬 수 있기 때문에 직접..

🍎 Apple/Question 2022.02.07

[UIKit] Multiple Gesture Recognizer 처리하기

안녕하세요 이누입니다. 🐶 하나의 View에 대해 여러 Gesture Recognizer가 등록되어 있는 경우 원하는 대로 처리되지 않는 경우가 종종 있습니다. 특정 Gesture로 인해 먼저 처리해야 될 다른 Gesture가 무시되는 경우도 많고, 동시에 처리되길 원하는 Gesture가 동시에 동작하지 않는 경우가 그 대표적인 예시입니다. 따라서 오늘은 애플 개발자 문서에 등록된 Article인 Coordinating Multiple Gesture Recognizers를 기반으로 하나의 View에 등록된 여러 Gesture Recognizer들의 작업을 원하는대로 처리하는 방법을 알아보겠습니다. OverView Gesture recognizer는 입력된 터치 이벤트를 개별적으로 추적하지만, UIKit은..

🍎 Apple/UIKit 2022.02.05

[iOS Architecture] MVC, MVP, MVVM (feat. Clean Architecture)

안녕하세요 이누입니다. 개인적으로 아키텍처 부분이 많이 부족하다는 생각이 들어서 Clean Architecture 이론과 MVC, MVP, MVVM 아키텍처의 개념을 최대한 iOS의 관점에서 바라보며 공부하고 정리해봤습니다. 그럼 시작할게요! Clean Architecture 먼저 Clean Architecture에 대해서 간단하게 이야기해보겠습니다. Clean Architecture는 Robert C. Martin(a.k.a Uncle Bob)님이 제안하신 '좋은 아키텍처'에 대한 이론입니다. (위 그림에 나오는 각 레이어의 자세한 역할과 의미에 대해서는 원글(https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)을 참..

🍎 Apple/Patterns 2022.01.30

[Swift] Copy on write

Copy on write (COW) 이름 그대로 Write가 발생했을 때 Copy를 수행하는 기능입니다. (cf.이는 원래 운영체제에서 프로세스에게 프레임을 할당할 때 메모리 공간 낭비를 막기위해 사용되던 기능인데, Swift에도 비슷한 목적으로 적용되었습니다.) 값타입의 데이터는 값을 참조하지 않고 복사합니다. 하지만 이렇게 매번 복사를 할 경우 값이 변경될 필요가 없음에도 매번 새로운 메모리 공간을 할당하여 복사를 수행하게 됩니다. 따라서 메모리가 낭비되고, 오버헤드까지 발생합니다. 그래서 사용되는 것이 Copy on write입니다. Copy on write는 데이터 복사 시에 실제로 값을 복사하지 않고 동일한 값을 참조하도록 합니다. 그리고 값이 변경(Write)될 때 값을 복사해 변경을 적용합니..

🍎 Apple/Swift 2022.01.26

[Swift] 문자열 처리

코딩테스트의 주력 언어를 Swift로 변경하고나서 가장 번거롭게 느껴진 것은 문자열 처리였다. 문자열 처리가 쉬운 다른 언어와는 다르게 참 복잡하다고 생각했다. 하지만 그래도 정리하고 사용하다보면 금방 적응될 것이라고 생각한다. 그래서 개인적으로 번거로웠던 부분을 정리해놓는다. (새로운 팁을 알게되면 지속적으로 업데이트 예정) 문자열에 하나씩 접근하면 Character 타입으로 받아온다 파이썬은 for문을 활용해 접근했을 때 각 문자를 str형태로 받아온다. 하지만 Swift는 각 요소를 Character 타입으로 받아온다. let str = "Hello" for c in str { print("\(type(of: c)") } // Character // Character // Character // C..

🍎 Apple/Swift 2022.01.22

[Swift] NSCache와 NSDictionary의 차이점

NSCache 다짜고짜 차이점을 찾기 전에 NSCache가 뭔지부터 알아보자. NSCache는 메모리캐싱에 주로 사용되는 객체라고 알려져 있다. 리소스가 부족하면 자동으로 삭제되는 key-value 쌍을 임시로 저장하는 mutable collection 이라고 한다. 여기까지만 봐선 '자동으로 삭제되는' 이라는 부분이 Dictionary와 다른 점인데... 좀 더 알아보자. Overview를 보니 대놓고 차이점을 설명해주고 있다. 읽어보자. 먼저 시스템 메모리를 과도하게 사용하지 않도록하는 자동 삭제 정책을 가진다. 다른 애플리케이션에서 메모리를 필요로할 경우 이 policy가 cache에서 일부 항목을 제거한다. Thread-Safe하게 구현되어 있어 따로 lock하지 않아도 다른 스레드에서 캐시의 항..

🍎 Apple/Swift 2022.01.22

Clean Architecture and Design - Robert C. Martin (엉클 밥)

해당 게시글은 Robert C. Martin님의 Clean Architecture and Design 강의를 보고 내용을 정리한 게시글입니다. 다만 개인적인 정리 및 확인의 용도로 작성한 게시글이기 때문에 가독성이 떨어집니다. 관심 있는 분들은 직접 영상을 감상하시는 것을 추천드립니다. 한글자막도 있고 길이도 1시간 정도밖에 되지 않아요. 아직 안 보신 분은 꼭 보세요!!! https://amara.org/ko/videos/0AtjY87egE3m/url/1216370/ Video Subtitling, Captioning and Subtitle Translation - Amara Subtitling The FCCChairman's AAA The Chairman's Awards for Advancement ..

🍎 Apple/Patterns 2022.01.21

[iOS] 왜 오토 레이아웃을 사용할 때는 translatesAutoresizingMaskIntoConstraints = false를 할까?

왜 오토 레이아웃을 사용할 때는 translatesAutoresizingMaskIntoConstraints = false를 할까? 부모뷰가 커지거나 줄어듦에 따라 서브 뷰의 크기나 위치를 조정하는 방식을 결정하는 Autoresizing이라는 개념이 존재한다. 이 개념은 여러 속성을 부여하여 슈퍼뷰의 크기 변화에 따라 서브 뷰의 width, height 혹은 leading, top, trailing, bottom 영역을 유연하게 고정하거나 확장할 수 있다. 이러한 Autosizing은 AutoresizingMask를 통해 적용할 수 있는데, 슈퍼 뷰의 bounds가 변경 될 때 자신의 크기를 조정하는 방법을 결정하는 비트마스크이다. 다만 Autoresizing과 AutoLayout을 동시에 사용하고자 할 ..

🍎 Apple/Question 2022.01.21

[UIKit] Compositional Layout Example from Apple Sample Code (2)

1편에 이어서 작성! https://inuplace.tistory.com/1038 [UIKit] Compositional Layout Example from Apple Sample Code (1) Compostional Layout을 조금 더 잘 활용하고 싶어서 학습자료를 찾던 중 Apple Sample Code에서 너무 좋은 레퍼런스를 찾아서 이를 하나씩 정리해본 자료입니다. 🙃 https://developer.apple.com/documentation/ui.. inuplace.tistory.com Decorate Sections with Backgrounds let sectionBackgroundDecoration = NSCollectionLayoutDecorationItem.background( e..

🍎 Apple/UIKit 2022.01.18