| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- swift concurrency
- 일기
- IOS
- 영화리뷰
- 키노
- 티스토리챌린지
- Flutter
- java
- sopt ios
- 오블완
- 자바공부
- MVVM-C
- sopt 35기
- SWIFT
- 코딩공부
- 영화일기
- 프로그래머스
- 영화
- 자바
- 독서일기
- 토이프로젝트
- 영화후기
- SOPT
- 백준
- 플러터
- 새벽녘 소소한 기록
- 리뷰
- 영화기록
- Flutter Toy Project
- 자바 스터디
- Today
- Total
목록전체 글 (116)
새벽의 기록
목표: TCA의 @Dependency를 사용해보기1. Task.sleep 수정하기 지금 코드에 있는 Task.sleep은 실제 시간을 쓴다. 이게 왜 문제일까? 나중에 테스트 코드를 짤 때, 테스트가 끝날 때까지 진짜 1초를 멍하니 기다려야 하기 때문이다. (테스트가 100개면 100초...) TCA의 @Dependency중 ContinuousClock를 사용해서 개선해보자. import SwiftUIimport ComposableArchitecture@Reducerstruct CounterFeature { @ObservableState struct State: Equatable { var count = 0 var isLoading = false var i..
목표: 카운터 앱에 "알림 켜기/끄기(Toggle)" 스위치와 "메모 입력(TextField)" 기능을 추가.import SwiftUIimport ComposableArchitecture@Reducerstruct CounterFeature { @ObservableState struct State: Equatable { var count = 0 var isLoading = false var isTimerEnabled = false var memo = "" } enum Action: BindableAction { case incrementButtonTapped case decrementButtonTappe..
앱은 단순히 더하기 빼기만 하지 않는다. API 통신, 타이머, 데이터 저장 같은 복잡한 요구사항과 작업들을 해야 한다. TCA에서는 이를 Effect라고 부른다. 목표: 지난번 만든 카운터 앱에 "1초 뒤에 증가하기" 버튼 추가.Reducer는 순수 함수여야 한다. 즉, 같은 입력(State, Action)이 들어오면 항상 같은 결과가 나와야 한다. 하지만 DispatchQueue.main.asyncAfter 같은 건 순수하지 않다.그래서 TCA는 return .none 대신 return .run { send in ... } 을 사용해서 비동기 작업을 수행한다. import SwiftUIimport ComposableArchitecture@Reducerstruct CounterFeature { @..
UIKit만을 사용하던 과거와는 달리, 최근 흐름에 속하는 SwiftUI에서의 데이터 바인딩은 굳이 ViewModel을 두지 않더라도 View 자체에서 프로퍼티 래퍼를 사용하는 방식으로 구현할 수 있다. 다만 "비즈니스 로직까지 View에서 처리해야 하는가?"라는 질문에 대한 답이 "No"라면, 이에 대한 해결책으로 등장하는 흐름이 "단방향 데이터 흐름 (Unidirectional Data Flow)"이다. 여기서 데이터 바인딩이 아니라 비즈니스 로직을 View로부터 보다 효율적으로 분리하는 과정에서 떠올리게 된 단방향 데이터 흐름 구조가 Flux였고, TCA는 이 단방향 데이터 흐름이라는 Flux 컨셉을 받아 발전시킨 아키텍처 라이브러리다. ✔️선언형 프로그래밍 방식 (SwiftUI)에서 적합한 데이터..
일전에 멀티프로그래밍 환경에서 가장 경계하고 무서워 하는 요소가 Data Race라고 한 적 있다.Data Race는 간단히 말해 여러 작업이 동시에 실행되며 결과값을 예측할 수 없는 것을 의미하는 데, 이러한 위험을 막기 위해 Swift 6 이상부터는 Sendable 프로토콜을 강력하게 밀고 있다.Swift 6에서는 Sendable 규칙 위반이 경고/에러로 잡히며, 동시성 버그를 컴파일 타임에 미리 터뜨려준다.Sendable이란?Sendable | Apple Developer Documentation Sendable | Apple Developer DocumentationA thread-safe type whose values can be shared across arbitrary concurrent ..
좋은 소프트웨어일수록 모듈의 독립성이 높다는 말을 많이 들어왔다.하지만 왜?? 독립성이 높으면 왜 좋지?? 추상적으로는 알고 있으나 설명해보라고 하면 명확히 얘기할 수가 없었다.그래서 이번에 모듈의 독립성과 결합도, 응집도에 대해 심층 분석해본 후 내 개인적인 생각들에 대해 남기려고 한다.모듈?복잡하고 큰 문제일수록, 일반적으로 작은 부분으로 쪼개어서 하나씩 풀어나가기 마련이다.이 때 문제를 작은 부분으로 쪼개나가는 것을 모듈화라고 한다.소프트웨어에서는 각 기능별로 나누어진 소스 단위를 뜻한다. 독립적으로 컴파일 가능한 프로그램 혹은 하나의 함수나 클래스도 모듈이 된다. 좋은 모듈화를 구현하기 위해서는 목적에 맞는 기능만으로 구성을 해야하는데, 모듈은 주어진 기능만을 독립적으로 수행하기 때문이다. 따라서..
