안녕하세요, iOS 개발하는 루피입니다. 오늘은 WWDC21 Demystify SwiftUI 영상을 정리하는 마지막 3번째 시간입니다. 지난 글들에서는 지금까지 "Identity가 무엇이고", "Identity가 View의 Lifetime과 어떻게 연관되는지"에 대해 정리해 봤다면, 이번에는 “SwiftUI가 UI를 업데이트하는 방법”에 대해 정리해보도록 하겠습니다. 바로 시작합니다.Dependencies(의존성)Dependencies는 흔히 우리에게는 의존성, 종속성이라는 단어로 불리고 있습니다. 이번 글에서는 쉽게 의존성이라는 단어를 이해하기 위해 View가 동작하기 위해 필요한 입력값이라고 얘기해 두겠습니다. 그러면 아래의 코드부터 같이 보도록 하시죠.현재 코드에는 2개의 property가 있습니다..
iOS
안녕하세요, iOS 개발하는 루피입니다. 오늘은 WWDC21 Demystify SwiftUI 영상을 정리하는 2번째 시간입니다. 저번 글에서는 SwiftUI가 뷰를 식별하는 방식을 이해했다면, 이번 글에서는 ID가 뷰와 데이터의 수명과 어떻게 연결되는지 정리해 보는 시간을 가져보도록 하겠습니다. 바로 시작합니다.Lifetime영상에서는 고양이 테세우스의 예시를 들고 있습니다. 이 고양이가 일어나서 밥을 먹던지, 시간이 지나 밖에서 나가서 산책을 하던지, 기분이 안좋아 저에게 화를 내더라도 똑같은 테세우스라는 것은 변합이 없습니다. 이러한 생각이 바로 Identity와 Lifetime을 연결하는 핵심입니다.이전 글에서 봤던 위 앱도 동일합니다. 각각의 상태는 시점에 따라 다른 값을 가지게 됩니다. 코드를 ..
안녕하세요, iOS 개발하는 루피입니다. 오늘은 WWDC21 Demystify SwiftUI 영상을 보고 정리해보는 시간은 갖으려 합니다. 이번 영상은 선언형 프레임워크인 SwiftUI가 내부적으로 무엇을 하고 있는지에 대해 설명하면서, “SwiftUI가 내 코드를 볼 때, 무엇을 보는가?”라는 주제를 바탕으로 정보를 전달하는데요, 이번 글은 정리를 목적으로 진행하며, 총 3개의 글로 정리해보겠습니다. 바로 시작합니다.SwiftUI가 집중하는 3가지Identity : SwiftUI가 여러 업데이트에서 요소를 동일하거나 별개로 인식하는 방식이다.Lifetime : SwiftUI가 시간 경과에 따라 뷰와 데이터의 존재를 추적하는 방식이다.Dependencies : SwiftUI가 인터페이스를 업데이트해야 하..
안녕하세요, iOS 개발하는 루피입니다. 오늘은 인터페이스를 관리하고, 앱의 콘텐츠 간 네비게이션을 구현하는 데 필요한 View Controller에 대해 정리해 보도록 하겠습니다. 바로 시작합니다. ( 편의상 ViewController를 VC라고 하겠습니다. )View Controller란?VC는 UIKit 앱의 인터페이스를 관리하는 핵심 요소입니다. 모든 iOS 앱은 최소 하나 이상의 VC를 가지고 있으며, 이는 앱의 메인 윈도우를 채우는 역할을 하죠! 간단히 말하자면, VC가 하는 일은 다음과 같습니다.앱 UI의 특정 부분, 즉 View를 관리합니다.해당 UI와 데이터 간의 상호작용을 담당합니다.앱 내에서 서로 다른 UI 간의 전환 처리를 담당합니다. (네비게이션은 이에 해당하겠죠?)각 VC는 하나..
안녕하세요, iOS 개발하는 루피입니다. 개발을 하시면서, DispatchQueue.global().async라는 코드를 한 번쯤은 사용해 보셨을 겁니다. 우리는 이 코드를 통해 무거운 작업을 백그라운드 스레드로 보내 UI 프리징을 막곤 하죠. 하지만 혹시 이런 질문을 던져본 적 있으신가요?DispatchQueue/global() 은 정확히 무엇일까?왜 우리는 Thread.start()처럼 스레드를 직접 만들지 않을까?시스템은 우리가 던져준 작업을 어떻게 처리하고 있는 걸까?오늘은 이러한 숨겨진 내부 동작을 공부해 보면서, iOS 동시성의 가장 낮은 곳에 있는 RunLoop와 Thread Pool의 개념을 이해하고, 이를 통해 우리가 자주 사용하는 GCD와 OperationQueue가 왜 효율적인 방법인..
안녕하세요,루피입니다. 오늘은 공식문서를 바탕으로 클로저에 대해 다시 한번 정리하는 시간을 가져보도록 하겠습니다. 바로 시작합니다.클로저와 함수의 관계진행하기에 앞서 우선 클로저와 함수의 관계를 짚고 넘어가도록 하겠습니다. Swift의 공식 문서에 따르면, 함수는 사실 이름이 있는 클로저의 한 종류입니다. 즉, 클로저가 더 큰 개념이고 함수는 그 안에 포함된 특별한 형태인 셈이죠.공통점특정 작업을 수행하는 코드 블록입니다.매개변수를 받고 결과값을 반환할 수 있습니다.주변 컨텍스트의 변수나 상수를 캡처 할 수 있습니다.차이점 함수클로저이름항상 이름이 있음이름이 없는 형태가 일반적키워드func 키워드로 명시적 선언{ } 를 사용한 간결한 문법활용독립적인 기능 단위로 사용다른 함수의 인자, 변수 할당 등 유연..
안녕하세요, 루피입니다. 오늘은 iOS는 어떻게 메모리를 관리할까? 라는 주제로 글을 작성 해보겠습니다. 지난 글 중 ARC와 관련된 글도 참고해서 보시면 좋을거 같습니다. 바로 시작합니다.1. iOS 메모리 관리의 특징iOS의 메모리 관리는 모바일 환경의 제약을 고려하여 설계되었습니다.배터리 수명 최적화: 디스크 I/O를 최소화하여 전력 소모를 줄임플래시 메모리 보호: 과도한 쓰기 작업으로 인한 스토리지 수명 단축 방지사용자 경험 우선: 앱 응답성을 해치지 않는 선에서 메모리 관리2. ARC (Automatic Reference Counting)iOS 개발자가 C언어처럼 malloc과 free를 직접 호출하지 않아도 되는 이유입니다.1) ARC의 동작 원리ARC는 컴파일 타임에 코드를 분석하여, 객체를..
안녕하세요, 루피입니다. SwiftUI로 개발하다 보면 List나 ForEach를 사용하면서 Identifiable이라는 프로토콜을 마주치는 순간이 꼭 찾아옵니다. 공식 문서를 봐도 그 의미가 선뜻 와닿지 않아 고개를 갸우뚱했던 경험, 다들 한 번쯤 있으실 텐데요. 오늘은 Identifiable이 정확히 무엇인지, 왜 중요한지, 그리고 다양한 상황에 맞춰 ID를 어떻게 설계해야 하는지, 정리하는 시간을 갖겠습니다. 바로 시작합니다.1. Identifiable이란?protocol Identifiable { associatedtype ID : Hashable var id: Self.ID { get }}먼저 Apple 공식 문서의 정의를 살펴보죠.안정적인 식별자를 가진 엔티티의 값을 보유하는 인스턴..
안녕하세요, 루피입니다. 오늘은 Swift 고차함수에 대해 정리해 보도록 하겠습니다. 바로 시작합니다.1. 왜 고차함수를 정리할까?블로그 글이 100개가 넘어서 고차함수를 정리하는 과정이 앞뒤가 맞지 않다고 생각합니다..ㅎㅎ. 하지만, 아 진짜 이번 기회에 고차함수를 꼭 정리하고 넘어가야겠어!!라고 생각을 갖게 된 계기가 생겨났습니다!! 바로, Swift로 코딩테스트를 보았기 때문입니다. 저는 원래 학교에서 1학년 때부터 사용했던 C++ 로 코딩테스트를 준비했었는데요, 이번 기회에 Swift로 준비하면서, 아 내가 함수형 언어, Swift의 특징과 강력함을 글로 알고 있었구나..라는 생각이 들었습니다. 더 나아가 내가 Swift를 사용하긴 했지만, 전혀 Swift스럽지 않은 코드를 사용하고 있어구나..라..
안녕하세요, 루피입니다. 오늘은 클로저를 공부하다 알게된 @autoclosure에 대해 정리 해보려합니다. @autoclosure에 대해 단순히 { } 를 생략하게 해주는 코드를 깔끔하게 만들어주는 Syntax Sugar로만 알고 계신분들도 많을텐데요. 이번시간에는 @autoclosure의 진짜 강력함인 실행 지연에 대해 좀 더 집중하도록 하겠습니다. 바로 시작합니다.문제의 시작: "굳이 지금 계산해야 할까?"@autoclosure를 이해하려면 먼저 이것이 해결하려는 문제를 알아야 합니다. 다음은 간단한 로그를 출력하는 함수입니다.// 조건이 참일 때만 메시지를 출력하는 함수func logIfTrue(_ condition: Bool, _ message: String) { if condition { ..