[Instruments 맛보기] SwiftUI 성능 최적화
·
iOS/Instruments
🏁 학습할 내용SwiftUI Istruments 구성1차 개선하기2차 개선하기실제 그래프 살펴보기 📂 SwiftUI Instruments 구성1️⃣ Update Groups SwiftUI가 작업을 수행하면, 표시된다.성능을 떨어트리는 원인이 SwiftUI 관련 코드인지, 확인할 때 볼 수 있다. 아래 사진에서 Time Profiler의 CPU 사용량에서 높은 수치를 나타낼 때, Update Groups이 비어있는 것을 볼 수 있다. 해석하면, CPU 사용량의 원인은 SwiftUI 외부에 있을 가능성이 높다. 2️⃣ Long View Body UpdatesSwiftUI View의 body 속성 실행시간에 대한 트랙이다.3️⃣ Long Representable UpdatesSwiftUI에서 Represe..
매크로
·
Programing Langauge/swift
👋 들어가기 전슬슬 새로운 개념들을 조금 씩 배워나가야할 것 같다.."매크로" 해야지 해야지 했는데 선 뜻 시작하기 힘들었던 개념인 것 같다. 이번 포스팅 역시 한번에 작성이 끝나지 않을 수 있을 것 같은 예감이 든다. 시작이 반이니 일단 시작해보자.🏁 학습할 내용Overview매크로 의미등장 계기매크로의 종류동작 방식Freestanding MacroAttached Macro매크로 만들기SwiftSyntaxSwiftSyntaxMacrosSwiftSyntaxBuilder구현부 파헤치기선언부 파헤치기📝 Overview✅ 매크로 의미컴퓨터 과학에서 매크로 의미는 다음과 같다.입력 시퀀스가 출력 시퀀스로 매핑되는 규칙 또는 패턴을 의미 이 때 사용되는 매핑 패턴(과정)을 Source code에서 확장하는 ..
lazy
·
Programing Langauge/swift
👋 들어가기 전뜬금없이 왠 lazy?  lazy 키워드를 많이 썼지만 장점만 바라보고 썼지어떤 단점과 위험성이 있는 지 생각해본적이 없었던 것 같다. 이번에 한번 정리해보자.✊Lazy란정의lazy는 지연 저장 프로퍼티라 불리며 처음 사용되기 전까지 메모리에 올라가지 않는다.왜 var만 가능할까?let은 선언과 동시에 값이 있어야한다. 하지만 lazy는 객체 선언 당시에 값이 없고 객체가 할당되고 그 값이 사용될 때 초기화되기 때문에정의에서 애초에 위배된다. 장단점✅ 장점최초 사용전까지 메모리에 오르지 않기 때문에 초기화 시점에 최적화가 가능하다.자주 사용하지 않는 객체일 경우 자원을 효율적으로 쓸 수 있다.❌ 단점치명적인 단점은 Thread Safe하지 않다.동기화 작업을 하기위해서는 별도의 작업이 더..
Dynamic Key decoding
·
Programing Langauge/swift
👋 들어가기 전또 다시 오랜만에 포스팅을 하게 됐다. 지금은 익명의 프로젝트에 급작스럽게 합류하여 앱 개발을 하던 중 신선한 경험을 하게되어그 경험을 적어보려한다.  이번 시간의 주제는 동적 키 형태를 디코딩 하는 방법을 간단하게 정리해보자.✊ 문제발생만약 서버에서 다음과 같은 형태로 데이터를 보낸다면 우리는 어떻게 처리해야할까 ??// Case1{ "data": { "a":100 }}// Case2{ "data": { "b": nil }}// Case3{ "data": { "c": -100 }} 어디가 불편할까 ??  data안의 key값이 계속 변하는 상황이다..☝️서버 개발자님 "해줘"서버 개발자님 key값 통일해주세요 ~~ 단 칼에 거절 백엔드 상황을 들어보니 충분히..
Task Cancellation
·
iOS/Swift Concurrency
이전과 차이점기존 GCD를 이용했을 때는 작업을 취소하기가 거의 불가능했거나 많이 번거로웠다.하지만 Swift Concurrency에서는 작업의 취소가 굉장히 편해졌다. 이번 포스팅부터는 컨커런시에서 취소하는 법 정확히는 취소를 전파하고 그 취소에 대한 핸들링하는 법을 알아보자. 종류1. 명시적 취소cancel() 메서드를 통해 자식 작업들에게 취소를 전파2. 암시적 취소자식 작업에서 에러가 발생했을 때특징1. 작업 취소가 가능한 구조는 다음과 같다.동일한 context , Task 안의 Task 또는 Task.detached는 해당되지 않음구조적 동시성 구조 , async let or TaskGroup2. 작업의 취소는 즉각 취소가 아닌 취소되었음을 알리는 행위다.task.canecl()을 통해 T..
구조적 동시성 (1)
·
iOS/Swift Concurrency
Structured Concurrency정의구조적이라는게 무슨 뜻일까 ?? 나는 구조적 = 계층적 이란 느낌이  들었다. 계층 구조의 대표적인 구조는 부모 - 자식 구조로 생각할 수 있다.작업들 역시 마찬가지다.  특징작업간의 의존성이 생김 , 자식 작업이 모두 끝나야 부모가 끝날 수 있음부모가 자식 작업을 취소할 수 있음 (취소 전파)context 상속 , [우선순위, 로컬 변수 등]자식 작업의 우선순위가  부모보다 높아지면, 부모 작업도 같이 높아짐이전 코드는 동시성일까?구조적 동시성에 대해 한번 깊게 고민해보자.아래 그림을 보며 생각해보자.너무 간단하다 아래 그림이 동시에 실행되는 구조 같다.우리는 동싱성에 대해 배우고 있는데 그러면 이런식으로 코드를 짰을까 ?? 이번에는 우리가 직접 짰던 코드를 ..