iOS
-
[RxSwift] - 단방향 Vs 양방향iOS/RxSwift 2025. 4. 24. 00:02
단방향 바인딩- View → ViewModel- ViewModel → View 이렇게 한 방향으로만 데이터가 흐름 MVVM에서는 가장 권장되는 구조.// View → ViewModeltextField.rx.text.orEmpty .bind(to: viewModel.inputText) .disposed(by: disposeBag)// ViewModel → ViewviewModel.outputText .bind(to: label.rx.text) .disposed(by: disposeBag) - 디버깅이 쉽고, 테스트하기 쉬운 구조 양방향 바인딩이란?View와 ViewModel이 서로 값을 주고받는 구조. Rx에서는 흔히 이렇게 작성됨.textField.rx.text.orEmpty ..
-
[RxSwift] - MVVM패턴과 RxSwift 사용iOS/RxSwift 2025. 4. 3. 13:17
팀 프로젝트 중 RxSwift를 적용한 반응형 프로그래밍에 관심이 생겼다.기존에는 SwiftUI+Combine을 활용한 프로젝트를 해왔었는데 SwiftUI는 특성 상 바인딩을 직접 구현할 필요가 없었기 때문에 UIkit을 반응형 코드로 작성한다는 것에 궁금증이 생겼다. MVVM 패턴은 익숙하다.하지만 내가 모르는 기술(RxSwfit)과 새로운 프레임워크(내 기준에선 UIkit)를 사용해 프로젝트에 적용시켜보고 싶었다. 가장 처음으로 팀원 분의 도움으로 Json데이터를 fetch하는 메서드를 ViewModel에서 불러와 Model에 적용시켜, View와 바인딩 하는 로직을 RxSwift로 구현해봤다. 하나씩 톺아보자 ViewModelimport Foundationimport RxSwiftimport RxC..
-
[Swift] - 배열 루프를 순회하는 방식(enumerated,indices,Range(0..<arr.count))iOS/SWIFT 2025. 3. 20. 20:29
팀원들과 코드리뷰를 하던 중 모두 배열 루프를 돌리는 방식의 차이가 모두 다르다는 것을 깨달았다.기능적으로는 모두 같은 결과가 나오는 코드를 작성할 수는 있지만, 난 항상 이런 동일한 결과가 나오는 코드는 성능적인 차이가 있을까에 대한 고민을 많이 하는 편이다. 제목처럼 오늘은 배열 루프를 돌리는 방식(enumerated(),indices,Range(0..arr.count)에 대해서 하나씩 살펴볼 것이다. 1.Range(0..arr.count) 이렇게 보면 뭔가 어색하지만 이 방식은 다음과 같이 표현한다.let arr = ["a", "b", "c"]for i in 0..기본적으로 swift에서 for문을 돌리는 정석적인 방법이다. 직관적이나, 개발자가 직접 숫자로 범위를 조작하기 때문에 작성을 실수할 ..
-
[Swift] - Character와 EGC(Extended Grapheme Cluster)iOS/SWIFT 2025. 3. 14. 11:26
학습을 하다 알게된 점이 생겨 급하게 포스팅을 한다.과제로 코드를 작성하다가 문득 이런 생각이 들었다.Character는 거의 사용해본적이 없는데 무슨 용도일까? 이 의문을 해결하기 위해 Character를 처음부터 조사하기 시작했다. 바로 본론으로 가보자let text = "ㅁㄴㅇㄹ"let chars: [Character] = Array(text) //["ㅁ", "ㄴ", "ㅇ", "ㄹ"] "ㅁㄴㅇㄹ"은 4개의 한글 자음으로 구성된 문자열이고, 개별 문자(Character)들은 각각 하나의 유니코드 스칼라로 표현된다.Array(text)를 호출하면 Swift는 String을 Character 배열로 분리한다. 자 여기서 유니코드 스칼라가 뭐냐 유니코드 스칼라 (Unicode Scalar) U+0000 ~..
-
[UIKit] - Tabbar 커스텀하기iOS/UIkit 2025. 3. 12. 15:39
오늘은 팀프로젝트를 하다가 생겼던 이슈들과 해결방법을 경험을 바탕으로 서술할 것이다.먼저 Tabbar 부분이다. 기존 폼을 그대로 사용하되, 원하는 대로 커스텀을 하고 싶었다. 여기서 커스텀할 부분은 다음과 같다.원본이미지를 Tabbar item으로 사용해당 탭 선택 시 선택 안된 탭들은 투명처리탭바의 높이해결한 순과 쉬웠던 순?으로 정리한 것이다. 1. 원본이미지를 Tabbar item으로 사용 이 부분은 쉬웠다 단순하게 옵션을 선택해줬다.해당 이미지를 홈 화면의 탭 아이템으로 쓰려고 했다.그런데 막상 다음과 같이 구현을 하니homeView.tabBarItem = UITabBarItem(title: "홈", image: UIImage(named:"Home"),tag: 0) ?? 이렇게 나왔다. 뭔가 t..
-
[iOS] - CoreML, CreateML이란?iOS/iOS 2025. 2. 28. 17:41
오늘은 새프로젝트를 하기 위해 머신러닝 관련 기술을 찾아보던 중 알게 된 내용에 대해서 포스팅해 보겠다. Core ML이란? Apple에서 제공하는 머신러닝 프레임워크로, iOS, MacOS 등과 같은 Apple 플랫폼에서 머신 학습 모델을 손쉽게 사용하고 실행할 수 있도록 지원한다. 한마디로 애플용 머신러닝학습 kit이라고 생각하면 편할 것 같다. CoreML의 기능은 다음과 같다.모델 통합 용이TensorFlow, Keras, Caffe, scikit-learn 등에서 학습된 모델을 Core ML 형식으로 변환하여 사용할 수 있음변환 작업은 CoreML Tools라는 도구를 사용실시간 예측CoreML은 로컬에서 실행되며, 이를 통해 실시간 예측을 제공함(예를 들어 AVRKit으로 카메라를 연동해 실시..
-
[iOS] - 참조 타입이 힙에 저장되는 원리(메모리&CPU 관점에서)iOS/iOS 2025. 2. 15. 11:35
스터디를 하다보니 구조체와 클래스에 대한 생각을 다시 하게 되었다.그 중 참조 타입이 힙에 저장되는 원리를 메모리와 CPU관점에서 상세하게 과정이 갑자기 궁금해져서 정의를 명확히 하고자 다시 조사를 하기 시작했다. 일단 힙과 스택에 개념에 대해서 다시 정의해보자. 1. 힙(Heap)과 스택(Stack)의 개념 힙(Heap) 메모리 • 동적 할당 메모리 영역으로, 런타임에 크기가 결정되는 데이터가 저장됨. • class 같은 참조 타입 객체는 힙에 저장되며, 여러 참조 변수가 같은 객체를 가리킬 수 있음. • 명시적으로 deinit되거나, ARC에 의해 더 이상 참조되지 않을 때 해제됨. 스택(Stack) 메모리 • LIFO 구조로 함수 호출과 지역 변수(값 타입인 struct, enum, let 및 va..
-
[iOS] - protocol을 사용하는 이유iOS/iOS 2024. 8. 31. 17:34
저번 포스팅에 이어서 protocol에 대한 내용을 포스팅 해보려고 한다. protocol를 사용하는 이유 swift는 다중 상속을 지원하지 않는다. 일단 상속이라는 개념이 클래스 외에는 지원하지 않는다.클래스는 한 클래스당 하나의 부모클래스만을 가질 수 있는데, 프로토콜을 다중 채택이 가능하기 때문에 다중 상속을 대체할 수 있다. 한가지 예시로 SceneDelegate파일을 파보자이 클래스는 UIkit 프로젝트를 생성하면 기본적으로 생성되는 클래스다.보면 SceneDelegate는 UIResponser, UIWindowSceneDelegate 두가지를 가지고 있다.여기서 UIResponder는 이벤트에 응답하고 처리하기 위한 추상 인터페이스 클래스이다. 우리는 이로써 두가지를 알 수 있다. 1. Sce..