뭐라도하는봉
close
프로필 배경
프로필 로고

뭐라도하는봉

  • 분류 전체보기 (55)
    • Retrospect (15)
    • I'm Domain (1)
    • I'm Tech (0)
    • Personal Study (0)
    • Apple Developer Acadamy (0)
    • iOS (38)
      • Swift (19)
      • SwiftUI (4)
      • UIKit (14)
    • Developer (1)
    • CS (0)
  • 홈
  • 태그
  • 방명록
[iOS/Swift] Combine에서 cancellables가 inout파라미터인 이유

[iOS/Swift] Combine에서 cancellables가 inout파라미터인 이유

Combine을 살펴보면 RxSwift에서 용어만 바뀐 느낌이 든다.예를 들어RxSwift에서의 Observable은 Combine에서 Publisher이고,Observer는 SubscriberDisposable은 AnyCancellable...이런 식으로 말이다. 물론 더 깊이 들어가면,RxSwift는 class기반이고, Combine은 protocol 기반,Combine에서는 에러 대응을 항상 해줘야 함.. 등차이점은 더 있을 수 있겠으나, 대부분 RxSwift와 1:1로 대응해서 생각하면 이해하기는 어렵지 않았다. 그런데, 그 중 궁금증이 생긴 부분이 있었다.RxSwift에서의 `.disposed(by: disposeBag)` 부분에 해당하는 코드가 Combine에서는 `.store(in: &can..

  • format_list_bulleted iOS/Swift
  • · 2025. 3. 23.
  • textsms
[iOS/Swift] DI와 DIP는 다르다! - 의존성 주입 알아보기

[iOS/Swift] DI와 DIP는 다르다! - 의존성 주입 알아보기

Swift의 의존성 주입과 관련해서 DI와 DIP라는 용어를 듣게 될 것이다.처음에는 DI나 DIP나 그냥 의존성 주입을 하는 애구나.. 정도로만 알고있었다.그런데, 좀 더 자세히 알아보니 이 둘은 (당연히) 서로 다른 개념이며, 의존성 주입을 해야하는 이유에 대해서도 생각해보게 되었다. 이번 글에서는 DI와 DIP에 대해 알아보도록 하겠다. DI (Dependency Injection)DI는 Dependency Injection의 약어로, 의존성 주입을 뜻한다.먼저 DI가 필요한 상황과, 그 방법에 대해 알아보자. A클래스가 B클래스에 의존하는 상황이라면, B클래스에서 변화가 일어날 때 A클래스에까지 영향을 미치는 상황이 있다./*Guest 클래스는 A_Restaurant 에, A_Restaurant는..

  • format_list_bulleted iOS/Swift
  • · 2025. 3. 18.
  • textsms

[iOS/Swift] 책임분리를 위한 설계 - DTO와 Entity에 대해

이전에 프로젝트를 진행하면서 '네트워크 응답값을 담는 struct 정도로 DTO라는 용어를 사용한 적이 있었다.그러나, 공부를 하다보니 이는 DTO에 대한 이해가 없이 사용했던, 잘못된 표현이었다. 이번 글에서는 DTO 그리고 Entity에 대해서 간단히 알아보도록 하겠다.DTO란?DTO는 Data Transfer Objcet의 약자로, 우리말로 '데이터 전송 객체'라는 뜻을 가지고 있다.그렇다면 데이터 전송 객체는 무엇인가?찾아보니 조금씩 다른 말로 설명하고 있지만,쉽게 말해 네트워크 통신에서 클라이언트와 서버간 데이터 전달을 위한 객체라고 생각하면 될것같다. 다음과 같은 식당 정보가 담긴 JSON 응답값이 온다고 가정해보자.{ "documents": [ // ... { "address_name..

  • format_list_bulleted iOS/Swift
  • · 2025. 3. 15.
  • textsms

[iOS/Swift] Realm의 데이터 삭제하기

Realm에서 특정 데이터를 삭제할때 지금까지는 전체 데이터를 fetch해와서 필터링하는 방법을 사용해왔다.한마디로 비효율적이고 귀찮은 방법을 사용했던 것이다. 그런데 찾아보니 PK를 통해 삭제하는 더 쉽고 간편한 방법이 있어서 소개하려고 한다.데이터를 필터링해서 id를 비교 - 이전에 사용하던 방식앱에서 즐겨찾기 버튼의 동작을 구현하고 있었다.즐겨찾기 버튼을 탭할때, 현재 즐겨찾기가 되어있지 않다면 즐겨찾기에 추가하고,현재 즐겨찾기가 되어있다면 즐겨찾기에서 해제하는 로직을 구현해야했다. realm에서 데이터를 삭제하는 등의 동작을 Repository 패턴을 사용해서 다음과 같이 정의해주었다.func deleteItem(data: StarItem) { do { try realm.writ..

  • format_list_bulleted iOS/Swift
  • · 2025. 3. 12.
  • textsms

[iOS/Swift] Typed throws - Swfit6에서의 에러처리 패턴 개선사항

Swift에서 Error를 Handling하는 방법으로 do try - catch 패턴을 사용하곤 한다.하지만, Swift5에서는 이 패턴을 이용할 때 Error타입과 관련해서 아쉬운 점이 존재했다. 이번 글에서는 Swift5에서의 에러처리 패턴의 구조와, Swfit6에서 개선된점을 소개하겠다. 기존의 에러처리 패턴문자열의 유효성을 검증하는 로직이 있다고 가정할 때 다음과 같이 에러를 처리할 수 있을것이다. 열거형으로 Error 정의enum ValidationError: Error { case emptyString case isNotInt case isNotDate}이렇게 Error 프로토콜을 채택한 열거형을 생성하고, 컴파일러는 이 세 가지 경우를 제외하고는 성공으로 간주하게 된다. t..

  • format_list_bulleted iOS/Swift
  • · 2025. 2. 16.
  • textsms
[iOS/Swift] MVVM의 한계에 대한 고찰 - Massive View Model 해결법

[iOS/Swift] MVVM의 한계에 대한 고찰 - Massive View Model 해결법

기존의 MVC패턴의 한계를 극복하고자 MVP, 그리고 MVVM 패턴이 등장하게 되었다. MVC의 한계와 MVVM이 탄생한 이유는 여러가지가 있을 수 있겠으나, 대표적으로 다음의 이유들이 있었다.View와 Business logic간의 긴밀한 연관성에 의해 확장성, 유지보수에 어려움을 겪음추가로 View가 Model에 영향을 줄 수 있기 때문에, 터치 이상으로 복잡한 소통을 해야 할 경우 프로토콜 등을 통해 Controller에 책임을 위임함ViewController의 역할이 많아지면서 Controller가 비대해지는 Massive View Controller의 문제가 발생 이 외에도 여러 이유가 있을 수 있겠지만, 어쨌든 MVVM이 등장한 가장 핵심 이유는"View와 Model의 의존성 분리"라고 생각한..

  • format_list_bulleted iOS/Swift
  • · 2025. 2. 11.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (55)
    • Retrospect (15)
    • I'm Domain (1)
    • I'm Tech (0)
    • Personal Study (0)
    • Apple Developer Acadamy (0)
    • iOS (38)
      • Swift (19)
      • SwiftUI (4)
      • UIKit (14)
    • Developer (1)
    • CS (0)
최근 글
인기 글
최근 댓글
태그
  • #MVVM
  • #애플 디벨로퍼 아카데미
  • #ios
  • #MC2
  • #RxSwift
  • #UIKit
  • #Swift
  • #SwiftUI
  • #MC1
  • #Apple Developer Academy @ POSTECH
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바