본문 바로가기

분류 전체보기

(39)
Concurrency (1) Why Modern Swift Concurrency? Modern Concurrency in Swift 를 읽고 간단 정리 Modern Swift Concurrency의 등장 애플이 비동기 프레임워크에 대해 중요하게 발표한 마지막 시기는GCD(Grand Central Dispatch)가 나왔을 때다. 다만 이는 순수 Swift 코드가 아니라, Objective-C의 것을 빌려 쓴 것이다. Swift 5.5에서 부터 Swift 고유의 asynchronous, concurrent 코드를 작성할 수 있게 된다. Asynchronous와 Concurrent잠깐 간단하게 짚고 넘어가자면 아래와 같다. Synchronous (동기) ㄴ 작업이 순차적으로 실행 / 하나의 작업이 완료되기 전에 다른 작업을 시작하지 않음 Asynchronous(비동기)ㄴ 작업이 완료될 ..
자료 구조 - 순환 (Recursion) C언어로 쉽게 풀어쓴 자료구조를 읽으며 정리 순환(Recursion)이란 어떤 알고리즘 또는 함수가 자기 자신을 호출하여 문제를 해결하는 기법 순환의 강점 순환은 반복에 비해 알고리즘을 훨씬 명확하고 간결하게 나타낼 수 있다. 순환의 약점 함수 호출을 하게 되므로 반복에 비해 수행시간 / 기억 공간의 사용면에서 떨어질 수 있다. 순환의 원리 주어진 문제를 더 작은 동일한 문제로 분해하여 해결하는 divide and conquer 기법 1) 정수의 팩토리얼// 순환 호출로 구현func factorial(n: Int) -> Int {  if n // 반복문으로 구현func factorial(n: Int) -> Int {    var result = 1    var n = n    while n != 1 { ..
Static Linking vs Dynamic Linking 모듈화를 진행하다 보면 Static Linking을 사용할 것인가? Dynamic Linking을 사용할 것인가? 에 대한 끊임없는 고민을 하게 된다. 모든 상황에 완벽한 하나의 정답은 없고 모든 것에는 Trade-off가 존재한다. App Launching Time, Build Time, App Size 등을 고려해야 하는데 Expedia 팀에서 이를 잘 실험한 글이 있어 요약해보려 한다. 특히 여기서 실험한 방식들을 엿보면, 최근 골머리를 앓고 있는 Static Framework 복사 조건에 대해서도 어느정도 힌트를 얻을 수 있는 것 같다. https://medium.com/expedia-group-tech/the-effects-of-linking-dependencies-on-app-performan..
Static Framework의 번들/리소스 Tuist로 모듈화를 진행하면서 Framework 관련 지식들을 공부하다 보니 여러 모르는 개념들이 많이 보인다. iOS에서 Framework를 새롭게 추가할 때 가능한 옵션은 다음과 같다.Framework : mach-o type = dynamic libraryStatic Library : mach-o type = static library이는 공식적으로 애플이 "Framework는 Dynamic으로 사용하세요." 라고 말하는 것 처럼 느껴진다. 실제로 Static Framework를 사용하다 보면 리소스를 포함할 수 없어서 어쩔 수 없이 Dynamic Framework를 사용하는 경우가 있다. Dynamic Framework가 늘어나면 App Launcing Time이 길어지기에 여러가지 Trade-..
단위 테스트 #1 단위 테스트의 목표 Unit Testing(단위 테스트) 책을 읽고 정리한 내용입니다. '단위 테스트를 적용해야 하는가?' 는 더이상 논쟁거리가 아니다.우리는 '어떤 테스트가 좋은 단위 테스트인가?' 에 대해 고민하는 것이 옳다. 테스트를 많이 작성하는 것이 좋은 단위 테스트의 척도가 되지 않는다.이 책은 좋은 단위 테스트에 대한 가이드 라인을 제공한다. 단위 테스트의 목표흔히 단위 테스트는 더 나은 설계로 이어진다고 생각한다. 이는 사실이지만 단위 테스트의 부수적인 효과일 뿐이다.단위 테스트를 하기 어렵다 > 코드 설계가 잘못 되었을 가능성이 높다.단위 테스트를 하기 쉽다 > 코드 설계가 반드시 좋다는 의미는 아니다. 지속성과 확장성 단위 테스트의 진짜 목표는 소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다..
swift docs - Concurrency Concurrency - swift docs 를 읽고 정리한 글 입니다. Swift는 구조화된 방식으로 비동기 및 병렬 코드를 작성할 수 있도록 bulit-in 지원합니다. 한 번에 한 개의 프로그램만 실행 될지라도 비동기 코드는 일시 중단되었다가 나중에 재개될 수 있습니다. 프로그램에서 코드를 일시 중단했다가 재개하면 장기 실행 작업(네트워크를 통해 데이터를 가져오거나 파일을 구문 분석하는 등)을 계속하면서 단기 작업(UI 업데이트 등)에서 계속 진전을 이룰 수 있습니다. 병렬 코드는 여러 코드가 동시에 실행되는 것을 의미합니다. 예를 들어 4코어 프로세서가 있는 컴퓨터는 4개의 코드를 동시에 실행할 수 있으며 각 코어가 하나의 작업을 수행합니다. 병렬 및 비동기 코드를 사용하는 프로그램은 한 번에 여..
SwiftUI 뷰가 다시 그려지는 조건 탐구 (Redraw) SwiftUI로 프로젝트를 진행하던 도중, Redraw 조건을 명확하게 인지하지 못하고 있어 애먹은 일이 있었습니다. 그래서 뷰가 다시 그려지는 조건에 대해서 확인해보고자 합니다.PART 1. WWDC - Demystify SwiftUI WWDC - Demystify SwiftUI를 통해 몇 가지 사실을 알 수 있었습니다.1. Identity1-1. View는 Identitiy를 갖는다. SwiftUI는 이 Identity로 서로 다른 뷰들을 구분한다. 당연하게도 같은 Identity를 가지면 같은 View이다.1-2. Identity는 Structural과 Explict으로 구분된다.Explicit은 직접 명시해줄 수 있는 Identity이다. - modifier로 직접 부여하는 값 - ForEach에..