Swift 32

[Swift] SwiftUI에서 some View를 사용하는 이유 | any VS some

왜 SwiftUI에서는 some View를 사용해서 뷰를 그려요? some 키워드가 Opaque Type에서 사용되고 Opaque Type에 대한 개념도 어느 정도 알고 있지만, 어느 날 문득 왜 SwiftUI에서는 any View도 아니고 some View로 뷰에 대한 타입을 리턴 받아 사용하는 걸까 궁금했다.    이렇게 some 키워드로 나타내는 타입을 Opaque Type이라고 하는데, 불명확 타입이라고도 불리며, 역제네릭 타입으로도 불린다. 왜 불명확 혹은 역제네릭 타입으로 불리는지 Opaque Type에 대해 살펴보고, 왜 SwiftUI에서 뷰를 그릴 때는 some View 처럼 Opaque Type을 사용하는지에 대해서도 알아보자!    📍Generic 왜 Opaque Type 알아본다고 ..

Swift 2024.11.14

[Swift] any 키워드는 왜 있는걸까? Existential Type은 뭔데?

some과 any를 공부하다 보니 any라는 키워드가 등장한 이유가 궁금해졌다.궁금증이 의식의 흐름처럼 생기는 편.. ㅎㅎ  any 키워드에 대해서 공부하다보니 Existential type 이라는 것까지 공부하게 되었는데 Existential type의 특성과 함께 swift 5.6에서 any 키워드가 등장한 이유에 대해서도 알게되어 흥미로워 글을 적는다. Swift를 공부하면서 Existential 이라는 단어는 Existential Container 공부할 때 밖에 못 봤는데 (프로토콜 타입의 인스턴스를 저장하는 방법에 대한 내용) 역시나 이번에도 프로토콜에 관련한 내용이었다. Existential Container 에 대한 내용이 궁금하다면 아래 블로그 글로!프로토콜 채택한 구조체 Existent..

Swift 2024.10.31

[Swift] Property Wrapper를 사용해서 UserDefaults 반복 코드 줄여보기

스유에서 친근하게(?) 접할 수 있었던 프로퍼티래퍼.. @State, @Binding 등을 너무 당연하게 써왔었는데 UIKit을 하면서는 거의 까먹고 살았던듯합니다.UserDefault에 저장하고 가져오는 코드를 개선하면서 프로퍼티래퍼Property Wrapper라는 것을 내가 직접 만들어 쓸 수 있구나를 알게 되었고 활용해 본 방법을 공유해 볼게요!   📍 Property Wrapper란?일단 활용을 하려면 이게 뭔지부터 알아야 하니! 천천히 알아가 봅시다  Wrapper라고 하니 프로퍼티를 감싸고 있는 무언가라는 이미지가 그려지시나요??넵 맞숩니다. 프로퍼티와 관련된 행동/작업들을 캡슐화한 것이라고 생각하면 됩니다! 그럼 또 프로퍼티와 관련된 행동/작업은 뭔데??(( 프로퍼티는 그냥 그 객체에 대한..

Swift 2024.07.26

[Swift] iOS의 메모리 캐시 NSCache | NSMutableDictionary객체와의 차이점, NSCopying, 깊은복사/얕은복사

저번 글에서 이미지를 업로드하는 여러 가지 방법에 대해 살펴봤다면, 이번 글에서는 그 이미지들을 메모리 차원에서 캐싱해 놓고 재사용해줄 수 있는 방법에 대해 정리해보려 합니다!  그리고 사실 공부하면서 메모리 캐싱까지만 정리하고 만족하려고 했지만 ㅎㅎ  스터디 함께하시는 분이 흥미로운 키워드를 던져주셔서 다음 글에서는 디스크 캐싱까지 정리해보려 합니다. 어떤 키워드인지는 디스크 캐싱 글에서 공개!        📍 Cache캐시란?캐시..캐싱...이미지 캐싱... 많이는 들어봤는데 일단 Cache의 의미가 무엇인지부터 제대로 알아보시죠.캐시(cache)는 데이터나 값을 미리 복사해 놓는 임시 장소를 뜻한다캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있기..

Swift 2024.07.04

[Swift] 이미지를 로드하는 여러 방법과 Data(contentsOf:)의 priority inversion 이슈 | Kingfisher, Data(contentsOf:), URLSession, Alamofire

이미지를 로드하는 방법에는 매우 여러 가지가 있다.Asset 카탈로그에 추가해서 불러오는 경우도 있겠지만, 대게는 원격 저장소에 저장되어 있는 이미지에 대해 url을 사용하여 이미지를 로드시켜야 할 것이다.  아직 그 많은 방법들을 다 경험해보지는 못했지만, 이번 글에서는 크게 세 가지를 방법을 소개하고자한다!1) 라이브러리를 사용하는 방법(Kingfisher)2) Data(contentsOf:)를 사용하는 방법3) URLSession, Alamofire을 사용하는 방법  왜 하필 이 세 가지 방법을 소개하는가? 하면..이미지가 대량으로 뜨는 작은 프로젝트를 만들었는데 이미지를 로드하는 코드에 대해  위의 세 가지 방법으로 점진적으로 리팩토링을 하며 느낀 점이 많기 때문 ..!!! 나의 블로그 글은 지극..

