분류 전체보기 (40) 썸네일형 리스트형 자료 구조 - 배열, 연결 리스트 C언어로 쉽게 풀어쓴 자료구조를 읽으며 정리배열인덱스와 요소 쌍의 집합메모리의 연속된 위치에 구현된다.크기 5인 배열 A가 있을 때 메모리 주소는 아래와 같다.ElementMemory AddressA[0]base * 1 * sizeof(type of Element)A[1]base * 2 * sizeof(type of Element)A[2]base * 3 * sizeof(type of Element)A[3]base * 4 * sizeof(type of Element)A[4]base * 5 * sizeof(type of Element) 함수의 매개 변수로서의 배열C언어에서 함수의 매개 변수로 배열을 전달하는 것은, 배열의 포인터가 전달되는 것과 같다.Swift 역시 배열 자체가 아닌 배열의 참조가 전달된다.. 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에.. 이전 1 2 3 4 5 다음