[Swift] WWDC18 - Using Collections Effectively(1)
·
WWDC/Swift
서론 Collection은 개발에 빠질 수 없는 필수 요소입니다. 이번에 살펴볼 WWDC18 - Using Collections Effectively에서는 Collection을 효과적으로 사용하는 방법을 알려줍니다. 함께 알아봅시다~ Collection Collection 없이 개발하는 것은 매우 힘듭니다. 요소 하나하나 출력해줘야 하거나 if - else if ... 를 이용해 모든 케이스를 직접 관리해야 합니다. Collection은 이런 불편함을 줄여줍니다. 위처럼 하나하나 관리했던 문제는 Array를 이용해 간편하게 처리가 가능합니다. Collection은 프로토콜 중 하나로, 요소들이 여러 번 통과할 수 있는 시퀀스면서, subscript를 통해 접근할 수 있습니다. Collection은 sta..
[Swift] "public typealias AnyObject" (짧)
·
Swift/개념 & 응용
AnyObject AnyObject가 프로토콜이라는 것은 많은 분들이 아실 거에요. 근데 공식문서를 보니 AnyObject가 Protocol이 아니라 Type Alias라고 적혀있는거에요? 원래 프로토콜은 이렇게 Protocol이라고 적혀있잖아요..?? 근데 AnyObject는 왜 Type Alias라고 적혀있을까? 라는 생각이 들었습니다. (1차 혼란) 그래서 AnyObject를 타고 들어가서 보니 typealias로 적혀있더라고요. 근데 좀 어색하지 않나요? 원래 typealias는 OOO = 타입으로 옆에 어떤 타입인지 적혀 있어야 합니다. 근데 AnyObject에는 아무것도 없는거에요... (2차 혼란) 이에 대해 검색해보니 이미 누가 스택오버플로우에 올렸더라고요. 알고보니 원래 코드에는 정상적으..
[Swift] WWDC22 - Design protocol interface in Swift(디자인 프로토콜 인터페이스)
·
WWDC/Swift
서론 저는 프로토콜 활용을 잘 못합니다. 프로토콜 활용 경험이 많이 없어서요... 근데 영원히 못하는 상태로 남을 수는 없으니 프로토콜 관련 WWDC를 보고 실제 프로젝트에도 써먹어보자 결심했어요. Embrace Swift generics에서 언급했던 세션인 Design protocol interface in Swift을 들어보았습니다. 이번에 들을 세션인 Design protocol interface in Swift는 라고 써있는 만큼 Embrace Swift generics 세션을 먼저 들으시면 좋을 거 같습니다. Embrace Swift generics는 저도 정리를 했으니 링크 남겨둘게요! (WWDC22 - Embrace Swift generics) 아시다시피 이번 WWDC22부터 한글 자막을 지..
[Swift] WWDC21 - ARC in Swift : Basics and beyond
·
WWDC/Swift
서론 지난 포스팅에서 CPU, 메모리같은 앱의 한정된 자원을 절약해야 한다고 말했었습니다. 그럼 메모리에 관한 공부가 더 필요하겠다고 생각해서 ARC에 관한 WWDC 영상도 찾아보았습니다. 익숙한 줄 알았던 ARC에 대해 더 자세히 알게 된 경험이었습니다. (WWDC 꿀잼) ( 좀 놀랐던건 전 지금까지 ARC를 "에이알씨"라고 읽었는데 "아크"라고 읽더라구요... 다른 분들도 아크라고 읽으시나요? 저만 에이알씨라고 읽었나요? ㅋㅋ ㅠㅠ 댓글로 알려주세요... ) ARC in Swift : Basics and beyond 이번 세션에서는 ARC가 어떻게 작동하는지 알고, 객체 수명에 대한 내용을 다룹니다. 이를 제대로 알아야 효과적인 Swift 개발이 가능합니다. Object lifetimes and AR..
[Swift] String.Index 활용법
·
Swift/개념 & 응용
서론 저는 String을 다룰 때 편의를 위해 [Character] 타입으로 변환하면서 사용해 왔습니다. 이러면 subscript를 이용해 원소에 접근할 수 있지만 배열로 변환하는 시간이 추가로 필요합니다. 그래서 String.Index를 잘 다뤄보고자 포스팅을 작성하기로 했습니다. 이번 포스팅은 String.Index가 무엇인지보다 여러 상황에서 어떻게 사용하는지를 다룹니다. 아래에서 꾸준히 나오는 string 변수는 "abcdefg" 입니다. String.Index 이 주제는 이미 지난 포스팅에서 다룬 적이 있습니다. [Swift] Unicode Scalar와 String의 Random Access 서론 오늘 iOS Developers KR 카톡방에서 재밌는 사실을 알았습니다. (사실 공식 문서에 나..
[Swift] 왜 ContiguousArray는 Array보다 자주 사용되지 않을까?
·
Swift/개념 & 응용
서론 (아마 ContiguousArray에 대한 마지막 글) ContiguousArray는 Array보다 효율적입니다. 이는 공식 문서에도 나온 내용이고, 저도 관련해서 포스팅을 썼었죠. (https://jeong9216.tistory.com/468) 하지만 실제 코드를 보면 Array가 훨씬 더 자주 보입니다. 문득 궁금했습니다. ContiguousArray가 더 효율적이면 Array보다 더 자주 사용되어야 하는게 아닌가? 물론, ContiguousArray는 Array보다 덜 대중적이긴 합니다만, Array가 너무 압도적으로 사용이 된단 말이죠? 그래서 혹시 다른 이유는 없는지 찾아보았습니다. 참고로 이번 글은 저의 추측 내용도 많기 때문에 참고만 해주시면 감사하겠습니다. 혹시 틀린 내용이 있다면 댓..
[Swift] NSCache(feat. Dictionary)
·
Swift/개념 & 응용
서론 이미지 캐싱을 구현하다가 NSCache와 Dictionary의 차이점이 궁금해서 찾아보았습니다. 이미 많은 블로그에서 다룬 주제이지만 직접 실험도 해보면서 제 지식으로 만들기 위해 포스팅 해봅니다. 중간 중간 주관적인 의견도 섞여 있으니 틀렸거나 반대 의견이 있으시다면 댓글로 알려주세요. NSCache NSCache는 key-value 형태의 데이터를 임시로 저장하는데 사용할 수 있는 가변 컬렉션(mutable collection) 입니다. NSCache에 의해 캐싱된 데이터는 메모리가 부족할 때 일정한 규칙에 따라 제거될 가능성이 있습니다. NSCache는 클래스 앞에 NS가 붙는 것으로 유추할 수 있듯이, Objective-C 환경에서 구동된다는 것이 특징입니다. NSCache는 Key, Val..
[Swift] WWDC22 - Eliminate data races using Swift Concurrency (1)
·
WWDC/Swift
서론 Swift Concurrency와 GCD를 비교하는 포스팅을 쓸 때 Swift Concurrency는 Data race에 안전하다고 했었습니다. 당시에는 정확히 어떻게 data race를 방지해주는지 알지 못했죠. 마침 WWDC22에 관련 내용이 있어 정리해보기로 했습니다. Sendable (https://developer.apple.com/documentation/swift/sendable)에 대한 내용을 미리 읽어보고 아래 내용을 보시면 더 이해가 쉬우실 것 같네요. 물론 아래에서도 Sendable에 대한 내용이 나오니 나중에 읽으셔도 괜찮습니다 ㅎㅎ 추가로 Actor에 대한 것도 다루는데 전 Actor에 대한 사전 학습이 되어 있지 않아 이해하기 너무 어려웠습니다. 그래서 이번 포스팅에서 다루..
[Swift] WWDC21 - Meet async / await in Swift
·
WWDC/Swift
서론 이번에 들은 WWDC 영상은 "Meet async / await in Swift" 입니다. 처음으로 async / await에 대해 소개해주는 영상인데요. 사실 지난 포스팅에서 다룬 내용과 겹치는 내용이 많아 복습하는 기분이 들긴 했습니다. 그래도 async / await는 아직도 어려운 부분이 있어서 정리하면 좋겠죠. (아마 동일한 주제로 2~3개 더 올리지 않을까... 싶네요 ㅎㅎ;) Functions: synchronous and asynchronous UIKit에는 이미 많은 동기, 비동기 함수가 있습니다. 이번 영상에서는 UIImage를 예시로 들었습니다. size에 맞게 썸네일을 가져오는 메서드로 위쪽 메서드는 동기 버전, 아래쪽 메서드는 비동기 버전입니다. 비동기 버전에는 escapin..
[Swift] WWDC15 - Optimizing Swift Performance
·
WWDC/Swift
저번 Understanding Swift ... 도 그렇고 이번 Optimizing Swift Performance도 그렇고 Swift에 관한 WWDC 내용은 정말 어렵네요 ㅠㅠ 여러 번 돌려봐야겠습니다... Optimizing Swift Performance Swift에는 클로저, 프로토콜, 제네릭, ARC처럼 좋은 기능이 많이 있습니다. 이런 고차원의 기능이 많으면 프로그램이 할 일이 많아지기 때문에 속도는 느려지기 마련입니다. 하지만 Swift는 고도로 최적화되어 native 코드를 굉장히 빠르게 컴파일해줍니다. Swift는 어떻게 두 마리 토끼를 다 잡았을까요? 애플은 위 사진의 모든 고급 기능들을 최적화하였습니다. Array Bounds Checks Optimizations 모두 알아볼 수 없으..
[Swift] WWDC22 - Embrace Swift generics
·
WWDC/Swift
서론 WWDC22는 모든 세션에서 한글 자막을 지원합니다. 한글 자막이 어떤지 궁금해서 요즘 공부 중인 Generic에 관련된 세션을 보고 정리해보았습니다. 한글 자막에 대한 후기도 마지막에 가볍게 말해볼게요. Abstraction 추상화(Abstraction)에 대한 개념으로 영상이 시작됩니다. 아래 코드를 봅시다. 코드에서 * .pi / 180.0 이 중복됩니다. 중복되는 코드를 함수로 묶어 추상화가 가능하고 보일러 플레이트를 줄일 수 있습니다. 이번 포스팅(영상)에서는 농장 환경을 구성하는 코드를 예시로 들고 있습니다. Model with concrete types 첫 번째로 Cow 구조체가 있습니다. Cow 구조체는 eat 메서드를 가지고 있고 먹이로 Hay 구조체를 전달합니다. (Hay : 건초..
[Swift] O(1)로 제곱 수인지 확인하기
·
Swift/개념 & 응용
숫자가 x의 제곱 수인지 확인하기 특정 수가 x의 제곱 수인지 확인하는 방법은 많습니다. 가장 대표적으로 반복문을 이용하는 것이죠. while number >= 3 { if number % 3 != 0 { return false } number /= 3 } 이번 포스팅에서는 O(n)이 아닌 O(1)로 숫자가 x의 제곱 수인지 확인하는 방법에 대해 알아보려고 합니다. (알고리즘 문제를 풀다 알게 된 방법이에요! ㅎㅎ) n이 3의 제곱 수인지 판단한다고 가정합시다. 9는 3의 제곱수입니다. -> 9 % 3 == 0 27은 3의 제곱수입니다 -> 27 % 3 == 0, 27 % 9 == 0 ... 이 패턴을 살펴보면 (더 큰 3의 제곱수 % 작은 3의 제곱수) 값은 항상 0 입니다. 이는 "더 큰 3의 제곱수..
[Swift] isMultiple(of:) 소개
·
Swift/개념 & 응용
isMultiple(of:) 알고리즘을 풀다 isMultiple(of:)를 알게 되어 소개드리기 위해 포스팅을 작성합니다. 간단한 메서드지만 매우 편리하다고 느꼈거든요. isMultiple(of:)는 배수인지 판단하는 메서드입니다. 두 정수 a와 b에 대하여, a = q*b인 세 번째 정수 q가 존재한다면, a는 b의 배수이다. 예를 들어 6 = 2*3이므로 6은 3의 배수입니다. 0은 임의의 정수 x에 대해 0 = 0*x이므로 모든 것의 배수이다. 애플 공식 문서에 나와있는 isMultiple의 Declaration입니다. 메서드 정의를 통해 정수형만, 그중에서도 FixedWidthInteger 프로토콜을 준수한 정수형만 취급한다는 것을 알 수 있습니다. 예제 코드도 살펴봅시다. let number =..
[Swift] WWDC16 - Understanding Swift Performance (2)
·
WWDC/Swift
이전글 [Swift] Understanding Swift Performance (1) 지난 시간 지난 시간의 핵심은 최적화를 진행하는 방법이었습니다. 내 인스턴스가 스택과 힙 중 어디에 할당되는지, 인스턴스를 전달할 때 오버헤드가 얼마나 발생하는지, 인스턴스 메서드를 호출하면 어떤 디스패치로 동작하는지 고려해야 합니다. 구조체를 사용하여 다형성 코드를 작성하는 방법은 프로토콜 지향 프로그래밍입니다. Protocol Types 프로토콜 타입을 알아보면서 프로토콜 타입 및 제네릭(Generic) 코드를 어떻게 구현해야 하는지 알아봅시다. 또, 프로토콜 타입의 변수가 저장되고 복사되는 방식과 메서드 디스패치가 작동하는 방식을 살펴봅시다. 이전 포스팅에서 다뤘던 Point와 Line을 프로토콜로 구현했습니다. ..
[Swift] WWDC16 - Understanding Swift Performance (1)
·
WWDC/Swift
WWDC 16의 Understanding Swift Performance 세션을 이제서야 보았습니다. 2편에 걸쳐 나눠서 정리해보려고 합니다. (해당 포스팅의 사진은 https://developer.apple.com/wwdc16/416 의 프레젠테이션 슬라이드에서 가져왔습니다.) 참고로 해당 포스팅에서는 메서드와 함수를 구분하여 표현하고 있습니다. 발표도 Method와 Function을 명확하게 구분해서 말하고 있더라고요. 두 개의 차이는 https://jeong9216.tistory.com/472 를 참고해 주세요. Dimensions of Performance 추상화를 만들고 추상화 메커니즘을 선택할 때 세 가지를 고려해야 합니다. 인스턴스가 스택에 할당되는지 힙에 할당되는지 인스턴스를 전달할 때 참..
유정주
'스위프트' 태그의 글 목록 (4 Page)