본문 바로가기

전체 글

(129)
[swift] 클래스 상속과 초기화 메소드: 지정 초기화 메소드 vs 편의 초기화 메소드 swift에서의 상속과 초기화 메소드의 기본 swift에서 클래스 선언과 상속은 다음과 같은 형태로 이루어진다. 하지만 다음 코드는 오류를 발생시킨다. 왜 일까? 바로 초기화를 하지 않았기 때문이다. class A { var a: Int var b: Int } class B: A { var c: Int } 클래스에서 가장 중요한 것은 초기화이다. 물론 옵셔널 타입은 굳이 nil을 대입하지 않아도 자동으로 nil로 초기화를 해준다. 하지만 옵셔널 타입을 제외한 모든 저장 프로퍼티는 인스턴스가 생성되기 전에 무조건 초기화가 완료되어야 한다. 즉 다음 형태와 같아야 한다는 뜻이다. class A { var a: Int = 0 var b: Int = 0 } class B: A { var c: Int = 0 } ..
Implementing File System 운영체제에서 file system의 구현은 다음과 같이 두 가지의 형태이다. 1. On-disk structure hard-disk 라고 불리는 secondary storage에 있는데 2차 저장장치에 구현된 구조이다. 2. In-memory structure memory에 파일을 올려놓고 어떻게 쓸지에 관한 구현이다. 이 중에서 유닉스에서의 on-disk structure 구현만 살펴보도록 하자. On-Disk Structure master boot record는 부트로더가 저장되는 곳이다. 어찌되었든 운영체제 또한 sw이므로 메모리에 올라가야 실행이 된다. 따라서 이렇게 메모리에 운영체제 sw를 올려두는 것이 부트로더의 역할이다. 이 부트 로더가 저장되는 곳이 바로 master boot record이..
[C/LeetCode] Arithmetic Slices 뭘 풀지 모를때는 역시 daily 추천 문제를 푸는 것이 좋다 Difficulty: Medium Submission: 177ms/ 6.1MB 여전히 효율이 좋은 코드를 생각하는 버릇이 안들었다. 일단 돌아가면 되지 라는 무지성 코딩 제발 그만해 이러다간 다 죽어 int numberOfArithmeticSlices(int* nums, int numsSize){ int result = 0; int diff = 0; int signal = 1; // 3개부터 시작해서 몇개까지로 이루어진 sequence를 만들 수 있는지 for(int i = 3;i
Virtual Memory Management 이전 포스트에서 운영체제의 핵심 기능 중 하나인 memory management를 살펴보았다. 하지만 memory management의 고질적인 문제 중 하나는 역시 "메모리 부족" 사태이다. 이를 해결하기 위한 것이 바로 가상 메모리 기법이다. Virtual Memory Management : main memory와 disk 사이를 번갈아가며 메모리를 교체하는 swapping이 핵심이다. 따라서 main memory보다 훨씬 더 많은 메모리가 있는 것 처럼 여길 수 있다. 그럼 이 방법은 어떤 방식으로 이루어질까? Background virtual memory management는 logical address와 physical address를 분리한다. 그 이유는 한번에 프로그램은 모든 코드를 필요로 ..
[iOS] 화면전환 method present(_:animated:completion:) 의 비동기식 처리 ios에서 화면을 전환하는 방식은 여러가지인데 그 중에서 가장 classic한 방법은 바로 present 메서드를 사용하는 것이다. 화면 전환 스타일 중 "modally" 방식으로 화면을 전환해주며 view controller에 의한 화면 전환이다. "modal"이라는 것은 화면 외에 나머지 영역이 비활성화되어 사용자는 상호작용을 할 수 없는 방식을 말한다. (alert 중에서 .alert 형태의 사용자 알림창이 modal 형식이다.) 이때 중요한 것은 파라미터 중 completion 인데, 이는 화면 전환이 완전이 끝난 후에 실행될 코드를 보장해준다. 단순하게 present 메서드 뒤에 적히는 코드는 실행이 될지 안될지 보장해주지 않는다. 왜냐하면 화면 전환은 비동기로 이루어지기 때문이다. 따라서 화면..
[iOS] TextField.text는 nil이 되지도 않으면서 왜 optional일까 ios 개발에서 사용자의 text를 입력받는 swiftUI는 textField이다. 오늘 프로젝트 개발 중, textField 값이 없을 때와 초기 상황에서의 이벤트를 처리하기 위해 코드를 작성하고 있었는데 알 수 없는 부분을 발견했다. xcode에서 UIlabel의 text를 quick help로 살펴보면 다음과 같은 문서를 볼 수 있다. 즉, textField의 text는 분명 optional type으로 정의되어 있다. 정확하게 말하면 옵셔널 연산 인스턴스 프로퍼티이다. 그런데 문제는 text 속성은 기본으로 "" 빈 문자열을 return 한다는 것이다. 그렇다면 nil은 언제 반환되는 것일까? 1. 유저 입력이 없는 초기 상황 처음에 view가 load되고 textField의 text 값을 테스트..
memory management strategies2: page table의 구현 이전 포스팅에서 paging 기법과 이를 위한 핵심 알고리즘인 page table에 대해 살펴보았다. 2022.01.10 - [STUDY/운영체제] - memory management strategies 그렇다면 내부적으로 page table은 대체 어떻게 구현되어 있을까? Implementation of page table page table : logical address를 physical address로 변환하기 위한 자료구조로써, main memory에 위치해 있다. 따라서 운영체제에서는 page table에 접근하기 위해 두가지의 register를 사용한다. 1. PTBR, page table base register : 메모리 내에서 page table이 시작되는 위치를 찾는 용도 2. PTL..
[c/LeetCode] Single Number 1. 첫 번째 아이디어 그냥 배열 돌면서 같은 값이 있는 경우는 flag를 0으로 해서 탈출하고, 같은 값이 없으면 1이 되므로 return 하도록 작성함 아쉽지만 o(n^2)이다. 856ms/ 7.3MB int singleNumber(int* nums, int numsSize){ int a; int flag; for(int i = 0; i < numsSize; i++) { a = nums[i]; flag = 1; for(int j = 0; j < numsSize; j++) { if (a == nums[j] && i != j) { flag = 0; break; } } if (flag) { return a; } } return 1; } 2. 두 번째 아이디어 (빌려옴) XOR 연산자인 ^를 사용하는 것이다..