본문 바로가기

분류 전체보기

(83)
FLO Music App - 재생 목록 화면 (Table View) trikalabs / TDD UITableView Joesusnick / TDD TableViews - lesss boring than you think! Essential Developer - Building iOS app with TDD 목차 (눌러서 이동) Programmatic UI Development 준비 음악 데이터를 가져오면 목록으로 표현할 Table View 가 필요하다. UI 개발에 있어 Storyboard 의 사용 없이 Programmatic 하게 작성하고 싶으므로 몇 가지 준비 작업이 필요하다. 1. Storyboard 제거 (Move to trash 를 클릭해 제거하기.) 2. Project 설정 → General → Deployment info → Main interface fi..
FLO Music App - MVC, TDD, Programmatic development 프로그래머스 과제관 - 뮤직 플레이어 앱 작성할 View 재생 목록 화면 → 음악 재생 화면 → 전체 가사 보기 화면 작성 방법 1. MVC 패턴 2. Test-Driven Development 3. Programmatic Development (Storyboard X)
TDD 관련 포스팅 정리 - 모든걸 다 Test-Drive 해야할까? (The Pragmatics of TDD, Test Trivial Code, What to Test and Not to) 목차 (눌러서 이동) Test Driven Development 를 공부하기 위해 처음 적용한 프로젝트에서 너무 간단하고 당연한 것까지 Test-Drive 방식으로 개발하는 것을 보고 꼭 그래야 하는지, 그렇지 않다면 어떤 기준을 적용할지 궁금해 관련 포스팅을 찾아보기 시작했다. 살펴본 포스팅들을 아래에서 순서대로 정리해 보았다. The Pragmatics of TDD 필자인 Robert C. Martin 은 이전 포스팅인 The Startup Trap 이 개발자들 사이에서 논란을 일으키자 그에 대한 후속 포스팅을 한다. The Startup Trap 을 간단히 요약하자면 많은 Startup 들이 창업 초창기의 과도한 열정(?) 으로 인해 속도에만 치중한 채 Test 의 중요성을 잊게 되고 결국 점점 통..
[iOS/UIKit] UIKit 개발 방법들 (Storyboard, NIBs, Programmatic) Storyboard 간단한 프로젝트에 대해서 빠르고 직관적으로 작성할 수 있지만 큰 스케일의 프로젝트에는 부적합하다. 여러 개발자가 작업할 때 Merge Conflict 다루기 힘들기 때문이다. 또한, 하나의 View Controller 만 쏙 빼내서 재활용하기 힘들다. 의존성 관계의 View Controller 들과 모두 함께 움직여야 한다. NIBs(XIBs) 단일 View 를 빠르게 작성하고 필요에 따라 View Controller 에 붙인다. 즉, 단일 View 에 대해 재사용이 용이하다. Lazy Loading 방식으로 작동하므로 Memory Efficiency 는 좋지만, 이에 따른 Performance Latency 가 있을 수도 있다. Programmatic UI Storyboard, NI..
O(N * M) 과 O(N) 으로 해결하는 이동 평균 ※ 웹 환경에 최적화된 서식이므로 웹 페이지로 열람함을 권장. 이동평균 (Moving Average) 이동 평균이란 말 그대로 어떤 기간의 평균을 시간의 흐름에 따라 이동하며 구하는 것이다. 예를 들어, 지난 1년 동안 몸무게의 3개월 이동 평균을 구한다면 1~3월의 평균, 2~4월의 평균... 9~11월의 평균, 10~12월의 평균을 구한다. 기본적으로 완전 탐색의 방식으로 구할 수 있다. 전체 구간 N 동안 기간 M 에 (N > M) 대한 이동 평균을 구한다면 (N-M+1)*M 만큼 연산하므로 시간 복잡도는 O(N*M). 다음은 주어진 몸무게 목록 weight vector 에 대해 interval 만큼의 기간에 대한 이동 평균을 구하는 방법이다. for(int front = 0; front
정렬 알고리즘 (거품, 선택, 삽입 정렬) ※ 웹 환경에 최적화된 서식이므로 웹 페이지로 열람함을 권장. 목차 (눌러서 이동) 거품 정렬 (Bubble Sort) 바로 뒤의 원소와 비교해 순서를 바꾸는 작업을 원소의 개수만큼 반복한다. 반복할 때마다 가장 큰 원소가 맨 뒤에 위치하므로 매번 반복의 길이는 1씩 줄어든다. N 개 원소에 대해 N + (N-1) + (N-2) + ... + 2 + 1, 즉, (N + 1) * N / 2 만큼 연산한다. 최대 차항은 N^2 이므로 O(N^2) 의 시간 복잡도를 가진다. void bubbleSort(vector& v) { for (int i = 0; i < v.size() - 1; ++i) { for (int j = 0; j < v.size() - (i + 1); ++j) if (v[j + 1] < v[j..
배열에서 두 원소의 합 (2Sum) ※ 웹 환경에 최적화된 서식이므로 웹 페이지로 열람함을 권장. 2Sum 정수 배열과 목표 숫자 가 주어지면 배열의 원소들 중 2 개를 골라 합산하여 목표수를 만들 수 있는지 계산한다. N 개의 원소를 N 번 반복해 답을 구하는 완전 탐색이 가능하지만, O(N^2) 의 시간복잡도를 가지므로 개선된 두 가지 방식으로 풀어본다. Two pointer 첫 번째는 두 개의 포인터를 사용하는 방법으로 O(N*logN) 에 문제를 해결한다. 정렬된 배열이 필요하므로 N 개의 원소에 대해 N * logN 만큼 연산하고, 정렬된 배열을 한 번 반복하며 합을 찾으므로 N 만큼의 시간이 더 든다. bool twoPointerSolution(const vector& ori, int target) { int lo = 0, hi..
[iOS] Stanford iOS Lecture - MVVM (cs193p) MVVM Architecture MVVM 의 핵심은 View (user-interface code) 와 Model (backend or logic) 의 분리이다. 이를 위해 Model 의 모든 변화를 View 가 파악하고 UI 를 Rebuild 할 수 있어야 한다. Model Model 은 UI 와 독립적이다. (Model 파일에는 "import SwiftUI" 구문이 없다.) Model 은 앱이 '무엇인지, 무엇을 할지' 설명하는 모든 Data & Logic 을 담고 있다. Model 은 앱의 Source of truth 로서 Model 의 데이터 혹은 정보를 UI 코드에 저장하거나 하는 일은 없다. View View 는 앱을 사용자에게 '어떻게 보여 줄지' 에 대한 것이다. View 는 Model 로..