iOS/Common 34

[Swift] 누구를 위하여 async/await는 울리나

Q. Swift에 async/await가 도입된 시기는 언제이며, 무엇을 대체하기 위해 등장하였는지 알려줘 A. Swift에 async/await가 도입된 시기는 2021년 WWDC(애플의 개발자 대회)에서 발표되었습니다. 이는 Swift 5.5에서 새로 추가된 기능으로, 애플이 개발한 비동기 프로그래밍 모델입니다. async/await는 Swift에서 비동기 코드를 작성하기 위한 새로운 방법으로, 기존의 GCD(Grand Central Dispatch)와 같은 비동기 프로그래밍 패턴을 대체하기 위해 등장했습니다. GCD는 불편하고 복잡한 코드를 만들기 쉬웠기 때문에, Swift에서는 간단하고 직관적인 코드를 작성할 수 있도록 async/await를 도입했습니다. 또한, async/await는 비동기적인..

iOS/Common 2023.03.22

[Swift] 맵 삼형제(map, flatMap, compactMap)에 대해 알아봅시다

(1) map 애플 개발자 홈페이지에 있는 map에 대한 설명입니다. 배열 내부의 요소들을 매핑해서 돌려준다네요! 그런데 mapping이 뭘까요? 구글에 물어봅시다. 역시 명쾌하다! 구글! 여기 말고 이번에는 해시넷에서 봅시다(블록체인 관련된 정보들이 참 많습니다). 아까보단 훨씬 낫죠? 그래도 이해가 잘 안 될 수 있습니다. 코드로 보시죠! 바로 감이 오시나요? numbers 배열의 각 요소에 1을 더한 애들을 배열에 담아 보여 줍니다. 다른 예시를 한 번 들어볼까요? 아까 사용했던 numbers를 그대로 사용하는데, 이번에는 numbers 내부의 각 요소를 String 타입으로 활용해봤습니다. 이렇게 축약해서 쓸 수도 있습니다. 이번에는 한 번 스까서 써볼까요?? numbers의 각 요소에 3을 더한..

iOS/Common 2022.06.10

[Swift] 고차함수(map, filter, reduce)를 스윽 핥아봅시다

고차함수(Higher-order function)는 다른 함수를 전달인자로 받거나, 함수 실행의 결과를 함수로 반환하는 함수를 뜻합니다! Swift의 함수(클로저)가 일급시민이므로 함수의 전달 인자로 전달할 수 있고, 함수의 결괏값을 반환할 수 있습니다. 고러면 바로 고차함수 map, filter, reduce에 대해 알아봅시다! (1) map map은 뭘까요? 내부의 요소들을 변경(변형이 좀 더 정확합니다)해서 이를 담아 돌려주는 것입니다. 바로 봅시다! 감이 잡히시나요? Numbers 배열 내부에 있는 각 요소에 대하여 mapNumbers1에서는 1을 더해주었고, mapNumbers2에서는 아예 String으로 변환하여 사용해주고 있습니다. 이런 식으로 축약해서 사용할 수도 있습니다. 심지어 섞어 쓸..

iOS/Common 2022.06.08

[Swift] final 왜 막 갖다 붙이나요? (feat. vtable, dynamic dispatch)

우리가 코드를 짜다 보면 이렇게 final 키워드를 붙여서 쓰는 경우가 있잖아요?(반박할 시 코 쓱 닦음) 다른 사람들이 쓰니까 일단 따라 쓰긴 하는데, 이거 왜 쓰는 걸까요? Swift의 LANGUAGE GUIDE 중 Inheritance 항목의 내용을 보시면 final에 대한 설명이 나옵니다. (발 번역 주의) “여러분은 final 키워드를 메소드나 프로퍼티, 또는 서브스크립트 앞에 사용함으로써 오버라이드 되는 것을 막을 수 있습니다. (예시: final var, final func, final class, final subscript). final을 써놓고 오버라이드를 하려고 하면 컴파일 에러가 발생합니다. extension을 사용하는 경우에도 final 키워드를 사용할 수 있습니다. (이하 생략)..

iOS/Common 2022.06.06

[Swift] lazy 왜 쓰나요?

우리 iOS 개발할 때 이런식으로 lazy 많이 쓰지요? private lazy var sampleLabel: UILable = { let label = UILabel() label.text = "lazy 왜 쓰나요?" label.textColor = UIColor.systemBlue return label }() 그런데 lazy를 왜 쓰는지 알고 계신가요? lazy 키워드를 사용하는 프로퍼티를 지연 저장 프로퍼티(Lazy Stroed Property)라고 합니다. 지연 저장 프로퍼티는 호출이 있어야만 값을 초기화 하는 특성을 가지고 있습니다. 좀 더 자세히 설명해 봅시다. 우리가 인스턴스를 초기화 하는 과정에서 언제나 모든 저장 프로퍼티가 동시에 초기화 될 필요가 없는 상황이 분명히 있겠지요? 그럴 때..

