Swift/개념 & 응용 99

[Swift] escaping과 [weak self]

서론 @escaping 키워드가 붙은 클로저를 본 적이 있으실 겁니다. func withEscaping(completion: @escaping () -> Void) { completion() } 가장 대표적인 예는 completionHandler가 있습니다. escaping 클로저는 non-escaping 클로저와 달리 아래 동작이 가능합니다. 파라미터로 전달된 클로저를 외부 변수/상수에 저장 가능 함수가 종료된 뒤 실행 가능 오늘 포스팅에서는 escaping에 대해 자세히 알아봅시다. non-escaping 클로저 escaping 클로저에 대해 자세히 알아보기 전에 non-escaping 클로저에 대해 알아봅시다. @escaping 이 붙지 않은 클로저는 모두 non-escaping 클로저인데요. 무슨..

[Swift] Class와 Struct

Class와 Struct 새로운 데이터 구조를 정의할 때 구조체와 클래스 중에 무엇을 사용할지 고민합니다. 클래스와 구조체의 차이에 대해 알아보고 어떤 상황에서 무엇을 쓰면 좋을지 알아보겠습니다. 공통점 Swift에서 Class와 Struct는 공통점이 꽤 많습니다. property와 메서드를 정의할 수 있고 init 함수를 통해 초기화할 수 있습니다. 또한, 둘 다 extension을 통해 기능을 확장할 수 있으며 protocol 채택도 할 수 있습니다. 이러한 공통점 덕에 구조체와 클래스 중 무엇을 사용해도 어느정도 구현은 할 수 있죠. 하지만 최적화된 구현을 하기 위해서는 차이점을 파악하여 적절한 선택을 해야합니다. 지금부터는 차이점에 대해 알아봅시다. 타입 종류 클래스는 참조(reference) ..

[Swift] ContiguousArray와 ArraySlice

서론 Swift의 Array는 이미 훌륭하지만 더 최적화를 시킬 수 있는 방법이 있다는 것을 알고 계시나요? 오늘 알아볼 ContiguousArray와 ArraySlice를 이용해 최적화할 수 있는 상황이 있습니다. 오늘은 그 상황과 방법을 알아보도록 합시다. ContiguousArray ContiguousArray는 항상 배열 요소를 인접한 메모리 영역에 저장합니다. 쉽게 말해 항상 연속적인 저장을 보장 받습니다. 그건 배열도 똑같은거 아니야? 라고 생각할 수 있겠지만 Swift의 Array는 Element가 클래스 타입이거나 @objc 프로토콜 타입인 경우 메모리에 연속적으로 저장되지 않습니다. 왜냐하면 NSArray 저장소에 백업이 될 가능성이 있기 때문입니다. 그래서 Array는 Element가 ..

[Swift] Identifiable

Identifiable란? Identifiable란 인스턴스의 유일성을 위해 ID 설정을 강제하는 프로토콜입니다. 예를 들어, 성별, 키, 외모 등 모든 것이 완벽하게 동일한 쌍둥이가 있다고 합시다. Equtable의 관점에서 보면 이 둘은 모든 값이 같기 때문에 동일한 사람입니다. 하지만 Identifiable 프로토콜은 이 둘에게 서로 다른 주민등록번호를 제공해서 다른 사람으로 구분합니다. 주민등록번호가 바로 ID 역할을 하는 것이죠. Identifiable의 코드 부분입니다. 유일성을 보장하기 위해 Hashable 프로토콜을 채택하고 있습니다. ID는 아래와 같은 특성을 갖습니다. UUID와 같이 항상 고유하게 보장됩니다. 환경마다 지속적으로 고유합니다. 프로세스의 수명 동안 고유합니다. 개체의 수..

[Swift] Equatable

서론 Equatable과 Identifiable은 비슷하지만 다른 개념입니다. 공식문서에서도 See Also로 Identifiable를 봐보라고 알려주네요. 이 둘에 대해서 처음 들어보신 분도, 익숙하신 분도 계실텐데요. 이번 포스팅에서는 Equatable가 무엇인지 알아보겠습니다. 다음 포스팅에서는 Identifiable에 대해 알아볼 예정이에요! Equatable Equatable에 대해 알아봅시다. Equatable은 프로토콜 중 하나로 값이 같은지 비교할 수 있는 타입입니다. 용어가 낯설다고 생각하시는 분들은 아래 사진을 봐주세요. 개발자라면 낯설 수가 없는 이 부호가 사실 Equatable의 필요 조건이었습니다. 즉, Equatable을 준수하기 위해서는 == 연산자를 통해 "같다"를 정의해야 ..

