본문 바로가기

전체 글133

MVVM(Model-View-ViewModel)에 관하여 탄생 배경 대형 프로젝트는 수 십개의 화면, 수만 개의 코드 라인으로 구성될 수 있다. 이런 프로젝트의 복잡성을 관리하지 못하면 코드의 유지보수가 어려워지고, 버그가 발생하기 쉬워진다. 복잡성을 관리하기 위한 방법 중 하나로 패턴이 등장했다. 앱에 역할과 책임을 나누어 기능을 분리하고, 각 기능이 서로에게 미치는 영향을 최소화하고, 각 부분을 독립적으로 유지 관리하고 테스트할 수 있도록 하는 것이다. 최초의 디자인 패턴 중 하나로 MVC 패턴이 등장한다. MVC는 모델, 뷰, 컨트롤러의 세 가지 요소로 앱을 분리하여 코드의 구조를 단순화하고 유지관리를 용이하게 했다. 하지만 MVC에는 단점이 존재한다. 1. Massive ViewController 복잡한 앱에서는 Controller가 방대해지는 경향이 .. 2023. 7. 12.
Git Flow에 관하여 Git Flow Vincent Driessen이 2010년에 제안한 브랜치 관리 전략으로, 소프트웨어 개발에서 자주 사용되는 Git 브랜치 관리 모델 중 하나이다. Git Flow는 특정한 브랜치 구조와 머지 전략을 사용하여 프로젝트의 안정성과 유연성을 높이는데 초점을 둔다. Git Flow 구성 브랜치 1. Master 브랜치 Git 저장소에서 가장 중요한 브랜치 중 하나로, 프로덕션 환경에서 사용될 최종 코드를 담고 있는 브랜치다. 프로덕션 환경이란 실제 사용자들에게 서비스되는 환경을 의미한다. Master 브랜치의 특징 1) 안정성: Master 브랜치에 있는 코드는 항상 배포 가능한 상태여야 한다. 즉, 버그가 최소화되고, 기능이 완성되었으며, 성능이 검증된 코드만이 Master 브랜치에 병합되어.. 2023. 6. 26.
Git에 관하여 Git이란? Git은 분산 버전 관리 시스템 중 하나로, 소스 코드의 변경 사항을 효과적으로 추적하고, 관리할 수 있게 해주는 도구이다. Git은 프로젝트 내의 파일 변경 내역을 저장하고, 여러 사람들이 동시에 협업하면서도 코드의 일관성을 유지할 수 있도록 도와준다. 버전 관리 시스템이 필요한 이유 1. 변경 이력 추적 프로젝트의 파일들에 대한 변경 이력을 추적할 수 있다. 이를 통해 누가 언제 어떤 변경을 했는지 파악할 수 있다. 2. 코드 복구 만약 실수로 중요한 코드를 지웠거나, 특정 시점으로 코드를 되돌리고 싶을 때, 버전 관리 시스템을 통해 이전 상태로 쉽게 되돌릴 수 있다. 3. 협업 강화 여러 사람들이 동시에 같은 코드베이스에서 작업할 때, 서로의 작업을 병합하고 충돌을 해결하는 과정을 원활.. 2023. 6. 25.
WWDC 2018: iOS Memory Deep Dive(Demo)에 관하여 Demo 우리는 NASA에서 얻은 고해상도의 태양계 이미지에 필터를 적용하는 앱을 개발하고 있었다. 근데 James가 앱의 메모리 사용량을 분석한 결과를 보여주었다. 위 사진이다. 여기서 아직 게이지가 'red' 영역에 도달하지 않았기 때문에 앱에 충분한 사용가능 메모리가 있다고 생각할 수 있다. 하지만 좋은 생각이 아니다. 왜냐하면 모든 장치가 2GB의 메모리를 가지고 있는 것이 아니기 때문이다. 즉, 이 앱이 1GB의 메모리를 갖는 장치에서 실행된다면, 운영체제에 의해 앱은 이미 종료되었을 가능성이 크다. 두 번째, 운영체제는 앱이 사용하는 메모리 양뿐만 아니라 운영체제에서 발생하는 다른 활동들도 고려하여 앱을 종료할지 결정한다. 따라서 'red' 영역에 도달하지 않았다고 해서 앱이 종료되지 않을 위.. 2023. 6. 24.
WWDC 2018: iOS Memory Deep Dive(이미지)에 관하여 Images 이미지에 대해 가장 중요하게 기억해야 할 점은 메모리 사용량이 파일크기가 아닌 이미지의 'dimensions' 과 관련되어 있다는 것이다. 이 사진은 가로 2048 픽셀, 세로 1536 픽셀의 크기를 가지고 있고, 디스크 상의 파일 크기는 590KB이다. 하지만 실제로 얼마만큼의 메모리를 사용할까? 그 값은 10MB라는 굉장히 큰 수치가 나온다. 가로 픽셀 수와 세로 픽셀 수를 곱한 값인 2048 * 1536에 픽셀 당 4byte를 곱하면 대략 10MB가 나오기 때문이다. 왜 이런 차이가 발생할까? 이를 파악하기 위해서는 iOS에서 이미지가 어떻게 작동하는지에 대해 알아보아야 한다. iOS에서 이미지가 어떻게 작동되는지 1. 로드 단계 이 단계에서는 압축된 590KB의 JPEG 파일을 메모리.. 2023. 6. 21.
WWDC 2018: iOS Memory Deep Dive(메모리 프로파일링)에 관하여 Memory Footprint 메모리는 'Page' 단위로 관리된다. 페이지는 일반적으로 16K 크기를 가지며, 한 페이지에는 여러 개의 객체가 위치할 수도 있고, 큰 객체가 여러 페이지에 걸쳐 위치할 수도 있다. 시스템이 앱에 메모리 페이지를 할당하고, 아직 변경되지 않았다면, 그 페이지는 'clean' 상태이다. 하지만 앱이 페이지에 데이터를 쓰면(변경), 그 페이지는 'dirty' 상태가 된다. 앱의 메모리 사용량은 이러한 페이지들의 총 크기로 측정된다. 위 사진에서 20,000 개의 정수를 담는 배열을 할당하면, 시스템은 이를 위해 여러 개의 페이지를 할당한다. 그리고 배열의 처음과 끝에 있는 정수를 변경하면, 해당 정수가 위치한 페이지는 'dirty' 상태가 되고, 그 사이에 있는 페이지들은 아.. 2023. 6. 19.