본문 바로가기

분류 전체보기

(426)
[iOS] @inlinable inlinable @inlinable 이 무엇인가요? @inlinable 속성은 Swift에서 비교적 다른 속성들에 비해 잘 알려지지 않은(?) 속성입니다. @inlinable 은 애플리케이션 내 런타임에 있어서의 약간의 최적화를 통해 성능을 향상시키는 기능을 가지고 있어요. 이 속성이 어떻게 동작하는지 알아보도록 할게요! @inlinable 속성의 가장 중요한 점은 코드 인라인과 관련이 있지만, @inline 속성과는 동일하지 않습니다. 프로그래밍에서 인라인 이란 테크닉을 통해 메서드 호출부를 메서드 바디 본문으로 대체하여 컴파일러 최적화를 수행합니다. 메서드 호출이라는 행위는 코드로 작성하기엔 매우 간단하죠! 하지만 이 프로세스가 동작하는데에는 메서드 호출을 위해 새로운 스택을 푸시하고 이를 추적하고..
[iOS] Swift Concurrency Swift Concurrency Swift는 구조화된 방식으로 비동기 및 동시성 코드 작성을 지원합니다. 프로그램 내 한번에 하나의 코드만 수행되지만 비동기 코드는 일시 정지 및 재개가 가능합니다. 일시 정지 및 재개하는 코드는 UI 업데이트와 같은 단기 작업을 계속 진행하는 동시에 네트워크를 통해 데이터를 가져오거나 데이터를 파싱하는 등의 장시간 실행 작업을 계속 수행할 수 있게 됩니다. 동시성 코드는 여러 조각의 코드를 동시에 수행함을 의미합니다. 예를 들면, 4개의 코어를 가지는 컴퓨터가 4개의 코드를 동시에 수행하듯 각각의 코어들이 각각의 작업들을 동시에 수행하게 됩니다. 프로그램은 동시성과 비동기 코드를 통해 여러 작업들을 동시에 수행합니다. 동시성 또는 비동기 코드로부터 오는 스케줄링에 대한 ..
[iOS] Compositional Layout 활용 예시 Compositional Layout 안녕하세요 :D 이번에 사이드프로젝트를 진행하면서 보다 복잡한 레이아웃을 구현하게 되어 Compositional Layout을 사용하게 되었어요. 간만에 사용을 하려다보니 이왕 하는것 다시 공부하며 정리한 내용을 포스팅 하려고 해요. Compositional Layout 이란? Apple Developer 공식 문서에서는 UICollectionViewCompositionalLayout 을 아래와 같이 소개하고 있어요. UICollectionViewCompositionalLayout A layout object that lets you combine items in highly adaptive and flexivle visual arrangements. 적응력이 뛰어나..
[iOS] Singleton 사용시 주의점과 의존성 주입 Singleton 사용시 주의점과 의존성 주입 안녕하세요 :D 오늘은 평소에 자주 사용하고 있는 패턴 Singleton과 Dependency Injection에 대해서 좀 더 상세히 알아보고 제가 사이드 프로젝트에서 사용하고 있는 방식에 대해 소개해드릴게요! Singleton Dependency Injection을 설명하기 이전에 Singleton에 대해 먼저 알아볼게요! 모두가 알고 있듯 싱글톤 패턴은 생성 디자인 패턴입니다. 전역에서 접근이 가능한 단 하나의 인스턴스만을 생성하는 것을 보장하는 생성 패턴입니다. 싱글톤 패턴은 아래와 같은 경우에 많이 사용되요! 단 하나의 클래스 인스턴스만 존재하고자 하는 경우 모든 스레드, 어느 범위에서든 접근이 필요한 경우 외부 접근으로부터 생성자를 숨기는 경우 동..
[iOS] Protocol Composition과 Default Implementation 활용하기 Protocol Composition & Default Implementation 안녕하세요 :) 오늘은 Protocol Composition과 Default Implementation 에 대해 알아보고 실제 사용 예시를 보여드리고자 합니다! 모든 포스트는 편의 말투로 작성합니다 :D 모두가 코드의 역할들이 적절히 분담되어 유지보수하기 편한 깔끔한 코드 작성을 지향합니다. 이를 위해서 우리는 현재 코드를 관련된 프로퍼티와 메서드들을 모아놓은 프로토콜 인터페이스들로 나눕니다. 문제는 여러 프로토콜 중 일부를 함께 사용하게 된다는 것이죠. 예를 들어, 일부 프로토콜을 함께 사용하는 타입의 변수를 선언하는 경우를 살펴볼게요. protocol FileHandlerType { func read() -> Strin..
[iOS] RunLoop RunLoop 안녕하세요 :) 오늘은 RunLoop에 대해서 알아보도록 할게요! 모든 포스트는 편의 말투로 작성합니다 :D RunLoop란 A run loop is an event processing loop that you use to schedule work and coordinate the receipt of incoming events. The purpose of a run loop is to keep your thread busy when there is work to do and put your thread to sleep when there is none. Apple은 RunLoop를 위와 같이 설명하고 있어요. 작업을 스케줄링하고 들어오는 이벤트들을 조정하기 위해 사용되는 이벤트 처리 루프..
[iOS] Actor, Task, Async&Await Actor, Task, Async/Await 프로젝트 작업으로 바빳어서 오랜만에 포스팅을 하네요! 최근 프로젝트에서 async/await을 사용하게 되어 다시 학습을 하며 정리한 내용을 기재했습니다. Swift 5.5 이전까지 우리는 GCD를 이용해 비동기 로직을 처리하고, completion Handler와 같은 방식을 활용해 비동기 로직이 끝나는 시점에 필요한 작업을 수행 했습니다. 기존에도 Swift에서는 Concurrency를 위한 방법들이 존재하고 있었으나 여러 아쉬운 점들이 있었습니다. 그 아쉬운 점들을 예시 코드를 통해 확인해보도록 할게요! func fetchImage(completion: @escaping (Result) -> Void) { let request = imageURLReque..
[iOS] CleanArchitecture & Tuist를 활용한 리팩토링 후기(?) Tuist & CleanArchitecutre 도입기 안녕하세요! 이번 포스트는 기존 프로젝트 리팩토링을 진행하며 MVVM 구조에서 CleanArchitecture & Tuist와 ReactorKit 도입을 진행한 경험을 공유하는 포스트입니다 :D 이전에 진행하다 잠시 펜딩되었던 프로젝트를 다시 진행하게 되었으며 이왕 다시 하는거 리팩토링을 해보자! 라는 생각에 리팩토링을 진행하게 되었습니다. 기존 구조 기존에는 모놀리식한 프로젝트 구조에서 MVVM-C 패턴으로 작업이 진행되었습니다. MVC에서 Massive한 ViewController 현상을 피하기 위해 MVVM 패턴을 기반으로 작업을 진행하였으며 그 결과 ViewController 내 존재하던 비즈니스 로직은 ViewModel의 책임으로 이전할 수 ..