전체 글

iOS 개발

[iOS개발] Swift Concurrency async, throw 관련 테스트 정리

레거시 코드에서의 의문: 왜 VC에 비어있는 catch가 있었을까?기존 레거시 코드를 살펴보던 중, 한 가지 이상한 패턴을 발견했다.ViewController에서 거의 모든 API 호출이 아래와 같은 형태로 작성되어 있었다.Task { do { try await viewModel.someAPICall() // 이후 로직 } catch { // 비어 있음 }}catch 블록이 존재하긴 하지만, 아무 처리도 하지 않는 형태였다.이유를 물어보니 이런 설명을 들었다.“async 함수가 실패하더라도, 가끔 밑에 로직이 실행되는 이슈가 있어서안전하게 catch를 붙여둔 것이다.”설명은 들었지만, 솔직히 말해서 뭔가 석연치 않았다.async/await에서 실패하면..

iOS 개발

[iOS 개발] 프로젝트 구조 개선

회사에서 SwiftUI 마이그레이션과 동시에 VC, VM단 구조 리팩토링도 같이 진행을 했다.이전에 다뤘던 내용중 긁지 못했던 부분이 있다고 했는데, 바로 이 부분이었다.프로젝트 전체적으로 에러 처리, 로딩 처리, VC와 VM의 역할 분배가 좀 잘못 되어있다고 생각했었다.그때 당시의 생각으론 단순하게 로딩뷰 또한 뷰의 느낌이고, 얼럿창 또한 뷰의 느낌이라고 생각해서 VC에서 이를 관리하기로 했었다.그리고 VC, VM의 역할 분배의 경우 명확한 기준을 세우지 못하고 개발을 진행했던 것 같다. (그 때 당시에는 나름 그럴듯하게 세웠다고 생각했다)그러나 시간이 지나 코드가 쌓이게 되자 단점이 보이게 되었다. VC는 “화면을 보여주고, 사용자 입력을 받아서 VM에 전달하는 것” 의 역할만을 수행해야 하는데, 우..

iOS 개발/SwiftUI

[SwiftUI] SwiftUI 마이그레이션 느낀점

회사에서 남는 시간을 활용해 기존 UIKit으로 되어있는 코드들을 SwiftUI로 마이그레이션 하는 시간을 가지고 있다.현재는 비교적 간단한 하위 VC들(5~6화면)을 대상으로 마이그레이션을 완료했다. 처음에 마이그레이션을 시작할 당시에는 이걸 어디서부터 건들어야 되나 막막했던 것 같다. Coordinator, ViewController, Component 등 손 볼 것들이 한두가지가 아니었다.성격 상 일단 시작하고 보는 타입이어서 편의점 리스트를 불러와 화면에 보여주는 비교적 간단한 기능을 가진 화면을 대상으로 개발을 시작했다.하루 이틀이면 끝날 줄 알고 시작했지만 생각보다 수정할게 많았던 것 같다. 기존에 사용하던 얼럿뷰, 토스트 뷰, 컴포넌트 등을 하나도 사용할 수 없었던 게 컸던 것 같다. 사용하..

여행

[여행] 경주 여행

마지막 블로그 글을 쓴 지 9개월이 지났다..생존 신고를 하기 위해 여행을 간 김에 오랜만에 글을 쓰게 되었다. 절대 개발 재미없어서 안 쓰는 거 아님지난주 월요일에 갑자기 주말에 서울 말고 다른 곳을 가보고 싶어서, 가볼 만한 곳을 찾던 중 경주가 눈에 띄었다.오랜만에 첨성대도 잘 지내는지 볼 겸 바로 기차표랑 숙소만 대충 정하고, 혼자 경주로 출발했다.아직 20대니까 새벽 5시 반에 출발하는 기차 따위 우습다라는 생각을 했지만, 우스운 건 나였다.아침 8시에 도착했더니, 진짜 문 연 곳이 없어서 황리단길 구경 좀 하다가 바로 라멘이나 먹으러 갔다. 그리고 배 두드리면서 잠이나 자고 싶었지만, 꾹 참고 첨성대랑 동궁과 월지를 보러 갔다.근데 날씨가 너무 좋아서 꽤나 만족스럽게 돌아다녔던 것 같다..

iOS 개발

[iOS 개발] iOS 앱 용량 줄이기

이번에 회사에서 앱을 출시했는데, 이전 앱과 용량이 거의 2.5배 차이가 나게 되었다거의 비슷한 기능이고, 에셋이나 코드량도 별로 차이가 없는데 뭔가 이상해서 용량을 한번 살펴보고자 했다 앱 용량을 확인했더니(앱 용량 확인은 아래 첨부한 링크 방법 사용)폰트가 용량을 어마어마하게 차지하고 있었다..기존에, 국가별로 다른 폰트를 적용할 거란 내용이 있어서 미리 폰트를 넣어뒀는데, 이게 거의 70mb 이상을 차지하고 있었다.다행히 해당 기획이 취소되어 해당 폰트들이 필요가 없어서 삭제를 해서 용량을 줄일 수 있었다.근데 좀 의문이 든게 처음에는 .otf , .ttf 등 확장자 때문에 용량이 확 차이가 나는 건 줄 알았다.사진만 보더라도 Pretendard는 otf 타입이고 1.6MB 용량을 차지하는 반면,P..

iOS 개발/UIKit

[UIKit] FlexLayout & PinLayout 적용

회사에서 시간이 남아서 리팩토링 할 코드가 뭐가 있을지 고민하던 중 이전에 들어본 FlexLayout, PinLayout에 대해 궁금증이 생겨서 찾아보게 되었다.(현재 진행하고 있는 기존 프로젝트들은 Snapkit, Then을 활용해 레이아웃을 구성하고 있다.) FlexLayout과 PinLayout과 관련된 자료를 조사해보던 중 해당 라이브러리가 UIStackView 보다 8배에서 12배 더 빠르다는 장점이 있다는 것을 알게 되어 시간이 남는 김에 이를 적용해보고자 했다. 우선, 해당 코드는 자료 검색하고 한두시간 만에 만든 화면이라 이런식으로 레이아웃을 구성한 것이 맞는지는 모르겠다...// Snapkit을 활용한 기존 코드override func addViews() { super.add..

CS

[CS] iOS CS Lv.0단계 질문 및 답안 정리

컴퓨터 구조와 관련하여 CPU, RAM, 저장장치의 역할과 상호 작용에 대해 설명해주세요.캐시 메모리의 개념과 종류, 역할에 대해 설명해주세요.캐시 메모리 개념캐시 메모리는 CPU의 처리 속도와 주 기억 장치의 접근 속도 차이를 줄이기 위해 사용합니다. 데이터 지역성을 활용하여 메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고, 프로세서가 필요한 데이터를 캐시 메모리에서 먼저 찾도록 하면 시스템 성능을 향상할 수 있습니다. 캐시 메모리 종류CPU 캐시 메모리GPU 캐시 메모리SSD 캐시 메모리Digital Signal Processor 캐시 메모리TLB CPU 아키텍처의 종류(예: ARM, x86)와 특징에 대해 설명해주세요.x86Intel 기반 32bit CPU 입니다.현존 하는 PC 프로그램 대..

iOS 개발/UIKit

[UIKit]양쪽 cornerRadius가 다른 cell 구현

그림과 같이 분리선을 기준으로 왼쪽 사각형의 좌측 모서리는 cornerRadius 16, 오른쪽 모서리는 cornerRadius 8을 줘야 되는 디자인이 있었다. 특정 모서리에만 cornerRadius를 주는 것은 그리 어렵지 않아서 이것도 그냥 내장함수같은 게 있겠지? 했으나(내가 못 찾았을지도..) 그런 함수는 존재하지 않았다.. 그래서 일단 구글링을 통해 필요한 함수들을 UIBezierPath + Extension,  UIView+Extension에 각각 추가해줬다.extension UIView { func roundCorners(leftTop: CGFloat = 0, rightTop: CGFloat = 0, leftBottom: CGFloat = 0, rightBottom: CGFloat = ..

bamtorii
bamtori