전체 글

🤔 글을 시작하며Swift를 쓴다면 map, flatMap, compactMap정도는 알 것이다. 이 글에서는 이 세 개의 차이를 말하기보단 세부 구현에 대해서 알아보고자 한다. 차이만 알고 싶다면... 아래의 예시만 참고하면 될 것 같다. map은 배열을 1:1로 다른 타입으로 매핑한다.let numbers = [1, 2, 3]let strings = numbers.map { "\($0)" }// ["1", "2", "3"]compactMap은 배열을 1:1로 다른 타입으로 매핑하면서 nil값은 없애준다.let strings = ["1", "2", "삼", "4"]let numbers = strings.compactMap { Int($0) }// [1, 2, 4]flatMap은 배열을 펼쳐준다.let..
🤔 간단한 실험아래의 코드를 실행시키면 어떻게 될까?let numbers = [1,2,3,4,5,6]numbers.forEach { number in if number == 2 { return } print(number)}당연하게도 2를 제외한 1, 3, 4, 5, 6이 출력될 것이다. 그렇다면 아래의 코드는?for number in numbers { if number == 2 { return } print(number)}바로바로 아래와 같이 오류가 발생하게 된다.엇 두개의 정확한 차이가 뭘까?🧑🏻‍💻 내부 구현Swift는 오픈소스이기 때문에 내부구현을 찾아볼 수 있었다. swift/stdlib/public/core/Sequence.swift at 376651df4db8d76..
· → UIKit
🪽 Sendbird뷰의 라이프사이클을 잘 활용하고 있는 예시를 찾아보다가 Sendbird 레포지토리를 발견했었다. 이번에 앱의 라이프사이클을 공부하고 뷰의 라이프사이클을 공부하면서 Sendbird 레포지토리를 다시 한번 보고 정리해보고 싶었다. GitHub - sendbird/sendbird-uikit-ios: Sendbird UIKit for iOS is a development kit with a user interface, offering a simplified iSendbird UIKit for iOS is a development kit with a user interface, offering a simplified integration into chat. - sendbird/sendbird-..
💻 이전 글이전에는 SSD를 알아보았는데, 결국 DRAM 까지 왔다. [CS] SSD의 구조💻 이전 글이전에는 HDD의 구조와 스케줄링을 알아보았는데, 이번에는 SSD, DRAM 까지 살펴보려고 한다. [CS] HDD의 구조 및 스케줄링HDD, SSD, DRAM에 대해서 학습하고 기록하고자 포스팅을 작성하게swift-library.tistory.com📏 DRAM아래의 유튜브를 참고하여 정리하였다.Dynamic Random Access Memory인 DRAM은 SSD보다 약 3000배 이상 빠르다고 한다.DRAM은 겹겹이 쌓인 SSD와 달리 2차원 배열이고 메모리 셀당 한 비트를 일시적으로 저장한다. 또한 보관된 데이터를 지속적으로 저장하기 위해 전력이 필요하다. 이렇게 저장된 값을 계속 새로 고쳐줘..
🫠 String은 왜 index가 까다로울까?항상 String을 사용하다 보면 아래와 같이 반복문은 쓸 수 있는데 index로 접근하지 못할까?라는 생각을 많이 해봤다.아래와 같이 특별한 index로 접근해야 접근이 가능하다. 왜 굳이 복잡하게 이렇게 되어있을까? 궁금했다.🔤 가변길이 인코딩우선 이것을 생각해보기 전에 문자의 용량에 대해서 알아보고자 한다. "Hello, 👋" 의 길이(용량)는 얼마일까? 아래처럼 프린트해 보면 11이 나온다. 엇 잠깐? 일단 "Hello, 👋" 의 길이는 8인데 왜 11이라는 숫자가 나온걸까?하나하나 출력해 보면 마지막 손바닥이 4이다. 여기서 숫자는 16진수 두 자리로 된 byte라고 볼 수 있다.하나의 String에 여러 용량을 가진 요소들이 저장되어 있구나를..
· → UIKit
♻️ 앱의 라이프 사이클Swift에서 가장 중요하게 다루는 내용 중 하나인 앱의 Life Cycle에 대해서 알아보자! Managing your app’s life cycle | Apple Developer DocumentationRespond to system notifications when your app is in the foreground or background, and handle other significant system-related events.developer.apple.com앱의 라이프 사이클을 표현하는데 가장 좋은 그림은 아래이지 않을까 싶다. 앱은 크게 Not Running, Foreground, Background로 나뉘게 된다. 내 눈앞에 있으면 Foreground, 내 눈..
· → Problems
🧐 문제🧙 문제풀이만만하게 봤지만(?) 생각할 거리가 꽤 있는 문제였다. 첫번째는 일단 무식하게 풀어보자였다. Array를 내 위치부터 잘라서 그 뒤로 해당 숫자보다 큰 숫자를 찾아서 반환해줬다. 하지만 당연하게도 시간초과가 났다. numbers의 길이가 최대 1,000,000이기 때문에 아래와 같은 풀이 방법은 결국 O(n^2)으로 시간초과가 나게 된다.func solution(_ numbers: [Int]) -> [Int] { var answer: [Int] = [] for i in numbers.indices { let first = numbers[i...].first { $0 > numbers[i] } ?? -1 answer.append(first) ..
💻 이전 글이전에는 HDD의 구조와 스케줄링을 알아보았는데, 이번에는 SSD를 살펴보려고 한다. [CS] HDD의 구조 및 스케줄링HDD, SSD, DRAM에 대해서 학습하고 기록하고자 포스팅을 작성하게 되었다. 첫 번째 글은 HDD이다!💻 컴퓨터 구조시작하기에 앞서 컴퓨터 구조를 간단하게 훑고 시작하려고 한다.위키피디아에 의하swift-library.tistory.com💾 ROM, RAMSSD는 플래시 메모리로 만든 저장장치인데, ROM과 RAM이라는 키워드가 많이 보여 이것부터 간단하게 살펴보기로 했다.메모리는 크게 휘발성, 비휘발성으로 나뉘는데 ROM은 비휘발성 메모리, RAM은 일반적으로 휘발성 메모리이다. Read-Only Memory의 약자인 ROM은 전원을 꺼도 데이터가 지워지지 않기 ..
Swift librarian
Swift Library