Adaptor Pattern (구조적 디자인패턴)
·
디자인패턴
요즘 디자인 패턴에 관한 개발 책을 읽고 있다. 취준 하며.. 그래서 이제 차차 인상 깊고 적용할만한 패턴을 정리할 계획이다. 우선 오늘은 어댑터 패턴이다.Adaptor Pattern이란?서로 다른 인터페이스를 가진 두 시스템을 연결하는 구조적 디자인 패턴입니다.기존 클래스의 코드를 수정하지 않고도 새로운 인터페이스 맞춰 사용할 수 있도록 중간에서 "어댑터"역할을 하는 객체를 제공하는 것!왜 어뎁터냐면 일본에 가면 한국에서 사용하는 콘센트와 달라서 꽂을 수 없다. 이때 사용하는게 어댑터이다. 비슷한 개념입니당ㅎ등장배경- 호환성 문제: 서로 다른 인터페이스를 가진 모듈이 협력해야 하는 상황이 많다. 기존 레거시 코드와 새로운 시스템 통합하거나 서로 다른 라이브러리 함께 사용할때 인터페이스가 맞지 않는 경우..
Apple의 보안
·
iOS
안녕하세요! iOS 개발에서 정말 중요한 보안 메커니즘에 대해 정리해보겠습니다. 프로비저닝 프로파일과 샌드박스는 iOS 생태계의 핵심 보안 기둥이라고 할 수 있어요 🔐🔐🔐프로비저닝 프로파일왜 애플은 앱스토어 외부에서 앱을 설치하기 어렵게 만들었을까요? 🤔 바로 신뢰성 때문입니다. "이 개발자가 만든 앱을 내 기기에서 실행해도 될까?"라는 질문에 대한 답이 프로비저닝 프로파일이에요. What is 프로비저닝 프로파일? 프로비저닝 프로파일은 특정 디바이스에서 특정 앱을 실행할 수 있는 허가증입니다. 마치 출입증처럼 "이 사람(개발자)이 만든 이 앱(Bundle ID)을 이 기기(Device UUID)에서 실행해도 됩니다"라고 애플이 보증해주는 거죠 구성요소앱 ID (Bundle Identifier):..
Diffable DataSource
·
SWIFT개발일지/UIkit
와… 진짜 오랜만에 UIKit 관련 공부를 진행하는 것 같네요. 유킷으로 개발한 지가 좀 됐지만, 그래도 이건 알아야 하는 중요한 지식이라 정리 시작해볼게요! 오늘은 Diffable DataSource에 대해 자세히 다뤄보고, 이 내용을 바탕으로 블로그 글을 완성해보겠습니다.등장배경기존에는 테이블이나 콜렉션 내부의 데이터를 사용하거나 변경할때 indexPath를 통해 Cell 을 가져오고 데이터를 변화시켜 주었다. 또한 데이터 업데이트로 다시 뷰를 그릴때는 reloadData() or performBatchUpdates()를 호출해주었습니다.// 기존 방식func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int ..
이미지 최적화 적용하기
·
SWIFT개발일지
흠..아직 많이 모를것이다. 세상에 나온 내 앱 볼레또를 그래서 한번더 홍보하고 들어갈게요 한번씩 아니 두번,세번 써줘요https://apps.apple.com/kr/app/볼레또/id6737753864 ‎볼레또‎1. 티켓으로 꾸미는 특별한 여행 기록 - 일반적인 일기 형식이 아닌, 티켓을 형상화한 독특한 기록 방식을 제공합니다. 티켓에는 출발지, 도착지, 여행 일정, 동행자 등의 정보가 담기며, 사용apps.apple.com요렇게 친구들과 함께 하나의 티켓에서 나만의 프레임으로 네컷사진을 올리고 스티커와 말풍선으로 귀엽게 꾸미는 앱이다. 그러기에 사진이 굉장히 많다... 현재의 앱을 사용하면서 메모리를 체크하면주식그래프같다이전에 나는 이미지가 렌더링되는 과정에서 CPU의 사용량과 메모리를 줄일 수 있는..
근본으로 돌아가자(6) Image
·
iOS
이미지 형식과 기본 개념왜 이미지 처리가 중요할까?이미지 처리 최적화를 안 하면 어떻게 될까요? 메모리가 부족해서 앱이 강제 종료되거나, 스크롤이 버벅거리는 경험을 해보신 적 있으실 거예요.이미지의 두 가지 방식래스터 이미지 (Bitmap)픽셀로 이루어져 해상도가 고정되어 있어 확대 축소하면 품질 저하가 발생합니다. 대표적으로 JPEG, PNG, HEIF가 있어요.벡터 이미지 (Vector)수학적 좌표+기하학적 형태 기반이어서 계산을 통해 크기를 자유롭게 조정해도 품질이 같습니다. SVG, PDF가 대표적이죠.그렇다면 어떻게 구별해서 사용해야 할까?(PNG, JPEG, HEIF SVG)PNG 무손실 압축으로 이미지 품질이 유지됩니다투명도를 지원합니다아이콘이나 로고에 적합해요JPEG 손실 압축 방식을 사용..
근본으로 돌아가자(5) - 프로토콜
·
iOS
기본기 점검의 시작최근 현업 개발자분과 커피챗을 하면서 "기본기를 더 본다"는 말씀을 들었습니다.과연 제가 기본기가 충분한지 의문이 들어서 프로토콜부터 다시 파헤쳐보기로 했어요. 프로토콜을 그냥 "요구사항이 들어있는 청사진" 정도로만 알고 있었는데, 왜 프로토콜이라는 개념이 나왔는지부터 살펴보니 더 깊은 이해가 되더라고요.다중 상속의 딜레마왜 다중 상속이 문제가 될까? 🤔Objective-C는 동적 디스패치와 런타임에 의존하는 객체지향 언어로, 다중 상속을 지원하지 않았습니다.이로 인해 코드 재사용성과 확장성에 제약이 존재했죠.Swift가 왜 다중 상속을 지원하지 않는지 궁금했습니다. 바로 다이아몬드 문제 때문이에요.class A { /* ... */ };class B : virtual public A..
Dynamic Dispatch는 어떻게 이루어지는가? 클래스 VS 프로토콜
·
iOS
사실 이게 첫번째 글이 아니에요. 프로토콜은 어떻게 동작하고 채택당한놈은 어떻게 알고 필수 메서드들을 구현하라고 컴파일 에러가 뜨는지 궁금했던 저는 더 나아가 프로토콜을 채택한 다양한 타입들이 같은 배열에 들어갔을 때, 어떻게 각각 올바른 메서드를 호출할 수 있을까?. 꼬꼬무하다보니 여기까지 왔습니다..쫌 어려웠어여. 주에 한번씩 복습할예정!! 들어가보자~잇!Dynmaic Dispatch정적 디스패치와 달리 런타임에 호출할 메서드가 결정되는 것입니다소스코드를 파싱하여 AST트리를 생성하고 의미분석하여 타입검사하고 중간언어인 SIL로 변환되는데 여기서 정적/동적 디스패치가 결정Virtual Tablefinal 키워드가 붙지 않은 클래스는 상속이 가능하기에 dynmaic Dispatch가 이루어진다.. 런타..
Preview는 어떻게 그림을 그리는 걸까? is that hotreload?
·
iOS
이전에 플러터로 개발했을때 플러터에는 Hot reload라는 아주 핫하고 편리한 기능이 있었습니다. 이는 코드를 변경을 하면 즉시 실시간으로 UI를 업데이트해서 뷰짤때 너무나 효율이 올라간 느낌.. 이 기능이 가능한 이유는 Dart언어와 그 실행환경때문입니다ㅣ.Flutter Hot reload프로세스1. 변경감지: 개발자가 Dart 소스 코드를 수정하고 저장하면, Flutter의 IDE가 이를 감지한다.2. 코드전달: 수정된 코드가 Dart VM에 전달된다. Flutter는 앱을 실행 중인 가상머신과 연결되어 있어, 이 변경사항을 실시간으로 보낼 수 있ㄷ.3. 클래스업데이트: DartVM은 변경된 소스 기반으로 앱의 클래스를 업뎃한다.4. 위젯 재빌드: 필요한 최소한의 위젯만 다시 빌드한다. 그리고..
ScrollView 꾸미기? Deep Dive
·
SWIFT개발일지
https://www.youtube.com/watch?v=alhFwkbsxrs역시나 모든 영상의 출처는 WWDC영상 찾아보다가 와 이쁘다 하면서 들어가게 되었다. 먼저 scrollTargetBehavior은 iOS17이상부터 가능하다.!!! 주의해야할듯. 사용하고 싶어도 못쓸수가 있어요~ @available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *) nonisolated public func scrollTargetBehavior(_ behavior: some ScrollTargetBehavior) -> some View흠 까보니까 안에 ScrollTargetBehavior라는 놈을 받네. 그런데 요놈은 프로토콜이다. public protocol S..