스터디를 진행하면서 토론을 했던 주제가 TCA에서 얘기하는 단방향 데이터 흐름에 대한 이해를 도울 수 있는 토론이었던 것 같아 끝나고 개인적으로 다시 정리해서 글을 남기려고 한다. 매주 하나씩 이런 형태의 글을 꼭 써야지!! 오늘은 그 첫번째로 단방향 데이터 흐름이 왜 좋은건데? 라는 주제로 토론한 내용을 토대로 정리한 내용이다.단방향 데이터 흐름이란 말 그대로 데이터가 하나의 방향으로만 흐른다는 의미이다.TCA에서 데이터 흐름을 보면 다음과 같다사용자입력(Action) -> Reducer -> State -> View이 흐름은 언제나 한 방향으로만 일어나고 반대로 거슬러 올라가는 흐름이 없기 때문에 단방향이라고 말한다. 그렇다면 단방향 데이터 흐름이 왜 좋을까? 이걸 따져보기 위해 먼저 양방향 데이터..
챗봇을 개발하면서 예외, 오류 처리 등 이용자 경험에 필수적으로 포함되어야 하는 부분에 대해 구현하기 위해 일단 발생할 수 있는 상황을 정리해 에러 핸들링을 나열하고 이 핸들링을 통해 특정 상황에 맞는 Toast 메세지를 날려주는 로직을 구현하려고 한다! 먼저 최대한 기능별 모듈화를 통해 프로젝트를 쪼개 구현하고 있기 때문에 에러 핸들러 패키지를 만들어서 사용하는 방식을 사용해보자!이 글에서는 대표적인 사례로 인터넷 연결이 끊겼을때 상황을 가정해 로직 구현을 해보려고 한다.public enum NetworkError: Error { case networkError(code: Int, underlying: Error?) case noInternetConnection case yesInter..
최근 챗봇을 구현하는 과정에서 단일 프로젝트 내 클린아키텍처만 적용해 구현 하는데, 진행을 하다보니 구현 기능들이 추가되었고 점점 크기가 커져 나가는 것을 느꼈다. (다른 큰 프로젝트 비해서는 아주 작은 편이지만..) 모듈화에 관련한 스터디를 진행하게 되면서 이참에 기능 단위로 로직을 모듈화해 다른 프로젝트에서도 재사용성을 높히는 방법을 한번 적용해보려고 한다. 모듈화 방향성?모듈화를 진행하면서 느끼는 건 어떤 방식으로 모듈화를 진행하는지에 대한 정답은 딱 정해져 있지 않은 것 같다. 그때 그 프로젝트, 개발 환경 등 각 요소에 맞춰 어떤 방향으로 모듈화를 진행할지, 유지 보수, 재사용성에 맞춰 진행을 방식도 있고, 협업 시 기능 구현을 나눠 충돌없이 개발이 진행 가능한 환경을 조성하던지.. 등등 아래의..
Mash-Up 동아리 활동이 슬슬 시작되면서 프로젝트 팀 구성은 아직 되지 않았지만 스터디가 개설되었다. 나는 두가지의 스터디에 참여하게 되었는데 Tuist를 활용한 모듈화 스터디와 TCA 이렇게 두가지를 선택했다. 다른 동료들은 어떻게 모듈화를 해 나가는지, TCA를 공부할때 혼자 공부하니 잘 되지 않았던 것을 이번 기회에 둘 다 얻어가고싶어 신청하게 되었다. 먼저 오늘은 본격적인 모듈화 스터디가 시작되기 전에 어떤 방식으로 모듈화가 이뤄지는지, 모듈화 아키텍처가 왜 필요한지, 강점은 무엇인지 등 아주 기초적인 개념 정리를 하기 위해 블로그를 작성하게 되었다. 그럼 이제 하나하나 기초부터 알아보자 모듈화 아키텍처란?모듈화 아키텍처는 애플리케이션의 기능과 책임을 여러 독립된 모듈로 분리하여 개발하는 설계..
오늘은 현재 챗봇 기능을 구현하고 있는 과정에서 실제 현업에서는 이렇게 진행되진 않지만 다이렉트로 GPT API 와 연동해 챗봇 기능을 구현하는 방식에 대해 작성하려고 한다. 일단 기능만 구현해둔 뒤 추후 서버와 연결하여 값을 받는 형태로 진행하기 때문에 클린아키텍처 구조를 활용해 별도의 네트워크 연결 라우터를 두고 해당 라우터를 Moya를 활용해 보다 간편하고 유지보수 및 추후 수정사항이 용이하도록 구조를 짜 구현하게 되었다. 먼저 Moya란 무엇인가!!Moya는 Swift에서 네트워크 요청을 간편하게 관리하기 위해 사용되는 라이브러리이다! Alamofire를 내부적으로 사용하여 HTTP 요청을 수행하지만, TargetType 프로토콜을 통해 API의 각 엔드포인트를 구조적으로 관리할 수 있게 해주는 ..
SwiftUI를 사용하면서 한번씩 네비게이션 플로우 구현이 UIKit에서 사용했을때보다 다소 불편하고 적용이 어렵다고 느껴지는 경우가 있었다. 이 글을 정리하면서 어떤 방식으로 SwiftUI에서 네비게이션을 적용하면 좋을지 한번 알아보도록 하자 기존 Navigation 방식이전 방식에서 SwiftUI는 NavigationView, NavigationLink를 사용해 네비게이션을 통한 뷰 이동을 구현했다. 하지만 이 방식에는 몇가지 문제가 있다고 느껴졌는데 먼저 NavigationView 내부에 내장된 네비게이션 상태는 암묵적인 상태로 관리되었기 때문에 프로그램적으로 뒤로가기 , 특정화면으로 이동 등 과 같은 제어가 다소 어려운 측면이 있었다. 예를 들어 동적 컨텐츠를 다루거나 딥링크로 특정 화면으로 이동..
2025.02.28 - [◽️ Programming/iOS] - Static Dispatch & Dynamic Dispatch (1/2) Static Dispatch & Dynamic Dispatch (1/2)오늘은 Static Dispatch & Dynamic Dispatch의 대해 개념적으로 이해를 하고 넘어가보자 이번 면접을 통해 해당 개념을 질문 받았는데 명칭이 생소하다고 느껴서인지 어느정도 개념은 알고 있었지만 제대dongdida.tistory.com 그럼 오늘은 스태틱 디스페치와 다이나믹 디스페치의 두번째 알아보는 시간!! 이전에 내용을 참고하고 추가적으로 해야할 내용이 있는 것 같아서 또 쓰게 됐다 이 내용을 쓰기전에 먼저 Overloading과 Overriding의 차이에 대해서 제대로 명..
오늘은 Static Dispatch & Dynamic Dispatch의 대해 개념적으로 이해를 하고 넘어가보자 이번 면접을 통해 해당 개념을 질문 받았는데 명칭이 생소하다고 느껴서인지 어느정도 개념은 알고 있었지만 제대로 정리가 되어있지 않아 아예 대답을 하지 못했다 ㅠㅠ 끝나고 나와서 찾아보니 아~ 맞다 이런 느낌.. 그래도 이제라도 정리하고 제대로 정리하는 기회를 가져보자! 먼저 Static Dispatch & Dynamic Dispatch에 들어가기 전에 Dispatch에 대해서 먼저 짚고 넘어가자면 메소드나 함수 호출 시점에서 어떤 구현이 실행될지를 결정하는 어떠한 메커니즘이다 정도로 알고 넘어가면 될 것 같다. 내가 호출한 함수를 컴파일 타임에 결정하냐, 런타임에 결정하냐에 따라 방식이 정해지는..
https://developer.apple.com/documentation/swift/sendable/ Sendable | Apple Developer DocumentationA thread-safe type whose values can be shared across arbitrary concurrent contexts without introducing a risk of data races.developer.apple.com SendableSendable은 Swift Concurrency 환경에서 여러 스레드나 액터 간에 안전하게 값을 전달할 수 있음을 보장하기 위한 프로토콜이다. 이는 데이터 경합(data race)과 관련된 문제를 방지하고, 동시성 안전성을 확보하는데 중요한 역할을 한다. Send..
2024.08.19 - [◽️ Programming/T I L] - Swift의 async/await에 대해서 알아보자 Swift의 async/await에 대해서 알아보자Swift 5.5부터 도입된 async/await는 기존의 비동기 처리방식인 DispatchQueue나 completionHandler를 사용해 처리했지만 더욱 직관적이고 관리하기 쉽게 만들어 주는 기능이다. 기존의 비동기 처리 방식과 비dongdida.tistory.com 이전에 async/await 에 대해서 알아보는 시간을 가졌지만 이번엔 Task는 어떤 역할을 담당하고 있는지 한번 살펴보자 TaskTask는 Swift Concurrency에서 비동기 작업을 나타내며, async/await 문법과 결합하여 동기 코드처럼 읽히면서도 ..