본문 바로가기

전체 글

(129)
[iOS] segue 객체를 이용한 화면 전환 처리하기 ios 에서는 다양한 방식으로 화면을 전환할 수 있다. 크게 4가지 정도이다. 화면 전환 방법에 따라 이전 화면으로 돌아가는 방법도 달라진다. 화면 전환 방법 1. 뷰를 전환하기 2. 뷰 컨트롤러를 전환하기 3. 네비게이션 컨트롤러에 의한 화면 전환 4. 세그웨이에 의한 화면 전환 1. 뷰 자체를 전환하기 뷰 자체를 전환하는 방법은 하나의 뷰 컨트롤러 안에 루트 뷰 두개를 두고 전환한다. 하지만 이는 뷰 컨트롤러:루트뷰 = 1:1 이라는 MVC 패턴을 벗어나므로 좋지 않다. 또한 뷰 컨트롤러의 루트 뷰를 가져와서 올릴 수도 있지만 이 또한 뷰의 소속 컨트롤러는 무엇인지 모호해지기 때문에 좋지 않은 방식이다. 2. 뷰 컨트롤러를 전환하기 뷰 컨트롤러를 전환하는 방식은 가장 많이 쓰인다. 이미 present..
[swift/LeetCode] Binary Search 오늘 leetcode가 추천하는 오늘의 문제이다. 근데 쉬워서 특별히 swift로 짜봤다. 문제는 단순히 이진 탐색 구현하는 것 이진 탐색은 값을 범위를 반씩 좁혀가며 찾는 것이기 때문에 O(logN) 의 시간복잡도를 가진다 단 오름차순이든 내림차순이든 정렬이 되어있어야 한다. 따라서 트리 탐색에 유용하게 사용된다. Submission: 372 ms / 14.3 MB class Solution { func search(_ nums: [Int], _ target: Int) -> Int { var start = nums.startIndex var end = nums.endIndex - 1 var mid: Int while (start target) { end = mid - 1 } else { start = ..
[iOS] core data를 이용하여 데이터를 영구 저장하기 core data : application에서 모델 계층의 객체를 관리하는 데 사용하는 프레임워크 ios에서 데이터를 영구 저장하는 방법은 다양한데, 그 중에서도 core data는 애플이 코코아 개발환경을 통해 제공하는 In-Memory 방식의 데이터 관리 프레임워크이다. In-Memory 방식이므로 모든 데이터를 다루는 작업은 메모리에서 동작한다. (In-Memory 방식은 뒤에서 설명) 즉 읽고 쓰는 데이터들은 모두 메모리에 로드한 다음에 메모리에서 읽거나 쓰기 작업을 수행하고 그 결과를 저장소에 반영하는 것이다. 한마디로 영구 저장소에 직접 데이터를 쓰거나 읽는 일이 없다는 점이 SQLite와 다른 점이다. 그냥 개발자와 영구 저장소를 이어주는 프레임워크이다. core data의 데이터 저장 구조..
[iOS] UITableViewController delegate method 모아보기 UITableViewController : UIKit 에서 데이터를 리스트 형태로 보여주기에 적합한 view controller는 Table View Controller이다. 위와 같이 데이터를 리스트 형태로 표현 가능하여 직관적으로 데이터의 목록을 볼 수 있다. table view의 계층 관계는 다음과 같다. 테이블 뷰 컨트롤러 -> 테이블 뷰 -> 테이블 뷰 cell -> content view 이때 하나의 테이블 뷰에는 여러 개의 테이블 뷰 섹션이 있을 수 있다. 섹션은 그룹과 비슷하다. 이러한 table view controller 가 정의되어 있는 곳을 보면 다음과 같다. UITableViewController 는 UIViewController를 상속받고 UITableViewDelegate, U..
[iOS] Codable protocol을 사용하여 json data parsing하기 swift에서 json 데이터를 parsing 할 수 있는 방법은 여러가지이다. 그 중에서도 swift4 에 출시된 codable은 코드 단 5줄 이내로도 쉽게 json 데이터를 파싱할 수 있도록 해준다. 이에 대해 알아보자 애플 공식 문서를 살펴보면 codable은 type alias라고 되어있다. 즉 Codable = encodable + decodable 이다. 원래 swift에는 decodable, encodable 프로토콜 두가지를 모두 제공하였다. 이를 합친것이 codable이다. 이때 데이터를 encode, decode 한다는 것은 다음과 같은 의미이다. encode: 데이터를 원하는 프로토콜로 변환 decode: 데이터를 내가 사용하고자 하는 모델로 캐스팅 json을 예시로 들자면 다음과 ..
File I/O functions in C Library File I/O in C Library 지난 포스팅에서는 리눅스에서 제공하는 file-i/o 를 위한 system call 이었다. File I/O system call in LINUX UNIX 계열 운영체제에서 파일의 종류는 크게 두 종류이다. 하나는 regular file, 우리가 흔힌 생각하는 파일이다. 예를 들면 txt, c, cpp 등등 또 다른 하나는 I/O device를 file 로 추상화한 special file이다... josushell.tistory.com 이와 비슷하게 파일 입출력 함수를 C 표준 라이브러리에서도 제공한다. 다음은 가장 자주 쓰이는 함수들이다. fopen fgetc/ fputc fgets/ fputs fread fwrite fseek ftell rewind fflush..
[iOS] UserDefaults와 커스텀 프로퍼티 리스트를 이용하여 데이터를 영구 저장하기 앱의 데이터는 실행 중에 메모리에 저장되지만 이는 휘발성이므로 앱을 종료하면 사라진다. 하지만 사라지지 않아야 하는 데이터는 어떻게 보관할 수 있을까? 예를 들면 메모장의 데이터나 일정과 같은 데이터들을 사라지지 않게 보관하는 방법에 대해 알아보자 코코아 터치 프레임워크는 다음과 같이 다양한 수준의 데이터 저장 방식을 제공한다. UserDefaults/ 커스텀 프로퍼티 리스트 : key-value 형태로 저장되는 간단한 데이터를 저장하는 방식 코어 데이터/ SQLite : 지속적으로 추가되거나 구조적으로 관리가 필요한 데이터를 저장하는 방식 아카이빙 (Archive) : 일반 데이터 타입으로 표현 불가능한 데이터를 저장하는 방식 즉 특정 순간 인스턴스 객체의 데이터 자체를 캡쳐하여 그대로 저장하는 방식이..
Secondary Storage Architecture Disk Scheduling : 하드웨어 효율을 위해서 하드 디스크의 헤드 움직임을 줄이도록 스케줄링하는 것이다. 즉 스케줄링을 잘해서 디스크 seek time을 줄이는 것이 목표이다. 디스크의 구조 디스크는 arm이라고 불리는 축을 중심으로 헤드라고 하는 장치가 판을 돌며 read, write를 시도한다. 이때 데이터가 있는 트랙에 헤드가 위치하도록 찾아서 이동하는 시간이 바로 seek time이다. 우리나라 말로 하면 '탐구 시간'이다. 탐구 시간을 줄여야 효율이 좋다. 디스크 스케쥴링 알고리즘은 이 트랙을 찾는 순번에 대한 절차를 결정한다. Disk Scheduling Algorithms FCFS : queue에 들어온 순서대로 이동한다. 이동거리는 sector 사이의 거리이다. 위와 같이 FCFS..