Swift 불투명한 타입(some) 알아보기

개요 Swift 5.1에 새롭게 등장한 불투명한 타입(opaque type)은 프로토콜을 준수하는 실제 타입(underlying type)에 대한 자세한 정보를 숨깁니다. 불투명한 반환 타입을 가지는 함수는 자신이 반환하는 타입에 대한 구체적인 정보를 외부에 드러내지 않습니다. Swift는 프로토콜을 준수하는 실제 타입을 불투명한 타입과 박스형 프로토콜 타입으로 외부에 드러내지 않고 감출 수 있습니다. 겉으로 보이는 기능은 동일해 보이지만, Swift 컴파일러가 해당 타입을 처리하는 내부 방식에는 큰 차이가 있으며, 이는 성능에도 큰 영향을 끼칩니다. 따라서 이러한 차이를 정확히 이해하고 적재적소에 적용할 필요가 있습니다. ...

September 3, 2024 · 7 min · 1468 words · Me

[번역] UIKit / Displaying and managing views with a view controller (애플 공식 문서)

Overview Model-View-Controller(MVC) 디자인 패턴에서 뷰 컨트롤러는 화면에 정보를 보여주는 뷰 객체와 앱의 콘텐츠를 저장한 데이터 객체 사이에 위치하고 있습니다. 조금 더 구체적으로 말하자면, 뷰 컨트롤러는 뷰를 항상 최신 상태로 유지시키기 위해 필요한 상태 정보와 뷰 계층(View Hierarchy)을 관리하고 있습니다. 모든 UIKit 앱은 콘텐츠를 보여주기 위해 뷰 컨트롤러에 많은 의존을 하고 있고, 개발자는 앱의 뷰와 UI와 관련된 로직을 관리하기 위해 커스텀 뷰 컨트롤러를 정의하고 있습니다. 개발자가 생성하는 대부분의 커스텀 뷰 컨트롤러는 콘텐츠 뷰 컨트롤러(Content ViewController)입니다. 이는 뷰 컨트롤러가 모든 뷰를 가지며 해당 뷰와의 상호 작용을 관리한다는 걸 의미합니다. 콘텐츠 뷰 컨트롤러를 사용해 앱의 커스텀 콘텐츠를 보여주고, 뷰 컨트롤러 객체를 사용해 커스텀 뷰로 데이터를 보내거나 받도록 관리할 수 있습니다. ...

August 15, 2024 · 5 min · 1021 words · Me

[번역] iOS: 왜 UI는 메인 스레드에서만 업데이트를 해야 할까? (Dywanedu)

개발을 하는 동안에, 우리는 종종 UIKit 컴포넌트를 백그라운드 스레드(Background Thread)에서 호출해 본 적이 있습니다. 백그라운드 네트워크 콜백에서 imageView.image = anImage 구문을 실행하거나, UIApplication.sharedApplication을 백그라운드 스레드에서 호출하는 일을 꼽을 수 있습니다. 이러한 일이 발생하면, 런-타임 에러가 발생하고, 우리는 해당 에러를 고치게 됩니다. 한번 생각해봅시다. 왜 UI는 메인 스레드에서만 업데이트를 해야 할까요? UI를 백그라운드 스레드에서 업데이트하게 된다면 어떤 일이 벌어질까요? 메인 스레드를 블록킹(Blocking)하는 걸 막기 위해 UI를 백그라운드 스레드에서 업데이트하는 게 더 좋지 않을까요? 본 글은 이 질문을 기초로 하고 있습니다. ...

May 25, 2024 · 4 min · 827 words · Me