문제 파악하기 Swift에서 배열의 요소에 접근할 경우를 생각해볼게요. let fooArray = [1,2,3] print(fooArray[0]) // 1 출력 위의 상황에서는 문제없이 결괏값이 출력돼요. 그럼 배열의 범위를 벗어날 경우는 어떻게 될까요? let fooArray = [1,2,3] print(fooArray[100]) // Index out of range 에러 발생 당연히 범위를 벗어나는 에러가 발생하죠. 여기서 문제는, 결괏값이 옵셔널이라 nil로 반환되는 것이 아니라 에러가 된다는 것이에요. 혹시 배열의 요소에 접근한 결과가 옵셔널인지 타입을 확인해볼게요. let fooArray = [1,2,3] print(type(of:fooArray[0])) // Int 출력 옵셔널의 Int가 아..
문제 상황 이해하기 API를 통해서 문자열을 호출할 때 HTML 태그와 함께 오는 경우들이 있어요. 예를 들면, Kakao API에서 카페 검색 정보를 호출할 때 결과물 중 제목과 콘텐츠에 HTML 태그들이 섞여와요. 아래는 Kakao 개발 가이드에서 보여주는 Response의 예시에요. HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 { "meta": { "is_end": false, "pageable_count": 983, "total_count": 218662 }, "documents": [ { "cafename": "쭉빵카페", "contents": "무대의상들 정보 궁금해하는 게녀들이 있길래 가져왔어! 이번에는 레드벨벳이랑 아이유 의상..
이전 글: Entity 및 모델 구현하기 관련 Git Pull Request: KakaoAPI와 통신할 네트워크 기능을 구현해요 [DaumCafeSearch 앱] Entity 및 모델 구현하기 이전 글: 앱 구조 설계하기 관련 Git Pull Request: https://github.com/helloworldjay/daumcafesearch/pull/7 [DaumCafeSearch 앱] 앱 구조 설계하기 이전 글: 프로젝트를 시작하며 구조 설계하기 앞선 글에서.. jayb-log.tistory.com NetworkManager 설계하기 Kakao API와 통신을 담당할 NetworkManager 객체를 구현해요. 현업에 가기 전까지는 URLSession으로만 기능 구현을 했었어요. DataTask를 통..
문제 상황 이해하기 카카오 API를 활용해서 JSON을 받아오고, iOS에서 decoding 하려고 하는데 문제가 발생했어요. 우선 아래는 Kakao API 개발 가이드에 나오는 내용이에요. datetime의 타입은 Datetime이고, 그 형식은 IOS 8601이에요. 그래서 아래와 같은 코드로 Decoder를 설정한 후 Decoding을 진행했어요. let decoder = JSONDecoder() decoder.dateDecodingStrategy = .iso8601 분명히 dateDecodingStrategy가 iso8601이기 때문에 문제가 없어 보였어요. ISO 8601은 일종의 규격이기 때문에 통일되어 있을 거라고 판단했어요. 그런데 원하는 결과물이 나오지 않았고, 어디에서 문제가 발생했는지..
이전 글: 앱 구조 설계하기 관련 Git Pull Request: https://github.com/helloworldjay/daumcafesearch/pull/7 [DaumCafeSearch 앱] 앱 구조 설계하기 이전 글: 프로젝트를 시작하며 구조 설계하기 앞선 글에서 언급한 것처럼, 프로젝트를 MVVM 구조로 설계를 진행했어요. MVVM은 무엇이 다른가? 설계에 앞서 구조에 대해 MVVM의 이론에 대해 학습을 jayb-log.tistory.com Model 정의하기 MVVM에서 모델의 개념을 이해할 때 Data Store의 역할로 생각했어요. "데이터에 관한 처리를 맡는 객체" 정도로 이해를 했는데, 실제로 프로젝트들을 살펴보니 Model이라는 디렉터리 하에 있는 것들은 대부분 DTO에 가까웠어요...
문제 풀이 과정의 고민 이 문제는 단순한 구현 문제가 아니라 Union Find의 개념을 이해해야 풀기 쉬웠어요. Union Find의 개념을 간단히 설명해볼게요. 키 포인트는 노드 간에 부모 - 자식 관계를 만드는 거예요. 즉, 같은 그룹인지 확인하는 방법을 같은 부모를 가지고 있는지 확인하는 것으로 대신하는 거죠. 쉽게 생각하면 같은 그룹에 속할 경우 그 요소들에 그룹 번호를 부여한다고 볼 수도 있는데, 그 그룹 번호가 새롭게 생성되는 것이 아닌 특정 요소를 부모로 해서 그 요소 자체를 그룹 번호로 설정하는 거예요. 예시를 통해 살펴볼게요. 아래와 같이 4개의 노드가 존재한다고 가정해요. 이 상태에서는 어떤 연결도 없기 때문에 각 노드의 부모는 자기 자신이 될 거예요. 노드 1 2 3 4 부모 1 2..
커스텀 UIColor 만들기 프로젝트를 진행하면서 default가 아닌 색을 반복적으로 사용할 일이 있었어요. 다음 카페 앱을 만드는데 다음 카페 색깔을 시스템 컬러처럼 등록해서 사용하고 싶었어요. 그 과정을 로깅해볼게요! :] 참고: iOS version - 15.0 적용한 예시 PR RGB 값 추출하기 우선 다음 카페로 들어가서 원하는 색깔이 있는 이미지를 찾았어요. 아래 그림에서 cafe의 글자 색을 가져오고 싶었어요. F12로 CSS를 봐야 하나 했는데 맥에는 훨씬 간편한 툴이 이미 있었어요! 디지털 컬러 측정기라는 맥 기본 앱이에요. 앱을 틀어서 원하는 곳에 커서를 대면 그 RGB 값이 추출돼요. 이제 필요한 RGB 값은 알게 되었어요! Color Asset 만들기 우선 프로젝트의 Assets...
이전 글: 프로젝트를 시작하며 구조 설계하기 앞선 글에서 언급한 것처럼, 프로젝트를 MVVM 구조로 설계를 진행했어요. MVVM은 무엇이 다른가? 설계에 앞서 구조에 대해 MVVM의 이론에 대해 학습을 진행했어요(이 글에서는 VIP나 MVVM에 대해 자세히 다루지는 않고 느낀 점을 위주로 작성할 계획이에요. 추후 MVVM에 대해 글을 작성하려고 해요). MVVM에 관한 글들을 읽어보고, 기존에 제가 알던 VIP(Clean Swift)와 비교하며 이해를 하려고 했어요. 결국 차이는 "어떤 객체에게 어떤 권한과 책임을 부여하는가"에서 발생한다고 생각하고, MVC나 VIP와 크게 다르지 않다고 판단했어요. 다만, 읽어보는 글마다 조금씩 설명된 MVVM의 구조가 달랐기 때문에 이해하기가 어려웠어요. 용어 또한 ..
- Total
- Today
- Yesterday
- API#lazy#
- 병든 나이트#BOJ#탐욕법#Python
- 파이썬알고리즘인터뷰#4장
- Brackets#Stacks and Queues#Codility#Python
- 종이자르기#분할정복#BOJ#Python
- 공유기 설치#BOJ#이분탐색#Python
- NumberofDiscIntersections#Codility#Sort#Python
- 랜선자르기#이분탐색#BOJ#Python
- django#slicing
- 암호코드#dp#BOJ#Python
- 터틀비치#리콘#xbox#controller
- 배열합치기#분할정복#BOJ#Python
- Swift#Tuples#Range
- 쿼드트리#BOJ#분할정복#Python
- 리모컨#완전탐색#BOJ#Python
- 섬의개수#백준알고리즘#Python
- 백준 알고리즘#BackTracking
- 날짜 계산#BOJ#완전탐색#Python
- 토마토#백준알고리즘#Python
- 순열사이클#BOJ#Python
- 나무자르기#BOJ#이분탐색#Python
- PassingCars#Codility#Python
- Distinct#Codility#Python
- filter#isalnum#lower
- 텀 프로젝트#백준알고리즘#Python
- 반복수열#백준알고리즘#Python
- Triangle#Sorting#Codility#Python
- 미로 탐색#백준알고리즘#Python
- django
- N으로 표현#DP#Programmers#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 |