개요 프로젝트로 위젯을 맡게 되어 처음으로 위젯을 만들어보려고 해요. 코드를 경험하기 전, 전체적인 이해를 위해 WWDC20 # 10028 - Meet WidgetKit을 듣고 정리해보려고 해요 :) 코드에 대한 설명이라기보다 이번 세션은 위젯의 개념을 설명하는 것이 포인트였다고 생각해요. 더 자세한 설명은 추가 다른 세션을 통해 이해하고, 예시를 만들면서 구체화해볼게요 :) Widget을 간단하게 이해하기 Widgets are not mini-apps Widget은 미니 앱이 아니에요. 위젯을 이해할 때 작은 버튼들로 채워진 미니앱으로 인식하는 것이 아니라, 콘텐츠를 홈스크린에 뿌려주는 도구로 이해해야 해요. Smart Stacks Smart Stack이란 widget 묶음이 자동으로 전환되어 적합한 ..
개요 MVVM을 학습하며 GitHub에서 여러 Repository를 참고했어요. 그 과정에서, 같은 MVVM이지만 개발자의 설계에 따라 구현 구조가 크게 다른 것을 확인했어요. MVVM은 정의하기에 따라 다양한 형태를 가질 수 있기 때문에 이런 문제를 해결하기 위해 여러 회사들에서 ReactorKit을 활용한다고 들었어요. 저 역시 두 가지 프로젝트를 MVVM으로 설계하며 위의 문제를 경험했었기 때문에 ReactorKit 공식 GitHub의 README를 해석하며 전체적인 구조를 이해해보려고 해요 :) 글이 길어져서 우선 이 글에서는 기본적인 내용만 다루고, Advanced 이후 내용은 다른 글에서 추가해볼게요! Basic Concept (기본 콘셉트) ReactorKit은 Flux와 Reactive P..
개요 Swift ARC(Auto Reference Counting)를 보다 잘 이해하기 위해 WWDC21 - ARC in Swift: Basics and beyond를 본 후 글을 정리해 보았어요! Swift는 메모리 관리를 ARC를 통해서 진행하는데요, ARC의 기초 동작 원리부터 이야기해보도록 할게요 :) Object lifetimes and ARC(객체의 수명(?)과 ARC) 객체의 생명 주기는 위와 같아요. 물론 여기서 말하는 객체는 ARC에 의해 관리되는 참조 타입의 객체겠죠? 순서대로 보면(동작 순서는 아니에요!) 1. 객체의 init() 시점에 생명주기가 시작되고 그 객체의 사용이 끝나는 시점에 생명주기가 종료됨 2. ARC가 생명주기가 끝난 객체를 deallocate(할당 해제)함 3. A..
개요 최근 RxSwift를 하며 비동기에 대한 이런저런 고민을 하다 보니, 최근 진행되었던 WWDC 21의 비동기 관련 세션이 궁금해졌어요 :) 이번 글에서는 영상에서 나온 내용을 정리해볼게요! 해당 세션의 주소는 아래와 같아요 ☺️ WWDC 21 - Meet async/await in Swift 보러 가기 우선 공식 페이지에서 설명하는 세션에 대한 정보를 먼저 읽어볼게요. Swift가 이제 비동기 메서드를 지원하며, 코드를 더 간결하게 사용할 수 있다는 의미예요. 자세한 것은 영상을 보며 살펴볼게요! 동기 / 비동기 세션은 간단하게 동기와 비동기의 차이에 대해 언급하며 시작돼요. preparingThumbnail(of:) 메서드가 완료된 후 fetchThumbnail 메서드가 실행된다고 할 때, 동기적..
관련 PR: [#40] 소켓 통신을 통해 받은 데이터로 거래소 화면 CoinListView를 실시간 업데이트해요 개요 현재 Public API를 호출해서 불러온 데이터를 Table로 보여주는 작업은 완료가 되었어요! 이제 Web Socket을 통해 업데이트될 정보를 받아오고, 이 변경할 정보를 Cell에 반영해주면 돼요 :) Web Socket 통신을 위한 기반 작업은 아래 PR에서 완료했어요. [#33] WebSocket 통신을 위한 기반 작업을 해요 소켓 통신을 통해 받아올 데이터 Entity를 만들고, 소켓 통신을 수행할 소켓 매니저를 구현했어요! 업데이트될 정보 관리하기 첫 번째, 소켓 매니저가 실행되는 시점을 정하고 데이터가 각각 어떤 객체를 통해 전달되는지 설계를 할 필요가 있어요. 당연히 업..
개요 검색어를 통해 코인 정보를 검색할 경우 테이블을 통해 Cell을 보여줘요. 여기서 Cell을 누를 경우 호가 화면으로 넘어가게 구현하려고 해요. 화면을 구체적으로 구현하기 전에 Cell을 클릭하면 넘어갈 화면의 ViewController를 생성하고, 넘어가는 로직을 구현하려고 해요. 설계하기 UIKit으로만 작업한다면 당연히 Delegate을 사용해서 이러한 기능들을 구현하겠지만 현재 프로젝트는 Rx를 사용하는 것을 목표로 하고 있기 때문에 event의 방출을 통해 구현해보려고 해요. 우선 첫 화면인 ExchangeViewController가 로직을 갖는 것이 아니라 ExchangeViewController는 CoinListView를 소유하고 CoinListView에서 Table을 구현하는 구조로 ..
안녕하세요! 이번 글의 주제는 Coordinator Pattern이에요! 사실 iOS 관련 주제라고 할 수는 없지만.. 카테고리 선정이 애매해서 iOS에 포함시켰어요 :) 그래서 패턴 자체는 범용적으로 사용할 수 있지만 iOS 상황에서의 Coordinator Pattern에 대해 설명해보려고 해요 ☺️ 왜 사용하는가? 앱 개발 상황을 가정해볼게요. 화면 전환은 매우 자주 일어나는 일인데 일반적으로 각 화면은 독립적인 ViewController를 가지고 있고 ViewController에서 다른 ViewController로 전환될 필요가 있어요. 이때 가장 단순한 방법은 하나의 ViewController의 인스턴스를 직접 생성해주며 화면을 전환시키는 거예요. 예시를 볼게요! // in MainViewCont..
관련 PR 보러 가기 - [#19] SearchBar에 검색어를 입력해 검색 결과를 출력해주는 기능을 구현해요 회고 SearchBar에서 검색어를 입력하여 코인을 검색하고, 그 검색 결과를 테이블로 보여주는 기능을 구현했어요. 구현 중에 제공되는 API의 모양이 상황에 따라 통일되어있지 않고 상당히 특이하게 되어 있다는 것을 발견해서 PR이 당초 계획보다 비대해졌어요. 그래서 디테일한 요소들은 TBD로 마킹하고 큰 흐름을 구현하는 것에 포인트를 맞췄어요. 작업하면서 생긴 고민들을 작성해볼게요! API에서 내려받는 데이터에서 발생한 문제 현재 알고 싶은 정보는 API를 통해 검색한 코인 별 정보예요. 우선 호출 URL을 살펴볼게요. https://api.bithumb.com/public/ticker/{or..
- Total
- Today
- Yesterday
- Swift#Tuples#Range
- 공유기 설치#BOJ#이분탐색#Python
- Brackets#Stacks and Queues#Codility#Python
- 미로 탐색#백준알고리즘#Python
- 백준 알고리즘#BackTracking
- 날짜 계산#BOJ#완전탐색#Python
- 병든 나이트#BOJ#탐욕법#Python
- django
- filter#isalnum#lower
- 랜선자르기#이분탐색#BOJ#Python
- 배열합치기#분할정복#BOJ#Python
- N으로 표현#DP#Programmers#Python
- 파이썬알고리즘인터뷰#4장
- 반복수열#백준알고리즘#Python
- 암호코드#dp#BOJ#Python
- 텀 프로젝트#백준알고리즘#Python
- PassingCars#Codility#Python
- 종이자르기#분할정복#BOJ#Python
- 순열사이클#BOJ#Python
- 쿼드트리#BOJ#분할정복#Python
- 터틀비치#리콘#xbox#controller
- django#slicing
- API#lazy#
- NumberofDiscIntersections#Codility#Sort#Python
- Distinct#Codility#Python
- 리모컨#완전탐색#BOJ#Python
- 토마토#백준알고리즘#Python
- Triangle#Sorting#Codility#Python
- 섬의개수#백준알고리즘#Python
- 나무자르기#BOJ#이분탐색#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |