RxSwift(1)-Observable
·
iOS/반응형프로그래밍
사실 저는 개인적으로 Combine을 너무나 사랑하고 자주 사용하는 개발자입니다. 같은 반응형 프로그래밍의 개념이지만 애플에서 만든 퍼스트 파티로 외부 라이브러리를 관리할 필요가 없기 때문이죠. 하지만 Combine이 나오기 이전에는 RxSwift로 사용을 했습니다. 그러다보니 여전히 여러 기업에서는 Rx를 쓰죠! 그렇기에 저도 Rx마스터가 되어야 하겟습니다.Rx?: ReactiveX 프로그래밍 패러다임을 Swift로 구현한 라이브러리비동기 프로그래밍을 선언적이고 함수형 접근 방식으로 처리하여 코드의 가독성과 유지보수성을 획기적으로 향상시킵니다.복습 : 반응형 프로그래밍: 데이터 흐름과 변경 사항의 전파에 중점을 둡니다. ex) data가 바뀌면 UI가 자동으로 반응한다핵심 구성요소1. Observabl..
Metal3편 - 메모리 사용량 급증 버그 수정
·
SWIFT개발일지
https://codeisfuture.tistory.com/119 Metal(2)-셰이더 코드 작성까지이전 글에서 메탈이란 GPU에 접근하여 빠른 그래픽 처리를 가능하게 해주는 저수준 API라는 것을 학습했다. 즉 Spiritekit, Animation 밑의 있는 것!! 이번엔 그래서 메탈이 어떻게 렌더링을 하는지 살펴codeisfuture.tistory.com기존의 문제점 func applyFilter(_ image: UIImage, filtertype: String, intensity: Float) async -> UIImage { let startTime = CACurrentMediaTime() guard let cgImage = image.resize(ta..
이미지 최적화 3탄(kingFisher를 삭제하고 Custom)
·
SWIFT개발일지
모바일 앱에서 이미지를 로딩하는 것은 사용자 경험에 큰 영향을 미칩니다. 빠르고 효율적인 이미지 로딩은 앱의 성능을 좌우하며, 특히 메모리 관리와 네트워크 사용량이 중요한 요소로 작용합니다. 저는 기존에 Kingfisher라는 외부 라이브러리를 사용해 이미지 로딩을 처리했지만, 몇 가지 한계에 부딪혔습니다. 외부 라이브러리는 편리하지만, 앱의 특정 요구사항을 충족하기에는 유연성이 부족했고, 불필요한 오버헤드가 발생했습니다. 그래서 저는 앱에 최적화된 커스텀 ImageLoader를 설계하기로 했습니다. 이 글에서는 Kingfisher의 단점과 커스텀 ImageLoader의 장점을 비교하며, 어떻게 더 나은 솔루션을 만들었는지 설명하겠습니다.기존에는 KingFisher 외부 라이브러리를 통해 이미지 최적화를..
근본으로돌아가자(7)-String,Array으로 시작해서 Sequence까지
·
iOS
String이 왜 복잡할까?Swift의 String은 단순해 보이지만 내부는 꽤 복잡합니다. 왜일까요?let emoji = "👩‍🚀"for scalar in emoji.unicodeScalars { print(scalar)}// 출력:// U+1F469(👩)// U+200D// U+1F680(🚀)핵심 이유: 유니코드 때문입니다.String은 Character들로 구성각 Character는 하나 이상의 유니코드 스칼라로 구성그래서 배열처럼 string[0] 이런 식으로 접근 불가그래서 Swift는 String.Index를 사용합니다 퀴즈: 👍? => U+1F44D인 단일유니코드스칼라.여기까지가 면접의 단골질문이자 당연히 알아야하는 것입니다. 물론 아닐수도..? 모르면 지금 배우면 됏죠!!ㅎㅎ..
Metal(2)-셰이더 코드 작성까지
·
iOS
이전 글 요약https://codeisfuture.tistory.com/119 Metal(2)-셰이더 코드 작성까지이전 글에서 메탈이란 GPU에 접근하여 빠른 그래픽 처리를 가능하게 해주는 저수준 API라는 것을 학습했다. 즉 Spiritekit, Animation 밑의 있는 것!! 이번엔 그래서 메탈이 어떻게 렌더링을 하는지 살펴codeisfuture.tistory.com이전 글에서 Metal이란 GPU에 접근하여 빠른 그래픽 처리를 가능하게 해주는 저수준 API라는 것을 학습했습니다.즉 SpriteKit, Core Animation 밑에 있는 기반 기술이죠! 이번엔 Metal이 어떻게 렌더링을 하는지, 그리고 실제로 커스텀 필터를 어떻게 만드는지 자세히 살펴볼 계획입니다렌더링 프로세스Metal은 '초..
Metal(1)- 메탈을 알기전에 필요한 것들
·
iOS
그래픽 관련 공부를 해야 할 계기가 생겼고, 이것도 하나의 기회라고 생각해서 블로그에 정리하면서 자세히 공부해보려고 합니다.예전에 AR 쪽 할 때 Metal을 본 것 같은데 기억이 안 나서 아예 처음부터 다시 정리해볼게요! Metal을 이해하려면 먼저 "왜 Metal이 필요했는가?"를 알아야 합니다. 그러려면 컴퓨터가 그래픽을 어떻게 처리하는지부터 차근차근 알아봐야겠죠?컴퓨터 아키텍처의 기초CPU: 컴퓨터의 두뇌ALU (산술논리장치): 수학적 연산과 논리 연산을 수행제어장치: 명령어를 해석하고 실행 순서를 결정레지스터: 고속으로 임시 데이터를 저장캐시메모리: 자주 사용되는 데이터와 명령어를 저장CPU는 순차적 처리에 최적화되어 있어서 복잡한 논리나 분기문을 잘 처리하지만, 같은 연산을 반복해야 하는 작업..
Autolayout 모든 것: 사이클부터 제약조건까지
·
iOS
오토레이아웃이란?iOS 및 macOS에서 UI요소의 위치와 크기를 동적으로 관리하는 시스템: SuperView 크기가 변경되면, Constraints로 잡혀있는 값을 기준으로 본인의 크기를 적절하게 변화시키는 것입니다.레이아웃 업데이트 사이클Autolayout은 크게 3가지 레이아웃 처리 과정을 통해 화면을 그립니다.1. Update Constraints메서드가 호출되며 기존 제약 조건을 갱신하거나 새로운 제약조건을 추가하는 로직 수행2. Layout 계산: layoutSubviews 메서드가 호출되며 업데이트된 제약 조건을 바탕으로 실제 프레임 계산3. Display: draw 메서드 호출되어 계산된 프레임에 따라 화면이 그려진다.이 사이클은 엄격히 순차적으로 매번 실행되는 것이 아닌 UIKit 뷰 업..
파사드 패턴(Facade Pattern)
·
디자인패턴
: 구조적 디자인 패턴 중 하나로, 복잡한 라이브러리, 프레임워크 또는 서브시스템을 간단한 인터페이스로 감싸주는 역할을 한다.이로써 클라이언트가 시스템의 복잡성을 이해하지 않고도 필요한 기능을 쉽게 사용할 수 있게 해준다.파사드? 프랑스어로 건물의 정면이라는 듯. 실제 건물에서 정면은 내부의 복잡한 구조를 가리고 단순한 외관만을 보여주는것처럼 소프트웨어에서도 복잡한 내부 구조를숨기고 단순한 인터페이스만 외부에 노출시키겟다~ ex) 무신사 옷 CS주문 넣는다고 하자. 상담원이 파사드 역할이다. 상담원이 매장의 시스템에 맞춰 해당하는 대응을 해주고 우리는 그냥 전화하는것만으로도 충분하다. 핵심 목적:클라이언트가 서브시스템의 복잡한 내부 구조를 알 필요 없이 필요한 기능을 간편하게 사용.서브시스템과 클라이언트..
팩토리 패턴
·
디자인패턴
팩토리 패턴이란 무엇인가?팩토리 패턴은 객체 생성을 캡슐화하는 생성 패턴 중 하나입니다. 직접 init()을 호출해서 객체를 만드는 대신, 팩토리라는 중간 관리자를 두고 이를 통해 객체를 생성하는 방식이에요.저도 처음 iOS 개발을 시작했을 때는 그냥 필요한 곳에서 바로 객체를 만들면 되는 거 아닌가? 라고 생각했었는데, 프로젝트가 커질수록 이런 방식의 문제점을 절실히 느끼게 되더라고요 😅왜 팩토리 패턴을 사용해야 할까?1. 런타임에 객체 타입 결정사용자 입력이나 네트워크 응답에 따라 다른 타입의 객체를 만들어야 할 때가 있어요. 예를 들어, SNS 앱에서 피드 타입(텍스트, 이미지, 비디오)에 따라 다른 셀을 생성해야 하는 경우입니다.2. 복잡한 초기화 로직 숨기기객체를 만들 때 복잡한 설정이나 의존..