문득 Task의 사용 방법을 자세히 모르고 있는 것 같아 Swift Concurrency 공식 문서를 정독해보게 되었습니다. https://docs.swift.org/swift-book/documentation/the-swift-programming-language/concurrency/ Documentation docs.swift.org 이건 영문이고 https://bbiguduk.gitbook.io/swift/language-guide-1/concurrency 동시성 (Concurrency) - Swift 한 동시성 도메인에서 다른 동시성 도메인으로 공유될 수 있는 타입을 전송 가능 타입 (sendable type) 이라고 합니다. 예를 들어, 액터 메서드로 호출될 때 인수로 전달되거나 작업의 결과로..

시작하기에 앞서 제가 MVC, MVP, MVVM... 등등 어플리케이션 구조화를 위한 여러 디자인 패턴들을 학습하면서 나름대로 정리한 부분을 공유해보고자 합니다. 따라서 이 글에서 말하는 내용들이 정확한 사실이라기보단 제 나름대로 이해해보려 했던 노력으로 봐주시면 감사하겠습니다. 본 포스팅은 iOS를 기준으로 작성하였고 React를 조금 곁들였습니다. 하지만 그 외 플랫폼, 도메인에서도 어느정도는 이해하실 수 있을 내용입니다! 또한 앱, 웹 프론트 등을 합쳐 클라이언트라고 지칭하겠습니다. 1. MVC의 정의와 역사 MVC 등장 배경 MVC는 아주 오래된 패턴입니다. 1970년에 만들어져, 1980년대 쯤 보편화되었다고 하네요. 이때, 이 구조를 고안하게된 이유는 Small Talk으로 데스크탑앱을 만들기..
일반적인 동기 함수 테스트는 정말 간단합니다. func test_signup_email_validation() { // True XCTAssertTrue(viewModel.isValidEmail("test@example.com")) XCTAssertTrue(viewModel.isValidEmail("user@domain.co.uk")) // Fasle XCTAssertFalse(viewModel.isValidEmail("invalid_email")) XCTAssertFalse(viewModel.isValidEmail("user@.com")) XCTAssertFalse(viewModel.isValidEmail("@domain.com")) } 함수의 input과 output이 명확하므로 손 쉽게 여러 Tes..

I/O란? 블로킹(Blocking)/논블로킹(Non-Blocking)은 입출력(I/O)에 관한 문제입니다. 이때 I/O는 뭘까요? I/O는 파일 읽기⋅쓰기, 데이터 베이스 읽기⋅쓰기, 네트워킹 보내기⋅결과 받기 등을 의미합니다. 즉, 이 I/O들은 CPU와 메모리의 밖과 소통하는 작업들입니다. 이 작업들의 특징은 대부분 처리가 느리다는건데요, 이 점을 생각하시고 다음 개념들에 대해 읽어주시면 되겠습니다. 블로킹(Blocking)/논블로킹(Non-Blocking) 블로킹/논블로킹은 이 오래걸리는 I/O 작업을 스레드가 기다릴 것이냐 아니냐 입니다. 스레드가 기다리는 방식을 블로킹 이라고 하고, 기다리지 않는 방식을 논블로킹이라고 합니다. 블로킹 어떤 스레드가 작업을 처리하다가 I/O가 발생했다고 해봅시다...

프로젝트 도중에 Combine을 이용하던 중 Subject를 써야할 일이 있었는데, Published는 프로퍼티 래퍼로 감싸져 있는데 Subject는 그냥 써야해서 좀 아쉽더라구요. typealias 이용하고 있다가 이번에 바꿔보기로 했습니다. 프로퍼티 래퍼(Property Wrapper)란? 우선 프로퍼티 래퍼는 SwiftUI를 쓰시는 분들이라면 모두 익숙하실 @State, @Binding 등 '@' 표시가 붙은 어노테이션을 말합니다. 이 프로퍼티 래퍼는 어떻게 구현되어 있을까요? 바로 @propertyWrapper를 이용해서 만들어집니다. @State의 정의부를 보면 이렇게 프로퍼티 래퍼를 쓴 struct 형태로 정의되어 있는 것을 보실 수 있습니다. 따라서 @propertyWrapper를 사용한다면..

에러 상황 유닛 테스트 타겟을 추가하고 ViewModel 테스트를 위해 뷰모델을 인스턴스화 하려고 하는데 컴파일러가 뷰모델을 못 찾고 있습니다. 해결 방안 @testable import [프로젝트 이름]을 추가해주면 해결됩니다. private var viewModel: AtchI.AnyViewModel! 이후 이렇게 프로젝트 명으로 더 명확하게 접근할 수도 있습니다. (import 타겟이 하나거나 다른 타겟에 같은 클래스명이 없다면 프로젝트명. 은 필수로 작성하지 않아도 됩니다.) +) XCTest import 문제 저는 프로젝트 생성 당시 테스트 타겟을 추가하지 않아서인지 라이브러리 import가 되어있지 않았습니다. Target > Build Phases > Link Binary With Librar..

문제 상황 info.plist에 위와 같이 런치스크린 배경색과 로고를 지정해주었는데 실행 시 로고가 깨지는 문제가 발생했습니다. 해결 방안 Assets에 추가한 로고 이미지에 가보면 이렇게 1x, 2x, 3x가 있는데요. 기기마다 대응되도록 이미지 크기를 각각 설정해주어야합니다. 1x가 200x200라면, 2x는 400x400, 3x는 600x600 (단위: px)로 설정해주시면 됩니다. 저는 120x120, 240x240, 360x360으로 해주었습니다. SE, 14 pro, 14 plus 에서 테스트 해보았습니다. 다양한 해상도에서도 런치 스크린 로고가 깨지지 않고 출력됩니다 ⚠️ 만약 적용이 되지 않는다면 시뮬레이터 안에서 앱을 지우고 시뮬레이터을 껐다가 다시 실행시켜주세요. + 업데이트 23.05..
HealthKit에서는 데이터를 처리할 때 각각 용도에 맞게 정의된 타입으로 처리하는데요. 이에 대해 정리해보았습니다. DataTypes (표현 방식 분류) 건강 데이터의 표현 방식을 식별하는데 사용됩니다. let bloodType = HKObjectType.characteristicType(forIdentifier: .bloodType) let caloriesConsumed = HKObjectType.quantityType(forIdentifier: .dietaryEnergyConsumed) let sleepAnalysis = HKObjectType.categoryType(forIdentifier: .sleepAnalysis) 이처럼 각 데이터를 표현하기 적절한 type과 구체적인 데이터 종류인 Ide..
- Total
- Today
- Yesterday
- MVVM
- SwiftUI
- MVC
- MVI
- healthkit
- ios
- 비동기/동기
- RX
- programmers
- notion
- 아키텍쳐 패턴
- 리액티브 프로그래밍
- 노션
- 소프트웨어마에스트로
- coordinator pattern
- GetX
- Flutter
- Bloking/Non-bloking
- 프로그래머스
- Swift Concurrency
- reactive programming
- swift
- Architecture Pattern
- TestCode
- Flux
- combine
- DocC
- design pattern
- SWM
- 코디네이터 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |