| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- tuist
- GoF 디자인 패턴
- publisher
- Swift 디자인 패턴
- 일상시
- rxswift
- 디자인 패턴
- uikit
- gof디자인 패턴
- SwiftUI
- 클린아키텍쳐
- UIViewRepresentable
- GCD
- Apple
- GoF
- combine
- Swift Concurrency
- bounds
- swift weekly
- frame
- Xcode
- 클린아키텍처
- Actor
- UIViewController
- nhn 면접
- IOS
- 모바일 아키텍처
- objective-c
- swift
- 모바일
- Today
- Total
목록전체 글 (86)
주니오스의 iOS
최근 회사에서 바닐라 SwiftUI MVVM + Concurrency 기반으로 UI 및 비즈니스 로직을 구현하면서 느낀 점을 정리합니다.회사에서 사용 중인 MVVM 아키텍처는 매우 단순합니다. ViewModel이 상태를 보유하고, 뷰는 해당 상태를 조회합니다. 그리고 유저 액션은 ViewModel의 함수 호출로 전달됩니다.@Observationclass ViewModel { var state: State = .init() func onAppear() { Task { await api requests ... state = "done" } }}struct MyView: View { Text(state) .onAppear { viewModel.onAppe..
안녕하세요이번 글은 최근 진행했던 SwiftUI 베이스 프로젝트에 UIKit 요소를 성공적으로 도입한 사례를 소개하기 위해 작성합니다.아래 GIF는 제가 구현한 캘린더 UI입니다. 처음에 해당 뷰를 구현할 때 ScrollView, LazyVStack을 사용하여 충분히 구현이 가능할 것이라고 생각했습니다.최소 지원 버전이 iOS 16 이상이기에 ScrollViewProxy 등을 활용하면, 원하는 부분으로 스크롤하는 동작도 쉽게 제어할 수 있을 것이라고 판단했습니다. SwiftUI로 구현할 수 없었던 점우선 해당 캘린더 UI는 수직 무한 스크롤을 요구합니다.무한 스크롤은 다음과 같은 과정으로 진행됩니다.유저가 위 혹은 아래 스크롤의 종료 지점에 인접한 영역까지 스크롤합니다.추가 데이터를 불러와 상태에 반영..
프로젝트를 진행할 때, 다수의 개발자들이 병렬적으로 작업을 수행하고 작업결과를 병합합니다. 병합과정에서 우리는 전통적으로 코드 리뷰 과정을 거치게됩니다. 여기서 코드리뷰는 2가지 의의를 지닙니다.작업내용을 팀과 공유하고, 잘못된 작업물을 검토를 통해 바로잡을 수 있습니다. 분명 필요한 과정이지만 다른 사람의 코드를 검토하는데 소비되는 비용은 무시할 수 없습니다.뿐만 아니라 검토를 기다리는 시간 역시 파생 비용입니다.AI 리뷰 도입앞서 언급한 두가지 비용을 줄일 수 있는 방법으로 AI 코드리뷰를 도입하면 좋겠다고 판단했습니다.단순히 개발 내역에 대해 리뷰 진행을 에이전트에게 부탁하기 보다,AI에 익숙치 않은 팀원도 잘 활용하기를 바라며 아래 조건을 만족시키는 것이 좋다고 판단했습니다.기존 코드 리뷰 시스템..
UIKit을 사용해본 경험이 있으시다면 frame과 bounds는 굉장히 익숙한 개념입니다.하지만 frame 기반 레이아웃 방식을 사용하지 않는다면, 정확히 파악할 필요성을 느끼기 어렵습니다. 복잡한 레이아웃을 직접 구현하는 경우 오토레이아웃만 가지고는 분명 한계가 있습니다.이번 포스팅에서는 frame과 bounds에 대해 정확히 이해하는 시간을 가져보려고 합니다. frame공식 문서의 정의는 다음과 같습니다.frame은 상위 뷰 좌표계 위에 존재하는 크기와 위치를 서술하는 직사각형입니다. UIView는 계층을 이루며, frame은 상위 뷰의 기준에서 자식뷰의 위치 및 크기입니다.여기까지만 이해해도 개발을 진행하는데 큰 무리는 없다고 생각됩니다.하지만, CGAffineTransform과 같은 변형 객체를..
안녕하세요.주니오스입니다. 이번 글은 아코디언 UI를 구현할 것입니다.제가 경험한 시행착오도 함께 정리했습니다. 아코디언 UI란?아코디언 UI는 자주 접할 수 있는 UI입니다.버튼을 누르면, 상세 정보가 아래에 표시되는 방식입니다. 오류를 겪은 구현(HeightAnchor 제어)버튼을 누르면 내부 콘텐츠가 버튼 아래로 슬라이드 형식으로 나타나길 원했습니다.콘텐츠 뷰의 HeightAnchor의 크기를 늘리는 방법으로 구현을 진행했습니다.프리뷰상으로 문제없이 동작함을 확인했습니다.그 후 UIScrollView에 삽입했습니다. 애니메이션 오류 발생 😓하지만 의도치 않은 애니메이션 오류가 발생했습니다. 문제 해결문제는 layoutIfNeeded함수를 호출하는 뷰였습니다.위 문제상황에서는 해당 함수를 아코디언 ..
안녕하세요. 개요 및 문제상황 설명 UI 개발을 하며 상태관리를 하다 보면 내부 상태변화와 외부 상태변화를 관리해야 하는 상황이 발생합니다. 내부상태변화, 외부상태변화? 단어가 조금 낯선 감이 없지 않아 있는 것 같습니다. 왜냐하면 제가 만들어낸 말이거든요. UITextField를 예로 들어 보겠습니다.텍스트 필드의 경우 유저가 직접 키보드를 입력하여 화면에 노출되는 텍스트에 변화를 줄 수 있습니다.혹은 text 프로퍼티를 직접 조작하여 상태를 변경시켜 줄 수도 있습니다. 여기서 유저 입력을 통해 뷰 자체적으로 즉 내부적으로 상태를 변화시키는 것을 내부상태변화라고 말하겠습니다.text 프로퍼티에 직접 값을 대입하는 방식을 뷰 밖의 외부 코드에 의한 상태변화 즉 외부상태변화라고 칭하겠습니다. 언제 이걸 신..
안녕하세요 주니오스입니다. 아래 글에 iOS 26과 UIKit에 대한 내용이 자세히 정리되어 있습니다.필요한 내용들을 정리해 보고자 이번 포스팅을 작성하게 되었습니다.https://sebvidal.com/blog/whats-new-in-uikit-26 머리말SwiftUI에 비해서 UIKit은 WWDC에서 스포트라이트를 많이 받지 못하고 있습니다.하지만 추가되는 기능의 양은 여전하며, 더 이상 중요하지 않았다는 것은 잘 못된 정보입니다.해당 글을 통해 애플이 SwiftUI와 Swift로의 전환을 점진적으로 도입하고 있으며 이는 굉장히 자연스러운 전환이 될 것이라는 전망에서 아직까지 UIKit을 활용하는 기술을 포기하는 것은 바람직하지 못하다고 생각합니다. 1️⃣ + UIActionUIAction.Iden..
안녕하세요 주니오스입니다.오늘은 학생 때부터 계속해서 의문이었던 아키텍처의 필요성에 대한 개인적인 생각을 정리해 보려고 합니다. 머리말모바일 개발을 해보신 분들은 '클린아키텍처'에 대해 들어보신 적이 있으실 것입니다.저 역시 멘토링 프로그램 및 웹 서핑을 통해 많은 정보를 얻을 수 있었고 다양한 프로젝트에서 활용해 왔습니다.하지만, 학생 레벨의 프로젝트는 규모가 크지 않습니다. 또한 복잡한 도메인 로직 역시 없는 경우가 대부분입니다. 도메인 레이어는 왜 필요할까? 그때 당시에는 해당 물음에 답할 수 없었습니다.왜냐하면 대부분이 서버에서 내려주는 데이터를 시각화하는 작업밖에 없었음에도 ViewModel은 항상 UseCase를 통해서 데이터를 전달받는 구조가 형성되었습니다.별다른 의미 없는 객체(UseCas..
금주의 Swift입니다. 여러분들은 잠재적으로 새로운 형태의 form 요소들과 커브드 디자인으로 당신들의 애플리케이션을 다시 디자인 인할 준비가 되었나요? 이번 년은 애플 개발자들에게 많은 변화를 야기한 연도이다.리퀴드 글라스 디자인Swift 6.2의 Approachable Concurrency는 개발자들의 머리를 터지게 하지 않으면서 레이스 컨디션 상황을 방지할 수 있도록 할 것인지?왜 Liguid glass 인가?https://furbo.org/2025/08/17/liquid-glass-why/ 뤼크드 글라스 디자인을 좋아하던 싫어하던, 새로운 디자인에 대한 말은 끊이지 않습니다.해당글은 좋다 나쁘냐의 관점보단 왜 애플은 리퀴드 글라스를 사용했는지에 대해 다룹니다. 첫 번째로 애플은 진보하는 하드웨어..