PHPickerController의 UTI 활용법
·
iOS
왜 PHPickerController가 세상에? 나오게 되었을까?🤔 🤔 iOS에서 사진을 가져오는 전통적인 방식은 UIImagePickerController였습니다.하지만 몇 가지 심각한 단점이 있었습니다:1. 프라이버시 문제 👿UIImagePickerController를 사용하려면 반드시 info.plist에 이런 설정을 추가해야 했어요:NSPhotoLibraryUsageDescription사진에 접근하려고 합니다. 위 사진은 오로지 본인을 위해 사용됩니다​UIImagePickerController로 앨범을 열면, 사실상 사용자의 전체 사진 라이브러리에 접근 권한을 요구해야 했습니다.앱 입장에서는 단순히 “사용자가 선택한 사진”만 필요하지만, 시스템은 모든 사진 접근 권한을 앱에 넘겨줘야 했죠.이..
포켓몬빵으로 이해하는 ObserverPattern & NotificationCenter
·
iOS
작년인가? 포켓몬 빵 대란이 일어진 사건을 기억하시나요???다들 띠부씰을 얻기 위해서 포켓몬빵 오픈런을 하면서 오박사님이 "ㅅㄱ!"를 외치거나 다른 사람들과 가위바위보까지 하는 사건이 일어났습니다 😱 그러면 포켓몬 빵 사려고 온 사람들은 어쩔수 없이 다시 집으로 갔다가 계속 "아 언제나와!!!" 하면서 주변 편의점 알바들을 괴롭혔죠. 갑자기 왜 포켓몬 빵이냐!! 바로 Observer Pattern을 사용했다면 당신은 오픈런을 하지 않아도 되었기 때문이죠!!!Observer Pattern 왼쪽이 이전에 계속 편의점들을 괴롭혔던 포켓몬 빵 사냥꾼들이었다면, 오른쪽은 편의점에서 지인들에게 "야 포켓몬빵 나왔어 빨리 가져가!!" 하고 알려주는 방식이에요. 이게 바로 Observer Pattern의 핵심입니다!..
내 아이폰에 터치를 해보았다(Reverse-preorder DFS)
·
iOS
iPhone 화면을 터치했을 때 정확히 어떤 일이 일어날까요??오늘은 iOS에서 터치 이벤트가 어떻게 흘러가는지, 왜 그런 방식으로 설계되었는지에 대해 자세히 알아보겠습니다! 💻터치 이벤트의 주요 구성 요소UITouch란?UITouch는 화면에서 발생하는 터치의 위치, 크기, 움직임, 압력 등을 나타내는 객체입니다.터치가 시작되면 UITouch 인스턴스가 생성되고, 손가락이 화면에서 떨어질 때까지 계속 유지됩니다.이게 중요한 이유는 iOS가 터치를 "연속된 하나의 이벤트 스트림"으로 처리하기 때문이에요.UITouch는 다음과 같은 5가지 상태를 가져요:.began: 손가락이 처음 화면에 닿은 순간 (딱 한 번만 발생).moved: 손가락이 화면에서 움직일 때.stationary: 손가락이 화면에 있지만..
SceneDelegate가 UIResponder를 상속하는 이유
·
iOS
왜 갑자기 UIScene이 등장했을까?iOS 13이 출시되면서 가장 큰 변화 중 하나가 바로 UIScene의 도입이었습니다.왜 Apple이 기존에 잘 작동하던 AppDelegate 구조를 바꿔가며 이런 복잡한 시스템을 도입했을까요? 🤔 핵심은 iPadOS의 멀티윈도우 지원 때문입니다.기존 iOS에서는 하나의 앱이 하나의 화면(window)만 가질 수 있었지만, iPadOS부터는 하나의 앱이 여러 개의 윈도우를 동시에 띄울 수 있게 되었거든요.예를 들어, Safari 앱을 두 개의 윈도우로 띄워서 하나는 YouTube를 보고 다른 하나는 문서를 작성하는 식으로 말이죠.이런 상황에서 기존의 AppDelegate 하나로는 여러 개의 윈도우 생명주기를 관리하기가 까다로웠습니다. 그래서 🍎은 이렇게 역할을 분..
함께 자라기[애자일로 가는 길]
·
도서관
안녕하세요! 저번에는 객체지향적으로 생각하는 방법에 대해 다뤘다면, 오늘은 소프트스킬 관련된 책을 가져왔습니다 😊이 또한 추천을 받았고 제가 현업에서의 경험이 없어 추구하는 협업 방식이 좋은 것인지, 다른 개발자들은 어떻게 추구하는지, 또한 취업을 하더라도 이후에는 어떻게 성장을 계속 해 나아가야하는지에 대해 도움을 받았습니다제 자신이 더 빠르게 성장을 하고 주변 팀원들과 함께 성장의 시너지를 이끌어 내는 방법에 관한 책읽으면서 제 상황을 돌아보고 공감할 수 있는 부분도 많았습니다이 글을 읽으시는 분들도 읽고 조금이나마 성장에 도움이 되었으면 합니다!!우리는 어떤 시니어 개발자가 되어야 할까요?물론, 신입인 제가 이런 질문을 던지는 것이 다소 어색하게 느껴질 수도 있습니다.하지만 저는 ’앞으로 어떻게 ..
객체지향의 사실과 오해
·
도서관
네이버 부캠을 하고 있는데 만나는 사람마다 책을 추천해달라고 요청을 해왔습니다.많은 책을 추천받았기에 한권씩 읽으며 다양한 사람과 공유해보고자 새롭게 카테고리를 만들고 글을 시작해봅니다. 첫번재 책은 객체지향의 사실과 오해라는 토끼책이에요 🐰🐰🐰 자 시작해보겠습니ㅏ~객체 = 실세계(?)?>"객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다." 객체지향을 대학교 수업에서 배울 때 아마 자동차나 동물 상속 예제들은 한번쯤 봤을겁니다.책을 읽어보면 객체 ≠ 실생활이라는데 왜 자꾸 비유해왔을까 생각해봤었습니다.답은 간단해요. 학습에 너무나 효과적이거든요!하지만 정확한 객체지향에 대해서 책에서는"객체지향 설계는 현실을 모방하는 것이 아니라, 현실 ..
파일 시스템
·
CS
외부에서 전송된 파일을 내 컴퓨터에 안전하게 저장하고 찾기 위해서는 파일 시스템이 필요합니다.만약 파일 시스템이 없다면 어떻게 될까요? 해당 답은 이 글을 전부 다 읽고 나면 정리가 될 것입니다.기본 개념들파일(📁): 관련된 데이터들을 하나의 단위로 묶어서 저장한 것.크게 2가지로 나뉩니다1. 텍스트 파일 사람이 읽을 수 있는 문자로 구성된 파일로서 아스키 또는 UTF-8등의 문자 인코딩을 사용합니다. 우리가 자주 사용하는 메모장 혹은 vim 명령어로 직접 편집이 가능합니다.2. 바이너리 파일컴퓨터가 직접 해석하는 이진 데이터로 구성된 파일로 압축률이 높고 처리속도가 빠릅니다. 일반적으로 실행 파일, 이미지, 오디오, 비디오 등 모든 데이터를 의미합니다. 디렉토리(🗂️): 파일들을 논리적으로 그룹화한..
Process Management와 System Call(커널 헷갈리는 개념 정리)
·
CS
1. 시스템 콜의 깊은 이해swift에서는 출력을 원할 때 print메서드를 사용합니다. 제가 만든 건 아니고 Swift 라이브러리에 구현된 함수입니다.print는 I/O메서드입니다. (원하는 값을 출력해주기에)그런데 유저모드에서는 직접 I/O가 불가능 합니다. 그렇기 때문에 내부의 시스템 콜을 거쳐 커널에게 "화면에 출력해줘!!"라고 요청을 해야합니다.1.1 시스템 콜 래퍼 루틴내부에는 write() 라는 시스템 콜 래퍼가 숨어있습니다mov eax, 4 ; write 시스템 콜 번호mov ebx, 1 ; stdoutmov ecx, msg ; 출력할 문자열mov edx, len ; 문자열 길이int 0x80 ; 시스템 콜 호출!위는 예시의 어셈블..
커맨드 패턴
·
디자인패턴
🎯 커맨드 패턴이란 무엇일까??요청을 객체의 형태로 캡슐화하여 매개변수화하는 행동 디자인 패턴수행할 동작을 객체 안에 캡슐화해 요청자(호출자)와 수신자(실행자) 사이를 분리합니다.어떤 작업 => 객체가 되는거고 필요에 따라 객체에게 전달.📺 리모콘 예시로 이해하기버튼 → 누르기 → 명령 → TV (On/Off)버튼은 TV에 대해 아무것도 모름 (삼성TV인지, LG TV인지)연결된 명령을 통해 TV를 제어요청자와 수신자가 완전히 분리🔧 해결하는 문제들1. 코드 결합도 감소요청자와 수신자 간의 직접 연결 제거2. 작업의 지연 및 예약 실행명령을 즉시 실행하지 않고 저장했다가 나중에 실행3. 작업 취소 기능이전 상태를 저장하여 실행 취소 기능을 쉽게 구현4. 작업 로깅모든 변경사항을 추적하고 필요시 재실..