일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- task cancel
- swift 백준
- swift dashed line
- swift concurrency
- identifiable
- BFS
- custom ui
- custom navigation bar
- scene delegate
- claen architecture
- UIKit
- swift 점선
- button configuration
- Tuist
- uikit toast
- swift custom ui
- swift bottomsheet
- reactorkit
- task cancellation
- swift navigationcontroller
- SWIFT
- DP
- rxdatasources
- 타임라인 포맷팅
- coordinator
- 버튼 피드백
- traits
- domain data
- RxSwift
- custombottomsheet
- Today
- Total
목록TIL (32)
김경록의 앱 개발 여정
📢 cornerRadius란?cornerRadius는 iOS의 모든 UIView가 갖고 있는 CALayer의 속성 중 하나로, 뷰의 모서리를 둥글게 만들어줍니다. 숫자로 지정한 반지름(radius)만큼 모서리가 잘려 둥근 사각형 형태로 렌더링되죠. 예를 들어, 버튼이나 카드 뷰에 부드러운 곡선을 주고 싶을 때 유용합니다.let roundedImageView: UIImageView = { let imageView = UIImageView() imageView.backgroundColor = .systemBlue imageView.layer.cornerRadius = 12 // 모서리를 12pt 만큼 둥글게 imageView.clipsToBounds = true // 내부 콘텐츠가 ..
iOS 앱 개발자라면 누구나 익숙한 AppDelegate 방식. 앱 생명주기의 중심이었죠.그런데 이제는… Apple이 SceneDelegate를 강제하려고 합니다.정말 AppDelegate는 사라지는 걸까요?그리고 우리는 지금 무엇을 준비해야 할까요?🌀 SceneDelegate가 뭐길래?iOS 13부터 도입된 Scene 기반 Life Cycle은 앱을 하나 이상의 "Scene"으로 나누어 관리할 수 있게 해줍니다.간단히 말하면, 앱의 UI 상태를 독립적으로 관리할 수 있는 구조죠.예를 들어 iPad에서 여러 개의 앱 창(윈도우)을 동시에 띄울 수 있는 것도 Scene 구조 덕분입니다.🔥 그런데 왜 지금 이렇게 중요한가?Apple은 iOS 18.4부터 다음 조건을 강제합니다✅ Info.plist에 UI..
✅ 구조적 동시성과 작업 취소구조적 동시성이란?부모 Task가 종료되기 전까지, 그 아래에서 생성된 자식 Task들도 모두 종료되어야 하는 규칙Swift의 async let, withTaskGroup 이 대표적인 구조적 동시성 도구취소는 위에서 아래로 전파됨 (부모 → 자식)즉, 부모가 취소되면, 구조적으로 연결된 자식들도 자동으로 취소됨구조적 동시성에 관한 이전 글 ) https://roks-apps.tistory.com/76 ✅ async let의 작업 취소특징async let 은 선언된 순간 비동기 작업을 시작하고, 자동으로 취소 전파 대상이 됨await 하기 전에 부모 Task가 취소되면, async let 작업도 취소됨특별히 .cancel() 하지 않아도 자동으로 정리(cleanup) 됨예시fu..
작업의 즉시 멈춤이 아닌, ‘취소를 전파’하는 개념Swift의 Task는 취소를 요청받더라도, 즉시 중단되는 것이 아니다.대신, “취소되었다는 신호” 를 내부적으로 가지고 있고, 작업 내에서 그 신호를 직접 확인하고 적절히 대응해야 함.이걸 "cooperative cancellation" 이라고도 함. 작업이 스스로 확인하고 정리하는 방식.(협동적 취소)부모-자식 관계와 취소 전파Swift의 structured concurrency에서는 부모 Task가 있고, 그 안에 자식 Task가 만들어질 수 있어.부모 Task가 취소되면, 자식 Task에게도 취소가 전파됨.하지만! 자식 작업이 완전히 끝날 때까지 (심지어 에러가 발생했더라도), 부모 작업은 기다림.즉, 취소되더라도 자식 작업은 graceful하게 ..
Swift Structured ConcurrencySwift의 Structured Concurrency는 비동기 작업을 계층적으로 구조화하여 코드의 가독성과 안전성을 높이는 방식이다. 이 개념 내에서 async let과 TaskGroup은 병렬 처리를 위한 핵심 도구로 사용된다.1. async let 활용개요async let은 고정된 개수의 비동기 작업을 병렬로 실행할 때 사용된다. 선언된 async let은 즉시 실행되며, 이후에 await 키워드를 사용하여 결과를 기다릴 수 있다. 스코프를 벗어나기 전에 반드시 결과를 await해야 한다.예시 코드func fetchUser() async -> String { try? await Task.sleep(nanoseconds: 1_000_000_000)..
Identifiable이란 무엇인가?Swift의 Identifiable은 각 객체가 고유한 ID로 식별될 수 있도록 하는 프로토콜입니다. 이 프로토콜은 id라는 고유 속성을 요구하며, id는 Hashable 및 Equatable을 준수해야 합니다. 이를 통해 컬렉션 내에서 객체를 빠르게 구분하거나 중복을 방지할 수 있습니다.protocol Identifiable { associatedtype ID: Hashable var id: ID { get }}기본적으로 UUID나 Int, String 등 Hashable한 타입이면 id로 사용할 수 있습니다. 언제 써야 하는가?Identifiable을 언제 사용해야 하는지는 주로 객체의 고유성을 식별할 필요가 있는지에 따라 달라집니다. 다음과 같은 경우 ..
✅ Single ?Single은 하나의 값을 방출(success)하거나, 에러(error)를 방출하는 RxSwift의 Observable 타입입니다.즉, Single는 "성공했지만 반환할 값이 따로 없다"는 의미를 가집니다.예제func test(email: String) -> Single { return Single.create { single in do { let request = try testTarget.test(email: email).asURLRequest() AF.request(request) .validate(statusCode: 200..🧐 언제 사용할까?✅ API 응답 값을 사용하지..
소프트웨어 아키텍처를 설계하다 보면 DTO(Data Transfer Object)와 도메인 모델(Domain Model)이라는 용어를 자주 접하게 됩니다. 이 두 가지 개념은 비슷해 보일 수 있지만, 각자의 역할과 책임이 명확하게 구분되어 있습니다.어느 순간 이 둘의 개념 명확히 분리하지 않고 사용하던 제 모습을 발견해서오늘은 DTO와 도메인 모델의 차이점, 그리고 왜 이들을 분리해서 사용해야 하는지에 대해 알아봤습니다. 1. DTO (Data Transfer Object)역할 및 특징데이터 전송 전용: DTO는 주로 네트워크 요청/응답, API 통신, 데이터베이스 결과 등의 외부 시스템과의 데이터 교환에 사용됩니다.단순 데이터 컨테이너: 비즈니스 로직이나 행동이 포함되지 않고, 오직 데이터를 담아 전..

유튜브나 인스타 등에서 유저의 시간 기록을 위와 같이 포맷팅 하는 방법에 대해 짤막하게 써보겠습니다.코드 import Foundationextension String { func timeAgo() -> String? { // ISO8601DateFormatter를 사용하여 입력된 날짜 문자열을 Date로 변환 let formatter = ISO8601DateFormatter() guard let inputDate = formatter.date(from: self) else { return nil } // UTC 시간대 기준으로 현재 시간을 가져옵니다. let calendar = Calendar.current g..

일반적인 방식일반적인 방식으로 버튼 정의 시 기본적으로 콘텐츠 사이즈에 한해 터치영역을 제공 let testButton: UIButton = { let button = UIButton(type: .system) button.setTitle("Test", for: .normal) button.backgroundColor = .green return button }() 테스트 예시로 button.BackgroundColor를 변경한 모습별도의 너비를 주지않을 경우 내부 Text나 Image에 따라서 터치 영역을 딱 맞게 자동으로 제공함 Button Configration 사용 시 모습 이미지 + 텍스트를 사용해야할때 button..