[iOS] UIProgressView에 숨겨진 애플의 디테일 - progress의 최소 width
·
iOS/개념 & 개발
UIProgressViewUIProgressView는 0~1 사이의 수치로 progress를 표현할때 사용하는 UIView입니다.개발자는 정확한 progress를 쉽게 표현하기 위해 UIProgressView를 사용할텐데요.UIProgressView에는 숨겨진 함정이 있습니다.바로 progress를 표현하는 최소 width가 정해져있다는 것입니다. progress 수치에 따른 width 비교0.5예를 들어, width가 100인 UIProgressView의 progress를 0.5로 설정하면 progress width는 50이 됩니다.progressView.progressTintColor = .cyanprogressView.frame = CGRect(x: 180, y: 300, width: 100, he..
[iOS/꾸준 회고] Swift Testing 및 테스트 작성에서 느낀 점
·
iOS/개념 & 개발
서론최근 테스트와 관련된 포스팅을 작성했습니다.테스트 코드 필요성과 테스트 쉬운 구조테스트 코드 작성과 구조 개선역할 분리와 객체 지향과 코드 개선그리고 작업을 진행하면서 꾸준히 테스트 코드를 작성하고 있어요.Swift Testing의 좋았던 점과 테스트 코드를 작성하면서 느낀 점을 공유해보고 싶어서 또 포스팅을 쓰러 왔어요 ㅎㅎ테스트 코드를 왜 작성하기로 결심했는지 등은 이전 포스팅을 참고해 주세요. Swift Testing제가 담당하는 앱은 글로벌 서비스라 최근에 최소지원버전을 iOS 15로 올렸을 만큼 최신화된 프로젝트는 아니에요.Swift Testing 처음 발표를 들었을 때는 "이번에도 나는 못 쓰지 않을까?" 생각이 있었어요.다행히 Swift Testing은 그런 걱정과 달리 편하게 사용할 ..
[iOS/꾸준 회고] 테스트 코드 필요성과 테스트 쉬운 구조
·
iOS/개념 & 개발
서론최근 테스트 코드와 관련된 많은 깨달음을 얻었습니다.테스트 코드의 필요성과 테스트하기 좋은 구조란 무엇인지, 그리고 왜 MVC 패턴에서 테스트가 어려운지를 체감할 수 있었습니다. 테스트 코드 없이 앱 리뉴얼 하기최근 사내 앱의 UI 리뉴얼을 진행했습니다.기존 기능은 그대로 유지하면서 UI만 새롭게 구현하는 작업이었습니다. 이 과정에서 기존 동작 검증에 어려움을 느꼈습니다.기존 동작이 제대로 유지되는지 확인하기 위해서는 기존 앱과 리뉴얼된 앱을 일일이 실행하며 비교해야 했습니다.테스트 코드가 있었다면 딸깍 한 번으로 검증이 가능했을 텐데... 많이 아쉬웠습니다. 작업 시간뿐만 아니라 심리적인 부담도 상당했습니다."테스트 코드 없는 리팩토링은 도박과 같다"는 말이 있듯이 코드를 수정할 때마다 "이 수정이..
[Swift] SwiftUI로 느낀 Swift 기본기의 중요성
·
Swift/개념 & 응용
서론SwiftUI를 학습하면서 Swift 기본기의 중요성을 크게 느꼈습니다.SwiftUI는 구현이 매우 편리하지만, 학습 과정은 그만큼 쉽지 않다고 생각합니다.이번 포스팅에서는 View 프로토콜을 Swift 기반으로 단계적으로 이해해 나갔던 제 학습 과정을 공유하고자 합니다. 1단계: View 프로토콜 정의가장 먼저 공식문서가 말하는 View 프로토콜을 봅시다.@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)public protocol View { associatedtype Body : View @ViewBuilder var body: Self.Body { get }}View 프로토콜은 body computed 프로퍼티를 가지는 타입입니다..
[iOS/꾸준 회고] 클린 아키텍처의 원... 그리고 의도를 보는 시야
·
iOS/개념 & 개발
클린 아키텍처 원 그림과 사용자 관점의 불일치최근 흥미로운 대화를 나눴습니다."iOS 개발할 때 클린 아키텍처의 원과 사용자 관점이 잘 안 맞는 것 같지 않나요?" 소프트웨어 개발자라면 한 번쯤은 접해봤을 클린 아키텍처의 유명한 원형 다이어그램에 대한 이야기입니다.이 다이어그램에서는 네트워크 계층이 가장 바깥쪽에 위치하고, Presenter, Use Case, Domain 등이 안쪽에 배치되어 있습니다.하지만 실제 사용자 시나리오를 보면, 화면이 먼저 나타난 후 사용자 이벤트에 따라 네트워킹이 발생하는 것이 일반적입니다.즉, 사용자 관점에서는 네트워크보다 Presenter나 UseCase를 먼저 경험하게 되는 것이죠. 물론 이 다이어그램이 잘못되었다고 할 순 없습니다.이렇게 널리 알려진 데에는 분명한 이..
[Swift] flatMap이 deprecated가 된 이유 / compactMap의 등장
·
Swift/개념 & 응용
서론Swift 4.1에서 flatMap이 deprecated되고 compactMap으로 역할이 분리되었습니다.저는 한 가지 착각하고 있었습니다. "flatMap이 아예 사라지고 compactMap이 새로 생겼구나"라고 오해했는데요, flatMap은 여러 형태가 존재했고, flatMap 중 하나가 compactMap이 된거였습니다.이번 포스팅은 pointfree의 https://www.pointfree.co/episodes/ep10-a-tale-of-two-flat-maps 영상과 스크립트를 정리한 포스팅입니다. flatMap이 어떤 형태를 제공했었고, 어떤 메서드가 compactMap이 된 것인지 알아보겠습니다. flatMap의 세 가지 형태flatMap은 총 세 가지 형태로 제공됩니다.extension..
[iOS/꾸준 회고] UseCase 배워두길 잘했다
·
iOS/개념 & 개발
서론제 프로젝트에서는 대부분의 UseCase가 Repository와 ViewModel을 단순히 연결해 주는 역할만 하고 있었습니다. 예를 들면 다음과 같은 코드였죠.struct FetchBooksUseCase { func execute() async -> Something { await repository.fetchBooks() }}이런 구조 때문에 저는 종종 "과연 이 상황에 UseCase가 정말 필요할까?" 하는 의문을 가졌습니다. 하지만 최근 UseCase를 정의한 것이 매우 적절했다고 느낀 경험이 있었습니다.물론 이것이 엄청난 발견이나 깨달음은 아니었습니다. 다만, 인터넷에서 자주 언급되는 "UseCase를 사용해야 하는 이유"를 직접 체감하고 경험했다는 점에서 작은 감동을..
[Swift] DTO 매크로(Macros)로 CodingKeys 반복 패턴 제거하기
·
Swift/개념 & 응용
Swift Macros 사용 이유이전 포스팅(https://jeong9216.tistory.com/727)에서 Swift macros에 대해 소개했습니다.Swift macros는 코드 작성 시 발생하는 반복적인 패턴을 효과적으로 제거하는 데 큰 도움이 됩니다.여기서 주목할 점은 단순한 코드의 반복이 아닌, 코드만으로는 해결하기 어려운 '패턴의 반복'을 제거할 수 있다는 것입니다. 이는 Swift macros의 강력한 특징 중 하나입니다. 구체적인 예로, DTO(Data Transfer Object)에서 CodingKeys를 작성하는 패턴을 들 수 있습니다. 이러한 패턴은 일반적인 방법으로는 코드 레벨에서 반복을 제거하기 어렵습니다. 그러나 Swift macros를 활용하면 이러한 반복적인 패턴을 효과적으..
[Swift] WWDC23 - Expand on Swift macros
·
WWDC/Swift
매크로 지원의 필요성Swift는 보일러 플레이트 코드를 줄이기 위한 다양한 기능을 제공하지만, 이러한 기능들로도 해결되지 않는 경우가 발생할 수 있습니다.이때, 개발자가 Swift 컴파일러를 수정하는 방법도 있습니다. Swift가 오픈 소스로 제공되기 때문에 컴파일러 수정이 가능하긴 하지만, 이 방법은 복잡하고 유지보수가 어렵습니다.매크로를 활용하면 컴파일러를 수정할 필요 없이 패키지에 포함된 형태로 보일러플레이트를 제거할 수 있습니다.이는 개발자들이 원하는 기능을 쉽게 구현할 수 있도록 도와줍니다. 매크로는 명확해야 한다Swift 컴파일러는 #과 @ 기호를 매크로로 인식하여 확장성을 추가합니다.매크로는 두 가지 유형이 있습니다.독립형 매크로: 항상 # 기호로 시작합니다.첨부 매크로: 코드 선언부에 작성..
[iOS] Unit Test를 GitHub Actions로 자동화하며 겪은 에러 해결 과정
·
iOS/개념 & 개발
Unit Test 자동화GitHub Actions를 활용하면 Xcode에서 작성한 Unit Test를 자동으로 체크할 수 있습니다.PR을 생성할 때, push를 할 때 등의 액션이 발생하면 Unit Test를 수행하는 방식입니다.Test 편의성과 안정성을 동시에 챙길 수 있으므로 꼭 필요한 과정입니다.  GitHub Actions로 자동화하며 겪은 에러저는 GitHub 안에서 개인 프로젝트 사이클을 돌리고 싶었기 때문에 GitHub Actions를 선택하였는데요.쉽게 가능할 줄 알았지만, 많은 에러를 겪었습니다. 고군분투의 흔적 ;;결과론적인 이야기지만, 앞에서부터 차근차근 살펴봤다면 쉽게 해결했을 텐데... 반성합니다 🥲성공한 Workflow는 최하단에 있으니 최종 결과만 필요하시면 쭉 내리시면 됩니..
유정주
'SWIFT' 태그의 글 목록