[Swift] 깊은 복사와 얕은 복사(feat. NSCopying)
·
Swift/개념 & 응용
Value 타입과 Reference 타입 값(value) 타입과 참조(reference) 타입은 복사 방식이 다릅니다. 일반적으로 값 타입은 깊은 복사, 참조 타입은 얕은 복사가 발생한다고 알고 계실텐데요. 정말 그런지 알아보고 참조 타입이어도 깊은 복사를 할 수 있는 방법에 대해 알아봅시다. 깊은 복사(Deep copy) 깊은 복사는 데이터 자체를 복사하는 방법입니다. 각자 독립적인 메모리를 차지하기 때문에 복사한 인스턴스의 데이터를 바꾸더라도 원본에 영향을 주지 않습니다. 값 타입의 인스턴스들은 깊은 복사를 하게 되는데요. 아래는 Collection 타입인 Array를 복사하는 예제입니다. var arr: [Int] = [1, 2, 3] var copyArr = arr print("arr: \(arr..
[Swift] Swift Interview Questions - Intermediate(중급)
·
Swift/개념 & 응용
현재 포스팅은 2편 Intermediate 질문입니다. 1편 Beginner 보러가기 Question 1 차이가 없습니다. nil과 Optional.none은 같습니다. 동작은 같아도 nil로 작성하는 것이 일반적인 코드 컨벤션에 더 맞습니다. Question 2 let 인스턴스는 mutating 메서드를 호출할 수 없습니다. mutating 메서드는 값을 바꿀 것이라는 전제 하에 정의한 메서드인데 let 구조체 인스턴스는 내부 프로퍼티를 변경할 수 없으므로 컴파일 에러가 발생합니다. Question 3 I love cars가 출력됩니다. thing 변수를 변경하기 전에 closure에서 thing을 캡처했습니다. 따라서 I love cars가 출력됩니다. 만약 [thing]이 없었다면 "I love a..
[Swift] Swift는 어떤 해시 알고리즘을 쓸까? / Hashable
·
Swift/개념 & 응용
Hashable 지난 포스팅에서 다뤘던 Hashable은 프로토콜 중 하나로, Hasher에 해시되어 정수 해시 값을 생성할 수 있는 타입을 정의합니다. (Hashable에 대한 더 자세한 내용은 여기에서 확인해주세요.) 오늘 포스팅은 Hasher가 어떤 해시 알고리즘을 사용하는지에 대한 내용입니다. 궁금해서 찾아봤는데 생각보다 흥미로워서 공유하기 위해 포스팅 작성합니다. 사설이 긴 편이니 바쁘신 분은 SipHash 문단부터 읽어주세요. 기존 방법 Swift 4.1부터 Equatable과 Hashable 프로토콜에 대한 적합성을 자동으로 합성해주기 시작했고, 지금의 Hasher를 이용한 해시 방법은 Swift 4.2부터 탄생했습니다. 이전에는 개발자가 직접 hash 함수를 만들어줬어야 했습니다. 찾아보니..
[Swift] Hashable
·
Swift/개념 & 응용
Hash Hashable에 대해 알아보기 전에 Hash에 대해 알아야 합니다. Hash란 해시 함수에 의해 얻어지는 값으로 해시값, 해시코드로도 불리는데요. 해시 함수는 특정 input을 넣었을 때 항상 일정한 output이 나오는 함수입니다. 위 사진처럼 "안녕하세요"가 input으로 들어가면 해시 로직을 거쳐 항상 동일한 output이 나와야 합니다. input이 달라지면 output도 달라져야 하는데요. 로직에 따라 다른 input이라도 output이 같을 수 있습니다. 이때! 다른 output이 나오는 input의 개수가 많으면 많을수록 좋은 해시함수랍니다. 아무튼, 오늘 포스팅에서 중요한 해시의 성질은 input을 넣었을 때 "일정한" output이 나와야 한다는 점입니다. 이것만 기억해 주세요..
[Swift] UserDefaults 알아보기
·
Swift/개념 & 응용
iOS에서 데이터를 영구적으로 저장하는 방법은 여러 가지가 있습니다. 그중 대표적인 방법이 UserDefaults와 CoreData인데요. 오늘은 UserDefaults에 대해 알아보도록 하겠습니다. UserDefaults UserDefaults는 가장 기본적인 데이터베이스로, 복잡하고 큰 용량의 데이터보다는 스위치의 On/Off 같은 사용자 기본 설정처럼 간단한 데이터 저장에 적합합니다. 앱이 삭제되면 UserDefaults 데이터도 함께 삭제되므로 데이터가 영구히 유지되어야 한다면 UserDefaults는 부적합할 수 있습니다. 또한, 데이터가 암호화되지 않고 그대로 저장이 되기 때문에 보안과 관련된 정보는 저장하지 않는 것이 좋습니다! (민감한 데이터는 키체인을 이용해야 합니다.) UserDefau..
[Swift] Type Inference와 Type Annotation 속도 비교
·
Swift/개념 & 응용
Type Inference와 Type Annotation Swift의 변수/상수를 선언하는 방법은 두 가지입니다. 컴파일러가 타입을 정해주는 방법과 개발자가 직접 타입을 작성해주는 방법입니다. 컴파일러가 타입을 정해주는 것은 타입 추론(Type Inference), 개발자가 타입을 작성하는 방법을 타입 명시(Type Annotation)라고 하는데요. 아마 많은 분들이 이미 Type Annotation을 사용하는게 성능이 더 좋다는 것은 알고 계실 것입니다. 왜냐하면 컴파일러가 할 일을 개발자가 대신 해주니까요. 오늘은 Type Inference와 Type Annotation의 속도가 얼마나 차이가 나는지 직접 확인해보겠습니다. 추가로 이건 개인적으로 궁금한건데 ㅎ;; Int, String, Array ..
[Swift] Method Dispatch - Dynamic과 Static
·
Swift/개념 & 응용
Method Dispatch - Dynamic과 Static Method Dispatch는 성능 최적화를 말할 때 꼭 나오는 단어 중 하나입니다. Method Dispatch는 Static Dispatch와 Dynamic Dispatch가 있습니다. Static Dispatch와 Dynamic Dispatch의 대결 구도는 class와 struct 대결 구도와 비슷한데요. 하나씩 천천히 알아보도록 합시다. Method Dispatch 일단 Method Dispatch가 무엇인지 알아야 합니다. Swift를 포함한 객체 지향 언어는 하위 클래스가 상위 클래스의 프로퍼티와 메서드를 오버라이드할 수 있습니다. 오버라이드를 하게되면 프로그램은 호출할 함수가 어떤 것인지 결정하는 과정이 필요한데요. 이때 사용하는..
[Swift] GCD(Grand Central Dispatch) - 2 / Dispatch Queue
·
Swift/개념 & 응용
* GCD 포스팅은 2편으로 구성되어 있습니다. 1편은 여기에서 볼 수 있습니다. Dispatch Queue 종류 Dispatch Queue는 세 가지 종류가 있습니다. Main Queue, Global Queue, Custom Queue 인데요. 하나씩 알아보도록 합시다. Main Queue Main Queue는 Main Thread에서 작업을 보관하고 수행하는 Queue입니다. Main Thread에서 동작하기 때문에 단 하나만 존재할 수 있고, 자연스럽게 Serial 특성을 갖습니다. (Concurrent는 여러 Thread로 분산해야 하는데 Queue가 단 하나만 존재하므로 분산될 수가 없다) Main Queue는 UI 업데이트를 담당하는데요. 화면 위에 UI를 그리는 작업을 Main Queue에..
[Swift] GCD(Grand Central Dispatch) - 1
·
Swift/개념 & 응용
* GCD 포스팅은 총 2편으로 작성되었습니다. 1편에서는 GCD가 무엇인지, serial/concurrent, sync/async에 대해 알아봅니다. 2편에서는 Dispatch Queue의 종류와 특성에 대해 알아볼 계획입니다. GCD(Grand Central Dispatch)란? Dispatch, also known as Grand Central Dispatch (GCD), contains language features, runtime libraries, and system enhancements that provide systemic, comprehensive improvements to the support for concurrent code execution on multicore hardwa..
[Swift 알고리즘] LeetCode - 48. Rotate Image
·
코딩테스트
Github GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘 스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub. github.com 문제 링크 https://leetcode.com/problems/rotate-image/ Rotate Image - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 이번 ..
[Swift 알고리즘] LeetCode - 230. Kth Smallest Element in a BST
·
코딩테스트
Github GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘 스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub. github.com 문제 링크 Kth Smallest Element in a BST - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 k번째 수를 BST에서 탐색하여 구하는 문제입니다. 처..
[Swift 알고리즘] LeetCode - 22. Generate Parentheses
·
코딩테스트
Github GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘 스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub. github.com 문제 링크 Generate Parentheses - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 이번 문제는 올바른 괄호가 n쌍인 모든 문자열을 구하는 문제입니다. n..
[Swift 알고리즘] LeetCode - 206. Reverse Linked List
·
코딩테스트
Github GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘 스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub. github.com 문제 링크 Reverse Linked List - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 단방향 링크드 리스트를 역순으로 뒤집어야 하는 문제입니다. Easy 난이..
[Swift] async / await 간단 정리 & 실습
·
Swift/개념 & 응용
서론 async / await에 대한 Swift 가이드를 읽으면서 한숨이 푹 나왔습니다. 이게 무슨 말인지 모르겠고... 단어도 어렵고 ㅎㅎ;; async / await에 대해 따로 정리해야할 필요성을 느껴 포스팅을 하게 되었습니다. 아마 async / await와 task, actor에 대한 것은 꾸준히 공부하면서 글을 작성할 듯 합니다. 아무튼 이번 포스팅은 깊은 개념 정리가 아니라 간단 정리로 생각해주시면 감사하겠습니다. 동시에 간단 실습도 함께 진행합니다! async / await에 대한 Swift 가이드는 여기에서 확인할 수 있습니다. async / await 탄생 배경 async / await는 비동기를 처리하는 기능입니다. 기존에는 completion handler는 에러일 때 complet..
[Swift 알고리즘] LeetCode - 2181. Merge Nodes in Between Zeros
·
코딩테스트
Github GitHub - jeongju9216/SwiftAlgorithm: 스위프트 알고리즘 스위프트 알고리즘. Contribute to jeongju9216/SwiftAlgorithm development by creating an account on GitHub. github.com 문제 링크 Merge Nodes in Between Zeros - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 풀이 이번 문제는 링크드 리스트 문제로 탐색과 삽입을 모두 물..
유정주
'스위프트' 태그의 글 목록 (5 Page)