
📝 목차1. 프로세스와 스레드의 차이점2. 멀티 스레딩이 필요한 이유는?3. GCD(Grand Central Dispatch) 1. 프로세스와 스레드의 차이점 프로세스: 운영체제가 자원을 할당하여 실행하는 독립적인 프로그램의 인스턴스스레드: 프로세스 내에서 실행되는 작업 흐름의 단위 1️⃣ 프로세스 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당받는다.기본적으로 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다. 각 프로세스는 독립적인 메모리 공간을 가지며, 다른 프로세스와 메모리를 직접적으로 공유하지 않는다. 2️⃣ 스레드 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 스택을 제외한 Code, Data, Heap 영역은 공유해 서로 읽고..

개발을 하다 보면 앱 성능과 안정성을 좌우하는 핵심 요소 중 하나가 바로 메모리 관리라는 사실을 알게된다. 아무리 기능이 뛰어난 코드라도 메모리 누수가 발생하면, 결국 앱의 속도 저하나 예기치 않은 종료로 이어질 수 있다. 특히 Swift나 Objective-C와 같이 참조 타입이 존재하는 언어에서는 객체의 생명주기와 메모리 해제 시점을 명확히 이해하고 관리하는 것이 필수인 것 같다. 이번 글에서는 참조 타입과 Heap, ARC의 개념, 다양한 참조 방식(strong/weak/unowned), 그리고 ARC와 GC의 차이점까지, 메모리 관리의 기본기를 차근차근 정리해보려 한다!! 📝 목차1. 참조 타입과 Heap2. ARC란?3. strong/weak/unowend 참조4. ARC와 GC의 차이점1..

앱 실행 과정과 RAM 부족 시 시스템 동작, 그리고 앱의 체감 속도에 영향을 미치는 요소에 대해 알아보자. 📝 목차1. CPU, RAM, 저장장치 역할2. 앱 실행시 구성 요소 동작 순서3. iOS에서 RAM 부족시 발생하는 시스템 동작4. 앱의 '체감 속도'에 가장 큰 영향을 미치는 요소 1. CPU, RAM, 저장장치 역할 1️⃣ CPU CPU는 컴퓨터의 핵심적인 부분으로 모든 계산과 명령어 처리를 담당한다. 프로그램 명령을 해석하고 실행하며, 연산(산술/논리 연산)과 제어(명령 실행 순서, 분기, 인터럽트 등)를 수행한다. 명령어 실행: 주어진 명령어를 해석하고 실행연산: CPU 내부의 연산 장치(ALU)를 사용하여 산술 및 논리 연산을 수행제어: 제어 장치(Control Unit)를 통해..
앱을 개발하다 보면 여러 플로우에서 동일한 화면을 사용하는 상황이 자주 발생한다. NavigationStack을 활용해, 공통된 화면은 재사용하면서도 각자의 플로우에 맞게 루트로 돌아갈 수 있도록 구현해보자.1. 상황 다음 두 플로우가 존재한다:비행기 직접 작성 후 날리기 플로우비행기 이어서 날리기(릴레이) 플로우 [1. 비행기 날리기 플로우와 2. 비행기 이어서 날리기 플로우]에서 같은 화면인 비행기 작성하는 화면을 플로우에서 공유하고 있다.최종적으로 "홈 화면으로" 버튼을 누르면 각 플로우에 해당하는 루트 뷰로 돌아가게 하고 싶다. 이걸 어떻게 Navigaion Stack으로 구현할 수 있을까? 위의 상황을 뷰 이름으로 정리해 보자. FlyAnimationView에서 "홈 화면으로" 버튼을 누..

async & await을 알아보면서 콜백지옥을 어떻게 해결하는지 이해해 보자.콜백 지옥을 알아보기 전 클로저를 잘 모른다면 참고해도 좋다. [Swift] - 클로저(Closure)iOS 면접 준비를 위한 3탄이다. Swift에서 중요한 개념인 클로저에 대해 알아보자. - 아래 링크 참고 더보기https://github.com/JeaSungLEE/iOSInterviewquestions질문 리스트1. Swift에서 클로저(Closure)란 무엇이며steelbeartaeng2.tistory.com 1. 콜백 지옥 completion handler를 사용한 예시를 하나 생각해 보자. 이렇게 completion handler를 사용한 함수가 두 개일 때 doubleNumber를 실행하고 값이 있는 경우에만 ..

개인 앱 프로젝트를 진행하는데 서버와 통신이 필요한 기능이 있고, 구현해야하는 기간이 짧았다.여기서 직접 서버를 구축하고 운영하는 것은 시간과 비용, 그리고 유지보수 부담이 된다고 판단하여 Google Firebase를 백엔드로 채택하게 되었다.1. Firebase 프로젝트 만들기 Firebase | Google's Mobile and Web App Development Platform개발자가 사용자가 좋아할 만한 앱과 게임을 빌드하도록 지원하는 Google의 모바일 및 웹 앱 개발 플랫폼인 Firebase에 대해 알아보세요.firebase.google.com Firebase 홈페이지에서 프로젝트 만들기를 해준다. Firebase에서 AI 지원해 주는 건데 나는 사용하도록 했다. Firebase를 쓰..

NavigationStack에서 화면 전환을 구현할 때 일반적으로 NavigationLink를 많이 사용하는데, 이 컴포넌트는 전환 대상인 뷰를 미리 생성하는 방식이다. 아직 화면 전환을 하지 않았더라도 다음 뷰가 이미 메모리에 로드된 상태가 된다. 내가 구현한 화면에서는 전환 대상 뷰 내부에 무거운 연산과 네트워크 요청이 포함되어 있었고, 이로 인해 초기 진입 시 뷰 빌드에 시간이 오래 걸리며 성능 저하가 발생하는 문제가 있었다. 실제로 화면 전환을 하지 않아도 해당 뷰가 생성되기 때문에 불필요한 자원 낭비가 발생했던 것이다. 이러한 문제를 해결하기 위해, 해당 뷰가 실제로 필요할 때에만 생성되도록 LazyView를 적용하게 되었다.NavigationLink의 동작 방식에 대해 이해하고 LazyView..

프로젝트를 진행하면서 깃헙에서 충돌이 자주 발생했었다. 만약 팀원 A가 파일 추가하고, 팀원 B가 설정을 변경했을 때 둘 다 .xcodeproj 파일에 영향을 주어 충돌이 발생했다.또한 팀원이 프로젝트 설정을 변경했을 때 .pbxproj 파일은 XML 형식으로 나타나서 PR 리뷰를 하기 어려운 문제가 있었다. 추가적으로, 프로젝트에서 CocoaPods로 의존성 관리를 했지만, 팀원이 CocoaPods 사용 중인 것을 깜빡하고 SPM을 사용하면 두 의존성 관리 도구가 충돌해서 오류가 발생하는 상황도 있었다. 정리하자면 다음과 같은 문제가 있었다. xcodeproj 충돌 발생.pbxproj 파일의 코드 확인 어려움spm과 cocoapods 충돌 발생이 문제들을 해결하기 위한 방법으로 Tuist라는 툴을 알게..