[Swift] ARC 정리 & 실습해보기

안녕하세요. 개발하는 정주입니다. 오늘은 "ARC"에 대해 알아보겠습니다. ARC의 개념은 공식 문서가 최고라고 생각하기 때문에 공식 문서 번역으로 진행했습니다. 이번 포스팅에서는 간단한 개념 정리 후 실습을 해보겠습니다. 틀린 내용이 있을 때 댓글로 알려주시면 정말 감사하겠습니다. ARC 공식 문서 번역 보러 가기 [Swift] 공식 문서 - Automatic Reference Counting(ARC) 안녕하세요. 개발하는 정주입니다. 오늘은 "Automatic Reference Counting"를 정리해보겠습니다. * 완벽한 번역이 아닌 내용을 한 줄 한 줄 읽는 것에 의의를 두었습니다. * 파파고의 힘을 빌려 번역했으 jeong9216.tistory.com ARC란? ARC란 Automatic Re..

[Swift] Swift 5.7 변경점 간단 정리

안녕하세요. 개발하는 정주입니다. 오늘은 "Swift 5.7 변경점"에 대해 알아보겠습니다. 간단히 소개하는 정도의 포스팅이 되겠습니다. Swift 문서 업데이트 WWDC22에서 Swift 5.7이 소개되었습니다. Xcode 14.0 베타 버전을 설치하면 Swift 5.7을 사용할 수 있습니다. Document Revision History — The Swift Programming Language (Swift 5.7) Beta Software This documentation contains preliminary information about an API or technology in development. This information is subject to change, and software ..

[Swift] 이제는 Int(String(Substring))과 Int(Substring) 비교가 의미 없는 이유

안녕하세요. 개발하는 정주입니다. 오늘은 "이제는 Int(String(Substring))과 Int(Substring) 비교가 의미 없는 이유"에 대해 알아보겠습니다. 작성하면서 느낀 점은 지금의 제 수준으로는 소화하기가 어려웠다는 점입니다... 혹시 틀린 점이 있다면 알려주시면 감사하겠습니다. 서론 알고리즘 문제를 풀면서 String을 Int로 바꿔야할 때가 많습니다. split( )으로 문자열을 분리하면 Substring으로 return이 되는데요. 이때, Int(String(Substring))과 Int(Substring)의 속도 차이가 있는 것을 알고 계셨나요?? 오늘은 그 이유에 대해 알아보도록 합시다. 그리고 이 비교가 이제는 의미가 없는 이유에 대해서도 다뤘습니다. 속도 테스트 일단 Stri..

[Swift] nil을 제외하는 방법 비교 (guard, compactMap)

안녕하세요. 개발하는 정주입니다. 오늘은 "nil을 제외하는 방법 비교 (guard, compactMap)"에 대해 알아보겠습니다. nil이란? Swift에서 nil이란 변수에 객체가 할당되지 않은 상태입니다. Swift 문서에 따르면 "valueless state by assigning it the special value" 라고 설명하고 있는데요. 즉, 가치가 없는 상태를 nil이라고 합니다. Objective-C에서는 null과 nil이 따로 존재합니다. Objective-C의 nil은 포인터지만 Swift의 nil은 포인터가 아니라는 차이점이 있습니다. nil을 다루는 방법 nil을 다루는 방법에는 여러 종류가 있는데요. 이번 포스팅에서는 guard let과 compactMap만을 다루겠습니다. ..

[Swift] for-in과 고차함수(forEach, map, filter, reduce) 시간 비교

안녕하세요. 개발하는 정주입니다. 오늘은 "for-in과 고차함수(forEach, map, filter, reduce) 시간 비교"에 대해 알아보겠습니다. 이미 많은 자료가 있으나 직접 테스트 해보면 좋을 것 같아 진행하였습니다. 하지만 아직 부족한 실력으론 시간 차이가 발생하는 이유까지는 알아내지 못했습니다 ㅠㅠ 혹시 아시는 분이 계시다면 댓글로 알려주시면 감사하겠습니다! 테스트 방법 테스트 환경 : Xcode 13.3.1 / Swift 5 / MacBook Pro(16형, 2021년 모델) 반복 횟수 : 1000만 * 10회 (총 1억 회) 출력 방법 : 1000만 회를 반복할 때마다 수행 시간을 출력, 마지막에 전체 수행 시간을 출력하였습니다. 시간 측정 메서드 public func measureT..

반응형