Swift 2024.06.25

네임스페이스를 관리해보자 | enum, struct로 namespace 관리하기

몇 달 전에 개인프로젝트를 시작할 때 궁금해서 정리해 봤던 주제에 대해 새싹 세션에서도 언급이 되어서 이 기회에 블로그에도 정리해 본다! 개인 프로젝트 당시, 레퍼런스로 봤던 레포지토리에서 namespace를 enum의 타입 프로퍼티 (static let)으로 작성해 둔 것을 보고 왜 굳이 enum안에서 타입프로퍼티로 정리를 해놓는 걸까 생각했었던 적이 있었다. 이유가 궁금해서 찾아보게 되었고 네임스페이스를 정의하는 몇 가지 방법들과 각 방법들의 단점과 장점에 대해 정리했었는데, 블로그에도 남겨놓으려 한다        이전까지 나는 enum의 rawValue를 활용해서 case로 각각 필요한 문자열 같은 것에 대해 정리해주고 있었었다. 기본적으로 우리가 알고 있는 것처럼 enum은 같은 주제의 값들을 모..

Swift 2024.06.21

[Swift] 날짜를 포맷팅하는 또다른 방법 .formatted() | DateFormatter말고 formatted 사용해보자 ( + FormatStyle)

swift에서 날짜를 표현하고 싶을 때는 보통 DateFormatter를 사용해서 Date 인스턴스를 String으로 변환시키거나 날짜형식을 가진 String을 Date 인스턴스로 변환시키곤 했죠  근데 넘 당연하게 써와서 귀찮은지 모르고 썼지만 생각해 보면- DateFormatter 인스턴스 만들고- dateFormat 지정해 주고- 그 외 원하는 locale, timeZone 등의 프로퍼티를 지정해 주는 등  좀 고통스러웠을 수도 있어요?    그래서 date를 String으로 좀 더 쉽게 변환시킬 수 있다는 컨셉으로 등장한 메서드가 Date의 formatted 메서드인데요! formatted 메서드는 iOS15부터 제공하고 뒤에서도 언급하겠지만 Float, Int, Sequence 등에서도 추가되어..

Swift 2024.05.29

[Swift] 프로토콜 뽀개볼까 (5) | Identifiable

Identifiable, 직역하면 "식별 가능한"근데 도대체 무엇을 식별 가능하게 할 것일까? 뭔가 느낌이.. 앞서 살펴봤던 프로토콜들처럼 커스텀 타입들에 대한 것일 거 같은데..맞습니당!! 인스턴스가 고유한 식별자를 갖게 되는 과정을 살펴봅시다~    보통 우리가 인스턴스를 비교하고 싶을 때 Equatable를 채택하고 == 연산자를 사용해서 비교한다.struct Computer : Equatable{ let name : String let serialNumeber : String let price : Int}let computer1 = Computer(name: "computer1", serialNumeber: "000001", price: 100)let computer2 = Comp..

Swift 2024.05.10

[Swift] 프로토토콜 뽀개볼까 (4) | Hashable, HashTable

set, dictionary가 해시테이블로 만들어져서 배열의 검색보다 빠르다는 이야기를 들어본 적이 있나요?set, dictionary가 해시테이블로 저장되기 위해서는 hashable해야하는데,  이 해시테이블이란 무엇이고 값들이 어떻게 저장되며, hashable은 도대체 무엇인지 알아보자!! # HashTableHah Table은 간단하게 말하면 (key,valye)형태로 데이터를 저장하는 자료구조입니다만,,,전혀 간단하지 않단말임.. 1) key를 해시 함수에 넣어2) 고유한 인덱스를 만들어서3) 배열의 해당 인덱스에 value값을 집어넣는 원리 라고 일단 머릿속에 넣어놓고 천천히 생각해 보자!    (key,valye)형태라고 하면 swift에서 가장 먼저 생각나는 건 아마 딕셔너리 Dictiona..

Swift 2024.05.09

[Swift] 프로토콜 뽀개볼까 (3) | Codable (feat. Encodable & Decodable), JSON이란?

그동안 Codable은 Encodable과 Decodable을 합쳐 놓은 거다 이렇게 이해하고 쓰곤 했었는데이해하는 거랑 정리해 놓는 거랑은 또 다르니까 한 번 정리해보려 합니다!  📍공식문서일단 공식문서를 보면프로토콜도, 클래스도, 구조체도 아닌 Type Alias 라고적혀 있네요?   그럼 typealias 란 무엇인가? -> 직역하면 '타입 별명'입니다. 예시를 좀 보자면이렇게 함수에 클로저를 전달할 때, 매개변수에 이런 식으로 타입을 나타내죠func functionName(completionHandler : () -> Void ) {} 근데 (() -> Void) 타입에 대한 별칭을 주고 그 별칭으로 치환해서 사용할 수도 있는 것입니다.typealias Handler = () -> Voidfun..

Swift 2024.04.28