iOS/Common 2022.05.13

[Code Snippet] private lazy var 쓰다가 팔 부러질 것 같을 때 보는 글

앱을 개발하는 과정에서 자연스럽게 많이 쓰게 되는 코드들이 있습니다. 제목에 써 놓은 'private lazy var' 외에도 여러분들 각자 상황에 따라 유독 자주 사용하는 코드가 있을 것입니다! 그럴 때 Xcode에서 제공하는 Create Code Snippet 한 번 사용해보시는 건 어떨까요?! 자 자 바로 시작합시다! 지금 보시는 화면이야 예시를 들기 위해서 세 개의 Label만 추가한 상황이지만, 실제로 앱을 만드는 과정에서는 다양한 종류의 UI Component들을 활용하는 경우가 많지요! 이런 상황에서 반복적으로 사용하게 되는 코드들을 복사해 놨다가 다음번에 붙여 넣기 하는 방법도 있겠지만, 좀 더 그럴싸한 방법이 있습니다! 보시면 'plv'만 작성했는데 자동완성으로 'private lazy..

iOS/Common 2022.04.29

키체인(Keychain)에 대한 설명과 간단한 사용법

iOS 앱 개발 과정에서 로컬(모바일 기기)에 특정 정보를 저장할 때 간단하게는 유저디폴트(UserDefaults)부터 코어데이터, Realm, SQLite 등 여러 저장 방식을 사용할 수 있습니다. 하지만 정말 중요한 사용자 정보들(예를 들어 패스워드, 프라이빗 키, 인증서 등)을 아무 곳에나 저장하는 것은 아주 위험하다고 할 수 있겠습니다! 민감한 정보를 안전하게 저장하기 위해 애플은 Keychain Services를 제공합니다. 여러분들은 사용자의 민감 정보를 암호화 해서 키체인에 저장하고, 이후에 이를 다시 복호화 해서 사용할 수 있습니다! 결국 중요한 것은 사용 방법이겠지요? 키체인을 생성(Create)하고, 읽고(Read), 지우는(Delete) 방법을 한 번 알아봅시다! 바로 전체 코드를 보..

iOS/Common 2022.04.20

Test Driven Development는 무엇이며, 왜 하는가?

고오급 iOS 개발자가 되기 위해 고군분투 하고있는 요즘입니다! 그러다 연쇄 할인마 유데미에서 또 할인을 하길래 들을만한 강의 없나 하다가 유데미에서 굉장히 잘나가시는 무함마드 아잠 선생님의 TDD 강의를 구매하게 되었습니다! 강의는 다 들었고! 배운 내용을 잊지 않기 위해 배운 내용 전파를 좀 해보겠습니다ㅋㅋ 1. TDD의 Life Cycle TDD는 다음과 같은 생명 주기를 갖습니다. (1) 실패하는 테스트를 작성 (2) 테스트를 성공하도록 만들기 (3) 성공한 테스트 코드를 리팩토링 하기 (4) 위 과정 반복하기 2. 왜 TDD를 해야 하는가? (1) 걱정 없이 코드를 수정할 수 있습니다 - 테스트 코드가 작성 돼 있다면 여러분이 어떤 코드를 수정할 때 해당 수정 내용이 다른 코드에 영향을 미치는지..

iOS/Common 2022.04.14

앱 스토어 커넥트에서 DSYM 파일 다운로드가 안 되는 문제 해결하기

DSYM 파일을 다운로드 받을 때 보통 두 가지 방법을 씁니다. (1) Xcode 상단의 Window 항목 -> 그 중 Organizer 클릭 -> Archives의 Details에 있는 Download Debug Symbols 버튼 클릭 (2) App Store Connect 접속 -> TestFlight 클릭 -> DSYM을 받고자 하는 빌드 버전 클릭 -> 빌드 메타데이터 클릭 -> 기호 포함에 있는 예 | dSYM 다운로드 클릭 그 런 데... 왜 클릭해도 다운로드 안 되냐 이거야... 그 런 데... 정말 단순한 해결책이... 바로 바로 바로 바로... Safari를 쓰면 됩니다~ Just use Safari~ Safari에서 위에 나온 절차를 그대로 따라하면 무슨 일이 있었냐는듯 다운로드가 ..

iOS/Common 2022.03.31