전체 글

전체 글

    [Swift] ARC (Automatic Reference Counting)

    ARC (Automatic Reference Counting) Swift는 ARC를 사용하여 앱의 메모리 사용을 관리하고 추적한다. 대부분의 경우, Swift에서 메모리 관리란 "그냥 되는 것" 정도이고, 메모리 관리를 위해 별도로 생각할 필요가 없다. 왜냐하면 ARC가 자동적으로 쓸모가 없어진 클래스 인스턴스를 메모리에서 지워버리기 때문이다! 하지만, 몇몇 경우에 ARC는 메모리를 관리하기 위한 코드들 간의 관계에 대한 더 많은 정보를 요구하기도 한다. 이번 장에서는 ARC가 모든 앱의 메모리를 관리할 수 있도록 하는 것을 보여줄 것이다. 레퍼런스 카운팅(Reference counting)은 클래스의 인스턴스에게만 적용된다. 구조체나 열거형은 참조 타입이 아닌 값 타입이기 때문에 참조에 의해 저장되거나..

    [OS] 메모리 구조

    메모리 구조 우리가 흔히 사용하는 프로그램들을 실행하려면 프로그램이 메모리(RAM) 위에 올라가야 한다. 또한 프로그램 내의 여러 변수를 저장하기 위한 메모리 공간이 필요한데 이 부분을 오늘 다뤄볼 것이다. 통상적으로 알고 있는 메모리 구조의 네 가지인, 코드(Code), 데이터(Data), 힙(Heap), 스택(Stack)에 대해서 하나하나 알아보자. Code 말 그대로 코드 영역은, 실행할 프로그램의 코드가 저장되는 장소이다. 텍스트 영역이라고도 하나, 주로 코드 영역이라고 부른다. 코드는 우리가 읽을 수 있는 형태가 아닌, 기계어로 저장된다. 또한 프로그램 실행에 필요한 코드들이기 때문에 프로그램 실행 ~ 끝까지 메모리에 존재한다. 그리고 코드 영역은 컴파일 타임에 결정되어 저장된다. 또한 프로그램..

    [OS] 6. Process Scheduling 3

    이전의 FCFS, RR은 공평성에 초점을 두고 봤으나 이번에는 시스템적으로 효율성/성능에 초점을 둔 방법들을 보자. SPN (Shortest-Process-Next) Non-preemptive scheduling 스케줄링 기준 실행시간 (burst time 기준) Burst time이 가장 작은 프로세스를 먼저 처리해준다. (즉, 일찍 끝나는 것 부터 먼저 처리) SJF(Shortest Job First) scheduling 장점 평균 대기시간(WT: Waiting Time)을 최소화 할 수 있다. 시스템 내 프로세스 수 최소화 스케줄링 부하 감소, 메모리 절약 >> 시스템 효율 향상 많은 프로세스들에게 빠른 응답 시간 제공 단점 Starvation(무한대기) 현상 발생 BT가 긴 프로세스는 계속 자원을..

    [OS] 5. Process Scheduling 2

    기본적인 스케줄링 알고리즘 중에서 FCFS와 RR에 대해서 먼저 알아볼 것이다. FCFS (First-Come-First-Service) 말 그대로 "선착순" 알고리즘이라고 볼 수 있다. 먼저 들어오는 프로세스에 먼저 프로세서를 할당해주겠다는 것이다. Non-preemptive scheduling 스케줄링 기준 도착 시간을 기준으로 스케줄링한다 ready-queue에 먼저 도착한 프로세스를 먼저 처리 자원을 효율적으로 사용 가능 스케줄링 overhead가 적다. 프로세서(cpu)가 계속 일할 수 있다. Batch System에 적합, interactive system에 부적합 단점 Convoy effect 하나의 수행시간이 긴 프로세스에 의해 다른 프로세스들이 긴 대기시간을 갖게 되는 현상 (대기 시간 ..

    [Swift] Access Control

    Access Control 접근 제어(Access Control)는 다른 소스 파일(source file)이나 모듈(module)에서 오는 코드와 우리의 코드 간에 접근을 제한을 할 수 있는 기능이다. 이러한 특성을 통해 코드의 상세 구현부를 숨길 수 있고, 허용된 기능만 사용하는 인터페이스를 제공할 수 있다. 각 타입 ( class, struct, enum) 혹은 타입 내부의 프로퍼티, 메서드, 이니셜라이저, 서브스크립트 등에 특정한 접근 수준(access level)을 할당할 수 있다. 프로토콜은 전역 상수, 변수, 함수처럼 특정 맥락(context)에 의해 제한될 수 있다. 다양한 접근 수준을 제공함과 더불어, Swift는 매번 접근 수준을 명시해주는 수고로움을 덜어주기 위해 기본적으로 접근 수준을..

    [Swift] Generics

    Generics Generic 코드는 유연하고, 재사용가능한 함수와 타입을 사용할 수 있게 하여, 어느 타입이건 작업을 수행할 수 있고, 작업자가 정의한 대로 수행할 수 있다. 이를 통해 중복을 방지하고, 의도를 명확하고 추상적으로 표현하는 코드를 작성할 수 있다. Generics는 swift가 지원하는 가장 파워풀한 기능 중 하나이다. 실제로 사용되고 있는지는 보지 못했겠지만, 자주 사용하고 있는 Array나 Dictionary 타입들은 모두 generic collection이다. Array은 Int형으로 만들 수도 있고, String 타입으로 만들 수도 있고 더 나아가 다른 타입으로도 구성할 수 있다. 유사하게 딕셔너리의 경우도 타입을 지정하고 값을 저장할 수 있으며, 그 타입에는 제한이 없다. 즉,..