본문 바로가기

분류 전체보기151

LSLP x Network) refresh 요청에 의한 자동 로그인 구현 (feat. Coordinator & Moya) GitHub PR 링크 토큰 갱신 요청 및 응답 결과에 따른 자동 로그인 구현 #26 2023. 12. 15.
Swift) 프로토콜과 의존성 주입, 의존성 분리 원칙 (feat. DI & DIP) 목차 I. 머리말 (0) 요약 📝 4개의 주제표 아래와 같이 요약할 수 있다. 긴 글을 읽기 전에 일단 살펴 보고 가자. 용어 정의 문제 의존 관계 발생 1. 하위 모듈의 인스턴스를 상위 모듈 내부에 직접 생성할 경우 발생 2. 하위 모듈이 변경될 때마다 상위 모듈 또한 매번 대응해야 함 해결책 의존성 분리 1. Swift의 인터페이스인 프로토콜(Protocol)을 이용한 추상화 진행 2. 정의한 프로토콜을 실제 모듈에 채택하여 요구사항을 준수하도록 요구 수단 의존성 주입 (Dependency Injection) 1. 하위 모듈의 인스턴스를 외부에서 생성 2. 상위 모듈 내부에는 프로토콜을 프로퍼티로 정의하고 생성자를 통해 프로퍼티를 생성 원칙 의존성 역전 원칙 (DIP; Dependency Invers.. 2023. 12. 12.
SwiftUI) @ViewBuilder를 왜 쓸까 (feat. Property Wrapper) 머리말 결론 (애플이 아닌) 직접 만든 코드에는 하위 뷰를 담을 수 있게 하는 로직이 들어가 있지 않기 때문에 - `View` 프로토콜의 `body` 프로퍼티와 SwiftUI에 내장된 구조체에는 이미 `@ViewBuilder`가 구현되어 있어서 아무런 의심 없이 굳이 `@ViewBuilder` 프로퍼티 래퍼를 감싸지 않아도 된다. - 하지만 직접 프로퍼티를 만들거나 구조체를 만들어서 이를 child view로 넣고 싶다면, `@ViewBuilder`를 활용해야 한다. - Custom 구조체를 구현할 때 이니셜라이저에 `@ViewBuilder`를 넣어야 한다. 왜 Custom Wrapper의 이니셜라이저에 `@ViewBuilder`가 들어가는가 강의 시간에 커스텀 Wrapper를 이용하여 SwiftUI의.. 2023. 11. 23.
RxSwift) 이메일 검증 네트워크 요청하기 (feat. withLatestFrom & flatMap) 머리말 구현 화면 이번에 구현한 화면은 아래와 같다. 이메일을 입력하여 확인 버튼을 누르면 해당 이메일이 사용가능한지 아닌지에 대한 반응형 화면이다. RxSwift Observable Flow 이번에 적용한 Observable에 대한 흐름을 아래처럼 그려보았다. 본문에서 주제 별로 끊어서 설명할 예정이다. GitHub PR 링크 회원 가입 - 이메일 검증 요청과 응답 메시지에 따른 반응형 UI 구현 #5 아마 아직 Private일테지만, 나중에 Public 전환 시 볼 수 있을 것 같다 :) 본문 0) ViewModel 구조 입력 값으로는 텍스트(이메일)과 버튼 클릭(확인 버튼 클릭)을 받고, 출력 값으로 해당 텍스트가 적절한지, 응답 메시지는 무엇인지를 다시.. 2023. 11. 18.
LSLP) RxSwift를 이용한 반응형 이메일 입력 화면 구현 (feat: MVVM & BehaviorRelay) 목차 머리말 구현 화면 MVVM 개념 복습 MVVM x Input-Output x RxSwift에 대한 블로그 링크 RxSwift로 MVVM 패턴에서 반응형 이메일 입력 화면 구현하기 0) 개요 ViewController(이하 VC)에서 화면으로 받은 입력 값을, ViewModel(이하 VM) Input의 인스턴스인 "input"으로 받고 있다. 입력 값은 viewModel(VM의 인스턴스)의 transform 메서드를 거쳐 가공되어 출력 값(output; Output의 인스턴스)이 된다. 출력 값은 다시 VC의 화면에 보여진다. 1) ViewController x input 화면의 입력 값을 뷰모델의 로직으로 전달하기 VM의 Input 타입에 대한 인스턴스를 input(텍스트 필드와 버튼 클릭)으로 받.. 2023. 11. 15.
SwiftUI) "@State"로 구조체의 프로퍼티를 변경하기 (feat. 프로퍼티 래퍼; Property Wrappers) 목차 개념 @State를 왜 쓰는가? 구조체 안에서 프로퍼티 값을 변경하기 위해 struct 기반의 SwiftUI에서 인스턴스는 immutable 하기 때문에 @State 이전 @State 이후 정의 A property wrapper type that can read and write a value managed by SwiftUI. SwiftUI에 의해 관리되는 값을 읽고 쓸 수 있게 가능하는 프로퍼티 래퍼의 타입 중 하나 State | Apple Developer Documentation 프로퍼티 래퍼(Property Wrapper)? 프로퍼티를 감싸는 "포장지" A property wrapper adds a layer of separation between code that manages how a.. 2023. 11. 14.
git reset으로 APIKey 유출 되돌리기 - GitGuardian has detected the following Google API Key 머리말 급하게 날라온 Git 관련 이메일 Google API Key를 업로드 Git에서 feature 브랜치로 기능 구현을 마치고 GitHub로 git push를 진행한 직후 아래와 같은 이메일이 발송되었다. 😱😱😱 여태 잘 주의하다가 새롭게 기능을 추가하면서 API Key가 유출되는(!) 문제가 발생했다. 구글에서 제공한 Info.plist에 API Key가 있는 줄은... 꿈에도 몰랐다 순간 식은 땀이 흐르면서 막막함이 들었지만 원인을 분석해서 차례차례 해결해나갔다 🔥 GitHub Repository의 Private 전환 & 문제의 git log 찾기 1) GitHub repository를 "Private"으로 전환하기 일단 해당 Repository가 Public으로 공개된 상태라면 곧바로 비공개 상.. 2023. 11. 12.
네트워크) JWT (JSON Web Token) 보호되어 있는 글 입니다. 2023. 11. 9.
Swift) static member cannot be used on instance of type 오류 (feat. 중첩한 타입) 요약 내용 상황 구조체와 클래스의 중첩된 타입(Nested Types) 상태에서, 인스턴스 멤버로 구조체/클래스 타입을 접근 시 static member 오류 접근 발생 원인 정적인 멤버(static member)는 인스턴스 멤버(instance member)로는 접근이 불가능하다 해결 중첩한 타입을 접근하려면 타입의 이름을 통해 접근해야 한다. 알게 된 내용 구조체와 클래스는 모두 "(커스텀) 타입"이다 타입은 정적 멤버(static member)이다. 중첩된 타입(nested types)을 접근하기 위해서, 바깥에 위치한 타입은 이름으로 접근해야 한다. 머리말 프로젝트의 MVVM 패턴 적용 프로젝트에서 ViewModel Input, Output 구조체를 ViewController에서 적용할 때 의문이.. 2023. 11. 9.
MVVM) Input-Output 패턴 적용하기 (feat. RxSwift) 머리말 요약 수업 시간에 배운 내용의 흐름을 위와 같이 정리해 보았다 (클릭하면 더 자세히 볼 수 있습니다) 본문 종류와 역할 및 특징 종류 역할 및 특징 View / ViewController 1. UI를 구성 2. 이벤트를 감지하여 ViewModel에 입력값으로 전달 3. ViewModel이 전달한 출력값을 화면에 띄움 Input View/ViewController의 이벤트를 감지하여 ViewModel에 보낼 데이터 ViewModel 1. UI 로직과 비즈니스 로직의 분리 2. MVC 패턴에서 과도한 기능을 분리 Output ViewModel에서 가공하여 View/ViewController에 표현할 데이터 bind 1. View/ViewController의 클래스 메서드 2. 나머지 요소 (View .. 2023. 11. 8.
반응형