728x90

전체 글 169

CPS Style

CPS Style 들어가기에 앞서 이 글에서는 이를 이해하기 위해 알아야 할 기초 개념들을 내가 알고 있는 CS 지식으로 설명하려고 한다. 여담이지만, 이 글의 깊이가 사실 내가 컴퓨터를 이해하고 있는 깊이와 비슷하다고 생각해도 좋다.. 그래서 잘못된 부분이 있으면 피드백해주면 정말 고마울 것 같다. 틀린 내용이 있을 수도 있습니다. (틀린 내용이 있다면 댓글로 알려주세요~! FeedBack 은 언제든지 환영입니다.) 개인적으로 EventLoop 나 상세 구현체는 구현하지는 않았다. 개념을 설명하는데 구현하기에는 너무 어렵고 복잡성을 높일 수 있다고 판단했다. CPS Style? CPS Style 은 suspend 의 개념을 익히기 위해서 반드시 알아야 하는 개념 중 하나라고 생각한다. 일단 CPS 의 ..

Kotlin 2022.07.31

Bit Operation 간단 정리

Bit Operation CD 같은 곳을 자세히 보면 굴곡 같은게 져있음을 확인할 수 있는데, 이를 빛으로 확인해서 어떤 값이 저장되어 있는지 확인할 수 있다. 예를 들면 긴줄은 1, 짧은 줄은 0 이라 해서 어떤 값을 표현할 수 있다는 것이다. Integer Integer 값을 저장하기 위해서 Java 에서는 4 Byte 의 저장공간이 필요하고 이는 Bit 로 표현하면 32 bits 에 해당한다. Int i = 8 을 저장한다면 다음과 같이 저장될 것이다. 즉 Integer 가 표현할 수 있는 가짓수는 (0,1)^32 - 1 에 속하게 되므로 2^32 - 1 에 속한다. 즉 4,294,967,296 가짓수의 수가 표현 가능하다. 하지만 보통 음의 정수를 표현해야 하므로 맨앞의 비트를 부호 비트로 두게 ..

CS 2022.07.28

Hot And Cold Data Stream

Kotlin Collection 과 Hot Data Stream And Cold data stream Kotlin Collection 은 Java Collection 과 무엇이 다를까? 일단 Java 를 쓰다가 Kotlin 으로 넘어온 사람이 이 Collection Class Diagram 을 봤을때는 사뭇 Java 와 약간 차이가 있음을 느낄 것이다. 일단 구체적인 설명은 Diagram 을 보고 하는게 편하니, 아래 Diagram 을 보도록 하자. PlantUML 로 직접 작성했다. Iterator 일단 위의 Collection Class Diagram 을 살펴보면 기본적으로 최상위 Interface 가 Iterator 임을 알 수 있다. 왜 Kotlin 은 이런 구조를 채택했을까? 일단 Iterato..

Kotlin 2022.07.16

Kotlin) Channel 을 이용한 Actor Model 구현

Actor CS 에서 Actor 라는 동시성 모델이 있다. 음, 일단 말이 되게 어려운데 쉽게 말하면 동시성 연산을 수행해주는 모델이라고 생각하면 된다. 이 Actor 라는 녀석은 private 한 state 를 가지는데, 이건 외부에 message 로 인해 영향을 받아 변경될 수 있다. 이게 말이 참 어려운데 코드를 보면 편하다. 이해시키기 위해 코드를 하나 작성해왔다. interface Operation { fun compute(value: Value): Int } sealed class Operator : Operation object Plus : Operator() { override fun compute(value: Value): Int { return value.num1 + value.num2..

Kotlin 2022.07.15

Kotlin Coroutine) Channel

Channel 채널 API 는 Coroutine 간의 상호 통신용으로 사용된다. Coroutine 과 Coroutine 사이에서 Channel 을 이용하여 어떠한 데이터든 주고 받을 수 있다. 특징 채널의 경우 Producer 와 Consumer 갯수에 제한이 없다. Channel 은 아래 두개 interface 를 구현하고 있다. SendChannel ReceivceChannel Receive 가 또는 Send 가 Suspend 되는 경우 Recevice 는 Channel 에서 Element 를 받아오는 함수이다. 근데 만약에 Channel 에 Element 가 없다면 어떻게 될까? 해당 Coroutine 은 가져올 수 있는 Element 가 있을때 까지 suspend 된다. Send 가 Suspend..

Kotlin 2022.07.15

병합정렬(Merge Sort)

병합정렬 Merge Sort 는 Java Collection API 에서도 사용하는 것으로 알고있을 정도로 안전하다. 가끔 왜 Quick Sort 를 쓰지않고, Merge Sort 를 사용하여 구현하는 것에 대한 이야기가 있는데 Quick Sort 를 구현해봤다면 Quick sort 는 stability 하지 않다는 것을 알것이다. 따라서 충분히 objcet 의 경우에 sort 에서 순서가 뒤바뀌는 현상을 경험하기 충분하며 그로인한 사이드 이펙트를 유발할 수 있다. 일단 이 얘기는 뒤로하고 알고리즘에 대해 알아보도록 하자. 도식 나는 이런 Recursive 하게 짜야되는 Algorithm 을 작성할때는 항상 도식을 그리는 편이다. 그래야 Call Stack 생각도 잘나고, 코드도 잘 작성되는 것 같다. ..

Algorithm 2022.07.13

Coroutine withContext 를 이용한 await 처리

우리가 코루틴을 사용할때 보통 일정한 값을 기다려야 할때 아래와 같이 runBlocking 을 이용할 수도 있다. fun test() = runBlocking { launch { // Some Api Calls println("hello, ") } return@runBlocking "ApiCalls Result" } fun main() { println(test()) } 위와 같이 작성하면 어떻게 될까? runBlocking 에서 한가지 알아야 할 점이 있는데, runBlocking 은 처음에 자신만의 Thread 를 고정시켜버린다. 따라서 아래와 같이 Thread 이름을 출력하는 형태로 코드를 작성해서 확인해보면 결과는 아래와 같다. fun test() = runBlocking { launch { pr..

Kotlin 2022.07.11

코드스피츠 6강) 코루틴

Week6 선점형 멀티태스킹 대부분의 OS 는 선점형 멀티태스킹 방식을 취하고 있음. 예를 들면 A 프로세스나 스레드를 스케쥴링 하다가도, B 프로스세스나 스케쥴러가 좀 더 높은 우선순위로 실행되야 한다면, OS 가 A 프로세스를 중단시키고, B 프로세스를 실행시킬 수 있음 비선점형 멀티태스킹 OS 가 강제로 현재 실행중인 프로그램을 멈출 수 없음. 로드된 프로그램이 종료되어야 다른 프로그램이 실행됨. 보통 경량스레드들이 이에 속함. 보통 하나의 로직이 죽으면 전부 다 죽음. 비선점형 멀티태스킹의 단점 단점은 진짜 동시성이 아니다. 하나의 작업을 여러개의 쓰레드나 프로세서로 분산시킬 수 없음. -> 각 작업을 길게 쪼개면 각각 조각을 스레드로 분산시킬 수는 있음. 위의 사진 처럼 하나의 Job 을 잘게 ..

Kotlin 2022.07.07
728x90