[Swift] weak를 활용한 Linked List
·
Swift/개념 & 응용
링크드 리스트 링크드 리스트는 실제 개발에서도 자주 사용되는 자료구조로, 이전에도 포스팅을 작성한 적이 있습니다. [자료구조] Linked List(링크드 리스트) with Swift 안녕하세요. 개발하는 정주입니다. 오늘은 "Linked List(링크드 리스트)"을 정리하였습니다. 최근에 코딩 테스트를 준비하기 위해 알고리즘 포스팅만 잔뜩 적었는데요. 오랜만에 자료구조를 포스팅 jeong9216.tistory.com 오늘은 약한참조 키워드인 weak를 활용해 코드를 최적화한 양방향 링크드 리스트에 대해 포스팅하려고 합니다. LinkedListNode class LinkedListNode { var value: T var next: LinkedListNode? weak var previous: Linke..
[Swift] 프로토콜 기본 구현 정의하기 (extension Protocol)
·
Swift/개념 & 응용
필요성 프로토콜은 상속과 달리 프로토콜의 정의 부분만 추가된다는 장점이 있습니다. 상속은 부모 클래스의 모든 것을 받기 때문에 프로토콜보다는 무겁죠. 또, 프로토콜은 구조체를 이용해 다형성을 구현하는 핵심 기술이기 때문에 반드시 필요합니다. 그렇지만 프로토콜은 프로토콜에서 정의한 모든 것을 구현해야 한다는 번거로움(?)이 있는데요. 프로토콜을 확장(extension)하면 이를 해소할 수 있습니다. 프로토콜 확장 protocol Testable { func hello() func bye() } 실습을 위한 프로토콜입니다. (형편 없는 네이밍이지만 able은 꼭 붙여주는 ㅋㅋ) Testable 프로토콜에서는 hello와 bye 메서드가 있어서 Testable 프로토콜을 채택하면 두 개의 메서드를 꼭 구현해줘..
[Swift] 값 타입에서 참조 타입 사용 시 주의할 점(feat. isKnownUniquelyReferenced)
·
Swift/개념 & 응용
서론 이 주제는 옛날에도 다루긴 했지만 따로 한 번 더 다루는 것도 좋다고 생각해서 포스팅을 남깁니다. Collection -> Copy-On-Write -> isKnownUniquelyReferenced -> 이번 주제 라는 의식의 흐름 공부를 하고 있었고,,,, 사실 곧 면접이 있어서 포스팅하는 게 시간적으로 굉장히 큰 부담이지만,,, 그래도 기록해두면 저도 좋고 방문자님들도 좋고 좋은게 좋은거니.. ㅎㅎ 아무튼, 이번 포스팅에서는 구조체에서 참조 타입 사용 시 주의할 점에 대해 알아보겠습니다. (전체 코드는 최하단에 있습니다. 코드가 이미지라고 너무 노여워하지 마세요.) Value Semantics와 Reference Semantics Value Semantics 구조체는 값 타입이기 때문에 하나의..
[Swift] CustomStringConvertible - 구조체, 클래스 출력하기
·
Swift/개념 & 응용
CustomStringConvertible 소개 Swift에서 구조체나 클래스를 출력하면 저희가 원하는대로 나오지 않는 경험 다들 한 번씩은 해보셨을 겁니다. 예를 들어, class Point { var x: Int var y: Int init(x: Int, y: Int) { self.x = x self.y = y } } 이런 Point 클래스가 있을 때 이 객체를 출력할 때 x와 y 값을 확인하고 싶다고 합시다. let point = Point(x: 1, y: 2) print(point) //__lldb_expr_15.Point 그래서 point 객체를 출력하면 x, y가 아니라 객체 정보가 출력이 돼요. 클래스를 구조체로 바꾸면 클래스보다는 낫지만 우리가 흔히 사용하는 (x, y) 형태가 아니라 구조..
[Swift] "public typealias AnyObject" (짧)
·
Swift/개념 & 응용
AnyObject AnyObject가 프로토콜이라는 것은 많은 분들이 아실 거에요. 근데 공식문서를 보니 AnyObject가 Protocol이 아니라 Type Alias라고 적혀있는거에요? 원래 프로토콜은 이렇게 Protocol이라고 적혀있잖아요..?? 근데 AnyObject는 왜 Type Alias라고 적혀있을까? 라는 생각이 들었습니다. (1차 혼란) 그래서 AnyObject를 타고 들어가서 보니 typealias로 적혀있더라고요. 근데 좀 어색하지 않나요? 원래 typealias는 OOO = 타입으로 옆에 어떤 타입인지 적혀 있어야 합니다. 근데 AnyObject에는 아무것도 없는거에요... (2차 혼란) 이에 대해 검색해보니 이미 누가 스택오버플로우에 올렸더라고요. 알고보니 원래 코드에는 정상적으..
[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] Unicode Scalar와 String의 Random Access
·
Swift/개념 & 응용
서론 오늘 iOS Developers KR 카톡방에서 재밌는 사실을 알았습니다. (사실 공식 문서에 나와 있는 내용이라 이전에도 알고 있긴 했음 ㅎ;;;) 👨‍👩‍👧‍👧는 여러 개의 유니코드가 합체하여 이루어진 이모지라는 것인데요. 그래서 var emoji = "👨‍👩‍👧‍👧" print(emoji.count) //1 print(emoji.unicodeScalars.count) //7 count를 출력하면 1이지만 unicodeScalars를 출력하면 7이 됩니다. 오늘은 unicodeScalar에 대해 알아보고 String에서 Random Access를 지원하지 않는 이유도 엮어서 알아보겠습니다. Unicode 유니코드는 현존하는 전 세계의 모든 문자를 시스템에서 표현하고 다룰 수 있도록 고안된 표준입..
[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' 카테고리의 글 목록 (4 Page)