오늘은 기술블로그 말고 취업준비를 하면서 느끼는점과 우연히 시작하게된 프리온보딩 코스에 대해 얘기를 해보려고 합니다. 개인앱을 만들고 배포를 한지 이제 두 달이 다되어 가는데, 배포에 포커스를 두고 어떻게든 배포해보자는 생각에 만들게 된 BestEats라는 개인 맛집 기록 앱. 물론 앱 배포를 한 점에 대해서 좋게 봐주는 기업들도 있었지만 기능적으로 부족하다는 피드백을 많이 받았고, 면접은 가보지도 못하고 서류탈락하는 기업들이 꽤 많았습니다. 현재 앱에 부족한점을 몇 가지 나열해 보자면, 네트워크 통신, 미완성으로 보이는 페이지 등 아직 많은 경험을 해보지 못한점이 몇가지 있었던것 같습니다. 그리고 대부분의 기업들에서 사용하는 기술스택들 (RxSwift, MVVM, Combine, SwiftUI, TDD..

Extension을 이용해 클래스, 구조체, 열거형 혹은 프로토콜 타입에 기능을 추가할 수 있습니다. 원본 코드를 몰라도 해당 타입에 대한 기능을 확장할 수 있습니다. 특징 계산된 인스턴스 프로퍼티와 계산된 타입 프로퍼티의 추가 인스턴스 메소드와 타입 메소드의 추가 새로운 이니셜라이저 제공 서브스크립트 정의 중첩 타입의 선언과 사용 특정 프로토콜을 따르는 타입 만들기 NOTE Extension은 타입에 새 기능을 추가할 수 있지만 재정의 (Override) 는 할 수 없습니다. Extension 문법 (Extension Syntax) extension 키워드를 사용해 선언합니다. extension SomeType { // new functionality to add to SomeType goes here..

열거형 (Enum)은 특정 구조체나 클래스의 기능을 처리하기 위해 자주 사용됩니다. 특정 문맥에서 좀 더 복잡한 타입을 위해 사용할 수 있는 유틸리티 클래스나 구조체를 정의할 수 있는데, 이를 위해 Swift에서는 중첩 타입을 지원합니다. 핵심 열거형, 클래스, 구조체를 해당 타입 안에서 다시 정의할 수 있습니다. 중첩 타입의 사용 (Nested Types in Action) 아래는 블랙잭 게임에서 사용되는 카드를 BlackjackCard 구조체를 정의한 예시 입니다. BlackjackCard 구조체는 Suit와 Rank 라는 두개의 중첩 열거 타입을 포함합니다. 블랙잭에서 Ace 카드는 1 또는 11 입니다. 이 기능은 Rank 열거형 중첩타입인 Values라는 구조체로 표시됩니다. // 구조체 Bla..

강의를 듣다가 문득 CollectionView나 TableView의 cell을 나타낼때, indexPath.row / indexPath.item 나눠 사용하는 코드를 봤는데 무슨 차이일까 궁금해서 공부를 해봤습니다. 가시죱 거기에 대한 답변이 잘나와있는 부분을 가져왔어요. 밑줄친 내용을 보면 가독성을 위해 나누어 놨다고 이해하면 되겠네요. 스타일상 UICollectionView에서는 item을, UITableView에서는 row를 사용하는게 더 깔끔한 방식이긴 합니다. (암묵적인 약속..) 하지만 tableview에서 item을 사용해도, collectionview에서 row를 사용해도 아무 문제 없습니다. 참고 1. https://developer.apple.com/forums/thread/123050..

오늘은 ARC에 대해 공부해보려고 합니다! Swift 에서 메모리가 어떻게 관리 되는지, 그동안 참조, Heap은 뭔지 대충만 알고 넘어갔는데 좀더 깊이 파보려고 해요! ARC란? Automatic Reference Counting 의 약자로, 자동으로 메모리를 관리 해줍니다. 객체에 대한 참조 하게 되면 카운트가 +1 되게 하고 0이되면 자동으로 메모리 해제를 시켜줍니다. Compile time에 실행 됩니다. Objective-C (라떼는...) MRC (Manual Reference Counting)를 사용하여 수동으로 메모리를 해제 시켜줬다고 해요. 아래 사진은 MRC와 ARC의 차이점을 나타내요. MRC의 경우 retain / release를 사용하면서 일일히 참조 카운트를 조정해주는게 보..

오늘은 이미지 캐시에 대해 공부해 보려고 합니다. 보통 이미지의 경우 크기가 작지 않기 때문에 불러오는데 시간이 걸리게 됩니다. 컬렉션뷰, 테이블뷰 에서 스크롤을 하게되면 데이터를 다시 불러오게되어 사진의 경우 아래처럼 뒤늦게 바뀌는걸 볼 수 있습니다. 기존에 있던 날씨 이미지 → 새로 받아오는 이미지로 뒤늦게 바뀌는게 보이시나요? 문제를 해결하기 위해선 캐시처리에 대해 알아야 하는데요. 과제때는 급하게 처리하느라 코드 복붙이었는데 개념부터 차근차근 알아봅시다 🙌 캐시 - Cache 기기 안의 임시저장소를 뜻합니다. 임시 저장소를 통해 이미지를 저장해 뒀다가 보여질때가 되면 저장했던 이미지를 그대로 가져와 뿌려줍니다. Cache의 종류 Memory cache (휘발성) 기기를 끄면 저장된 데이터가 사라집..

오늘은 Remote Notification을 구현하면서 알게된 APNs에 대해 정리해 보려고 합니다. APNs ? Apple Push Notification service의 약자로, APN이라고도 부릅니다. 원격알림을 사용할 때 반드시 APNs를 거쳐야하며, 푸시 서버와 기기 사이의 중개자 역할을 합니다. 아래와 같이 말이죠. 아니 그냥 서버에서 알림 보내면 되지않나 왜 한단계 거쳐서 가는거지? 라고 생각을 했었는데 이유는 아래와 같습니다. APNs 의 역할 1. 알림 전달 (기기 전원 Off) 서버(Provider)에서 보낸 알림을 APNs에서 보관 → (기기 전원 On) APNs에서 보관하고 있던 알림을 기기로 전달. (기기 전원 Off) APNs에 알림이 많이 쌓여있는 상태 → (기기 전원 On) ..

타입 캐스팅은 인스턴스의 타입을 확인 하거나, 인스턴스를 같은 계층에 있는 다른 상위클래스나 하위클래스로 취급하는 방법입니다. 타입캐스팅에는 is 와 as 두 연산자를 사용하고, 타입 캐스팅을 사용하면 프로토콜을 따르는지도 확인할 수 있습니다. 타입캐스팅을 위한 클래스 계층구조 선언 (Defining a Class Hierarchy for Type Casting) 아래는 타입캐스팅 확인을 위해 만든 클래스 입니다. class MediaItem { var name: String init(name: String) { self.name = name } } 다음은 두 클래스 들은 MediaItem의 하위클래스 입니다. class Movie: MediaItem { var director: String init..

동시성 (Concurrency) Swift는 구조화된 방식으로 비동기 및 병렬 코드 작성을 지원합니다. 비동기 코드(asynchronous code) 는 일시정지되거나 재개 될 수 있지만, 한 번에 프로그램의 한 부분만 실행됩니다. 병렬 코드(parallel code) 는 여러 코드조각들을 동시에 실행하는것을 말합니다. 예를들어, 4개의 코어 프로세서를 가진 컴퓨터가 각 코어마다 하나의 task(코드)를 맡아, 동시에 4개의 코드조각을 실행 할 수 있습니다. 병렬 및 비동기 코드를 사용하는 프로그램은 한번에 여러 연산을 실시하며, 외부의 시스템을 기다리는 연산은 잠시 멈추고 메모리 안전한(memory-safe) 방식으로 작성하기 쉽게 만듭니다. 추가적인 스케줄링 유연함에서 병렬 또는 비동기식 코드에는 복..

컴퓨터 프로그래밍에서 복사 동작을 할 때, 수정이 일어날 경우 복사하는 작업을 합니다. Swift에선 Collection Type을 복사해서 사용할 때 일어납니다. var arr1 = [1,2,3] var arr2 = arr1 // 값 수정전까진 메모리주소가 같습니다. // arr1 메모리주소 0x600003e12de0 // arr2 메모리주소 0x600003e12de0 이때까진 arr1을 참조하고 있는 arr2의 메모리주소 값은 서로 같습니다. 하지만 아래와 같이 arr2를 수정한다면, arr2.append(4) // 값 수정 // arr1 메모리주소 0x600003e12de0 // arr2 메모리주소 0x600000808430
- Total
- Today
- Yesterday
- Class
- Swift inout
- ios
- swift programmers
- Swift 프로퍼티
- Swift
- swift 고차함수
- Swift joined()
- RTCCameraVideoCapturer
- Swift Error Handling
- CS 네트워크
- Swift 알고리즘
- swift protocol
- Swift Leetcode
- swift (programmers)
- Swift ModernRIBs
- removeLast()
- Swift RIBs
- swift reduce
- Swift final
- Combine: Asynchronous Programming with Swift
- Swift init
- RIBs tutorial
- iOS error
- 원티드 프리온보딩
- Swift 내림차순
- Swift 프로그래머스
- Swift joined
- swift property
- 2023년 회고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |