전체 글

전체 글

    [ReactorKit] (2) Reactorkit 내부 구조를 뜯어보고 사용하자

    [ReactorKit] (2) Reactorkit 내부 구조를 뜯어보고 사용하자

    이 글은 https://hasensprung.tistory.com/186 에서 이어지는 글 입니다. [Reactorkit] Reactorkit 도입기와 여전히 남은 고민들 MVVM을 사용하면서 가장 힘들었던 부분은 모두가 조금씩은 다른 각자의 형태로 MVVM을 사용하고 있다는 점이었습니다. 어느정도 틀이 잡혀 있는 Input/Output Transform 등 MVVM을 다양한 방식으로 시도했 hasensprung.tistory.com 1. Reactorkit의 기본 개념 ReactorKit은 어떤 방식으로 단방향과 코드의 일관성을 도와주는 걸까요? ReactorKit은 다음과 같은 방식으로 작동합니다. 이를 이해하기 위해서는 3가지 형태를 알아야 합니다. Action, Mutation, State 입니다..

    [RIBs] RIBs 분석

    [RIBs] RIBs 분석

    1. Builder 1) Builder 컴포넌트 Builder는 RIB의 본체라고 할 수 있는 해당 RIB의 Router를 만들고, 이를 위해 의존성을 외부에서 주입 받을 수 있는 컴포넌트 입니다. public protocol Buildable: class {} /// Utility that instantiates a RIB and sets up its internal wirings. open class Builder: Buildable { /// The dependency used for this builder to build the RIB. public let dependency: DependencyType /// Initializer. /// /// - parameter dependency: The..

    Swift Hashable을 이해하자

    Swift Hashable을 이해하자

    class SomeObject: Hashable 어떤 객체가 Hashable 프로토콜을 채택해서 따른다. 즉, 어떤 객체가 Hashable 하다는 것은 무슨 말일까요? 이 질문에 대답할 수 있으려면, Hashable한 객체가 어디에 사용되는지를 알아야 합니다. 결론부터 말씀드리면!! Hashable한 객체는 Hash Table에 저장될 수 있어요! 1. Hash Table이 뭘까? Hash Table은 Collection 타입의 저장 방식의 한 개념인데, (index 방식 : Array, Hash Table 방식 : Set, Dictionary) index를 기반으로 저장되는 Array의 개념과 달리 Hash Table은 객체의 Hash값을 기반으로 저장됩니다. 쉽게 이야기하면, 객체의 Hash값이 객체..

    [Swift] iOS는 화면을 어떻게 렌더링할까?

    [Swift] iOS는 화면을 어떻게 렌더링할까?

    개발자 아카이브 문서에 따르면, iOS에서 화면에 그리는 모든 작업(OpenGL, Quartz, UIKit 또는 Core Animation 포함 여부와 관계없이)은 UIView 클래스 또는 그 하위 클래스의 인스턴스 범위 내에서 발생한다고 합니다. 앱이 iOS 운영체제 위에 올라가 실행되고 나서 유저에게 보여지기까지 어떤 일이 일어나는지 한번 알아보죠! 요약: 1. iOS는 draw(_ :)을 이용하여 그리기 작업을 한 후 CALayer마다 가지고 있는 backing store(프레임 버퍼)에 저장하거나, 그림자, 반사 등 복잡한 작업의 경우 Offscreen Rendering을 이용하여 GPU에서 계산한 뒤 Offscreen 버퍼(임시 프레임 버퍼)에 저장합니다. 2. 이렇게 작업된 결과물들이 저장된 ..

    [Reactorkit] (1) Reactorkit 도입기와 여전히 남은 고민들

    [Reactorkit] (1) Reactorkit 도입기와 여전히 남은 고민들

    MVVM을 사용하면서 가장 힘들었던 부분은 모두가 조금씩은 다른 각자의 형태로 MVVM을 사용하고 있다는 점이었습니다. 어느정도 틀이 잡혀 있는 Input/Output Transform 등 MVVM을 다양한 방식으로 시도했었지만 그 틀 안에서도 ViewModel과 ViewController를 어떻게 만들 것인지에 대한 고민은 끝이 없었던 것 같아요. "Input으로 이벤트가 들어와서 Output으로 결과를 View로 반환한다."라는 개념 자체는 단순했지만, Delegate 처리를 위한 값은 어떻게 저장할 것인지, 그 결과가 어떻게 생겨야 하는지, transform의 input은 View에서 주입되어야 하는지 ViewModel에서 주입되어야 하는지, ViewModel 간의 데이터 바인딩은 어떤 방식으로 이..

    [Swift] Struct와 Class를 메모리 원리부터 자세하게 비교해보자

    [Swift] Struct와 Class를 메모리 원리부터 자세하게 비교해보자

    Understanding Swift Performance - WWDC16 - Videos - Apple Developer In this advanced session, find out how structs, classes, protocols, and generics are implemented in Swift. Learn about their relative... developer.apple.com WWDC Understanding Swift Performance 영상을 참조하여 좀 더 원리적인 이해를 돕기 위해 작성한 포스트입니다. 기초적인 스레드와 메모리, 그리고 ARC에 대한 지식이 있어야 이해하기 편하실거에요! 1. 미리 요약 좀 자세하게 이야기를 할 예정이라 먼저 요약을 하고 들어갈게요! (공부..

    [운영체제] 인터럽트(Interrupt) 핸들링을 파보자!

    [운영체제] 인터럽트(Interrupt) 핸들링을 파보자!

    📣 해당 포스트는 운영체제 공룡책과 고건 교수님의 OLC 강의 등을 참고하여 작성되었습니다. 인터럽트란 무엇일까요?? 오늘의 주제는 인터럽트가 핸들링되는 방식이기 때문에 인터럽트는 아주 간략하게 정리를 해볼게요! 인터럽트는 CPU에서 돌아가는 프로세스가 시스템콜이 필요한 I/O를 포함한 다양한 작업들과 다양한 예외 사항을 커널에게 처리해달라고 요청해주는 도구라고 보시면 될것 같아요! 인터럽트가 발생되면 인터럽트 핸들러가 기존 돌아가던 프로세스의 상태를 저장하고, 인터럽트 벡터 테이블에서 어떤 인터럽트인지를 검사한 후, 해당하는 인터럽트 서비스 루틴을 실행하는 순서로 작동합니다. 자세한건 위키피디아에 잘 설명되어있습니다! 인터럽트 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 마이크..

    [운영체제] Linux의 CPU 스케줄링 (CFS 알고리즘)을 파보자!

    [운영체제] Linux의 CPU 스케줄링 (CFS 알고리즘)을 파보자!

    📣 해당 포스트는 운영체제 공룡책과 고건 교수님의 OLC 강의 등을 참고하여 작성되었습니다. Linux는 CFS(Completely Fair Scheduler)라는CPU 스케줄링 알고리즘을 사용해요!! CFS는 모든 프로세스가 공평하게 CPU분배를 받도록 하는 동적 우선 순위 기반 알고리즘인데, 이게 무슨 말이냐... 프로세스가 CPU를 기다리는 데 소요한 시간을 계산하여 우선 순위를 동적으로 할당하는 방식입니다. 오랫동안 대기한 프로세스에 더 높은 우선 순위가 부여될 확률이 높은 것이죠. 물론 우선순위는 단순히 기다린 시간에 비례하진 않고, 다양한 조건들을 고려해 종합적으로 매겨집니다. 이번 포스팅에서는 스케쥴링이 어떤 방식으로 이루어지는지 좀 더 자세히 알아보겠습니다!! 1. 타이머 (Timer) C..

    [운영체제] 프로세스 생성(fork)을 파보자!

    [운영체제] 프로세스 생성(fork)을 파보자!

    📣 해당 포스트는 운영체제 공룡책과 고건 교수님의 OLC 강의 등을 참고하여 작성되었습니다. 이 포스트는 시스템 콜을 이해하고 있다는 것을 바탕으로 설명되기 때문에 시스템 콜이 뭔지 모르신다면 꼭 보고 오시는 걸 추천드려요! [운영체제] System Call(시스템콜)을 파보자! 📣 해당 포스트는 운영체제 공룡책과 고건 교수님의 OLC 강의 등을 참고하여 제 나름대로 작성되었습니다. 시스템콜을 한마디로 정리하면 커널에 접근하기 위한 인터페이스입니다. 하지만 시스 hasensprung.tistory.com 우리가 아래 영상처럼 달력 프로그램에서 이벤트 생성을 눌러 하나의 팝업창을 띄워도, 그 이전 화면인 달력을 움직일 수 있습니다. 이는 하나의 프로그램이 아마 여러개의 프로세스로 돌아가기 때문이에요. (아..