전체 글

전체 글

    [Swift] Struct VS Class

    Struct Class type Value type (= call-by-value) Reference type (= call-by-reference) 메모리 할당 공간 Stack Heap 상속 X O deinit X O Struct enum과 같이 값 타입이다. (값의 복사가 일어난다) struct는 stack 메모리 공간에 할당된다 stack 메모리 공간은 "컴파일" 시점에 결정된다. Thread-safe 상속 불가 기본적으로는 reference count로 메모리를 관리하지 않으나, 참조를 포함하는 경우에는 reference count를 사용한다 Class 참조 타입이다. class는 heap 메모리 공간에 할당된다. heap 메모리 공간은 "런타임" 시점에 결정된다. Thread-unsafe ARC..

    [Swift] Dictionary 파헤치기

    https://developer.apple.com/documentation/swift/dictionary Apple Developer Documentation developer.apple.com Dictionary란? Key-value 쌍의 원소로 이루어진 collection을 말한다 Declaration @frozen struct Dictionary where Key : Hashble 이전에 Optional의 구조를 살펴볼 때도 @frozen 키워드를 본 적이 있다. Future versions of the library can’t change the declaration by adding, removing, or reordering an enumeration’s cases or a structure’..

    [OS] 5. Process Scheduling 1

    왜 프로세스 스케줄링을 해야할까? 하나의 프로세스가 아닌 다중 프로세스를 운영하게 될 경우, 프로세스들의 우선 순위를 조정해주는 일은 매우 중요하다. 중요한 일이라면 우선순위를 높여 자원을 할당해주어 먼저 처리해야하고, 상대적으로 우선순위가 낮은 프로세스는 후순위로 처리하여 효율적/효과적으로 업무를 수행할 필요가 있다. 즉, 프로세스 스케줄링은 다중 프로그래밍(프로세스가 여러 개) 환경에서 필요한 것이다. 스케줄링 : 자원을 할당할 프로세스를 선택하는 행위 자원을 관리하는데에는 두 가지 방법이 있다. 시간 분할(time sharing) 관리 하나의 자원을 여러 스레드들이 번갈아가며 사용 (ex. CPU(프로세서)) 프로세스 스케줄링 : 프로세서 사용시간을 프로세스들에게 분배. ex. 1 ~ 10초 까지는..

    [Swift] split과 components (feat. 문자열 처리)

    문자열을 다룰 때 주로 쓰는 메서드들을 살펴보자. Split(separator : ) separator를 인자로 하여 받은 값을 기준으로 대상 문자열을 나눈다. 예를 들어서 "this is a remote controller"를 " "(공백)으로 나눈다고 할 경우 ["this" "is" "a" "remote" "controller"] 를 결과로 얻게 된다. var s = "this is a remote controller" var splited = s.split(separator: " ") print(splited) // ["this" "is" "a" "remote" "controller"] 이렇게 공백을 빼고 반환해준다는게 장점이다. 하지만! [Substring]으로 반환되어 바로 사용하기에는 껄끄러운..

    [Swift] OOP의 SOLID 원칙

    객체 지향 프로그래밍이란? 먼저 작은 문제들을 해결할 수 있는 객체들을 만들고, 이 객체들을 조합하여 큰 문제를 해결하는 방식이다. 좋은 객체 지향 설계를 하게 되면 코드의 재사용, 유지보수의 용이성 등의 장점으로 가져갈 수 있고 개발 기간/비용들을 감축할 수 있다! 항상 코드는 유연하고 확장할 수 있고 유지보수가 용이하고 재사용할 수 있어야 한다. 이러한 OOP 방식을 잘 준수하기 위해 만들어진 것이 SOLID원칙이다. OOP의 SOLID 1. 단일 책임의 원칙 (SRP: Single Responsibility Principle) 하나의 객체는 하나의 책임을 가져야 한다. 즉 하나의 class가 여러 기능을 담당하면 안된다는 것이다. class Search { func searchResult() -> ..

    [OS] 4. Thread Management

    이전에 프로세스에 대해 살펴보면서, Context Switch의 비용이 만만치 않기에 이를 줄이는 것이 중요하다고 했었다. 이에 등장했던 개념이 thread였는데, 이번에 한 번 살펴보자! 프로세스(Process)와 스레드(Thread) 프로세스는 자원을 할당받고, 자원을 제어하여 목적을 달성한다. 여기서 제어만 따로 떼어둔 것을 스레드라고 한다. 하나의 프로세스 안에 여러 스레드가 있을 수 있다(제어가 여러 개 있는 것) Thread란? LWP(Light Weight Process)라고도 한다 프로세서 활용의 기본 단위이다. 구성요소 Thread ID Register set (PC(program counter), SP(stack point)) Stack (지역 데이터) 프로세스의 코드, 데이터, 힙의 ..