728x90

분류 전체보기 173

Kotlin Coroutine Series - 4) Job

Job 우리는 앞서서 Coroutine 의 기본 동작 원리 및 Continuation 과 CoroutineContext 와 같은 문맥을 유지해주는 부분에 관해서도 공부했다. Job 은 CoroutineContext 인데 앞서서 계속 얘기한 Structured Concurrency 를 유지하기 위한 하나의 수단이자 코루틴은 모두 자신만의 Job 을 가지고 있다. Context 와 다르게 상속받지 않고, 오로지 자신의 코루틴에만 의존한다. 이것도 말 보다 코드를 보는게 백배 이해가 빠르니 아래 코드를 한번 같이 보자. suspend fun main(): Unit = coroutineScope { val parentJob = coroutineContext[Job] println("[ParentJob] ${pa..

카테고리 없음 2022.09.29

Kotlin Coroutine Series - 3 ) CoroutineContext

COROUTINE CONTEXT CoroutineContext 는 Coroutine 안에서 유지되도록 사용자가 별도로 정의한 문맥이라고 생각하면 좋은데, 따라서 Continuation 과 유사하게 우리가 가져가야 하는 문맥(Context) 이다. Coroutine Context 는 코드적으로 Map 이라고 생각하면 매우 이해하기 편하다. 따라서, CoroutineContext.Key 와 CoroutineContext.Element 의 조합으로 이루어져 있으며, Single Value 일수도 있고 여러개가 합쳐져 유사 Collection 과 같은 형태로 존재 할수도 있다. 이게 위처럼 말하면 사실 코드를 보지 않고는 무슨 소리인지 이해가 어려우므로 코드를 보고 다시 정의를 한번 보도록 하자 Coroutin..

Kotlin 2022.09.29

Coroutine Series-2) Continuation

Continuation Coroutine 에서 꼭 알아야 하는 부분 중 하나이지만 생소하지 않은 개념중 하나이다. Continuation 이란 말 자체가 생소해서 정의를 설명하기 보단, Continuation 이란 개념이 왜 만들어지게 됬는지 설명 하면 자연스럽게 이해될 것이라고 생각된다. 이 챕터는 진짜 상당히 어려울 수 있다. 잘 이해하고 넘어가야 왜 코틀린 바이트 코드가 그렇게 구성되는지 이해할 수 있다. Call Stack 과 Suspend Function 에서의 문제 아래 코드를 한번 살펴보자. fun a() { val a_temp = 1 val a_temp_zz = "zz" b() return "aa" } 위의 코드를 우리가 실행시킨다고 생각해보면, a() 함수를 실행시킨 뒤 Thread St..

Kotlin 2022.09.28

Coroutine Series-1 ) 코루틴을 왜 사용해야 하는가?

왜 코루틴을 사용해야 할까? Java 에는 이미 멀티스레딩을 잘 지원하는 JavaFX 나 Reactor 와 같은 표준화된 라이브러리가 존재한다. 그럼에도 우리가 코루틴을 사용해야 하는 이유는 무엇일까? 코루틴은 이미 Lisp 와 같은 언어에서 예전에 구현된 적 있었으나, 별 다른 흥행을 얻지 못했었다. 그 이유는 실생활의 케이스에서 사용하기 적합하지 않았기 때문이라고 생각하는데, 코틀린 코루틴은 이러한 단점을 보완하여 실생활에서 좀 더 사용하기 적합하게 만들어졌다. 또한 코루틴은 Multi-Platform 언어로 코루틴으로 작성하면 해당 Platform 에 맞는 형태로 코드가 변경된다. 어떻게 보면 RxJava 나 Reactor 를 모르더라도 Coroutine 으로 코드를 작성하기만 하면 되는 것이다. ..

Kotlin 2022.09.25

Spring MVC 에서 suspend 이용하기

어떻게 하면 Spring MVC 에서 suspend 를 Controller 에 쓸 수 있을까 고민해보다가. Spring 5.3 Version 부터 코루틴 지원 한다는 Reddit 의 글을 보고 팀에서 이용하는 코틀린 버전을 2.4.5 버전으로 업그레이드 했다. 그 결과 Controller 에서 suspend 를 지원할 수 있게 되었다. 과연 어떻게 동작하는 걸까 알아보도록 하자. Reactive Type (Mono, Flux) 의 Return 가능 일단 suspend 가 붙은 controller 메소드의 return Type 을 알맞게 Mono 또는 Flux 형태로 바꾸어준다. Spring 내에서 Handler 의 ReturnValue 의 Type 에 따라서 알맞은 Handler 가 처리하게 되어 있다...

카테고리 없음 2022.09.22

Comparator 와 Comparable

Java 에서 Collections API 를 통해서 List, Map, Set 등등 의 자료구조를 쉽게 사용할 수 있다. 종종 해당 Collections 에 있는 Data 를 정렬해야 할일이 있는데 어떻게 정렬되는지 한번 알아보도록 하자 Comparable Oracle 문서에 나와있는 정의는 아래와 같다. This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method. 간략하게 이야기 하면 객체의 자연적인 순서(숫자로 치면 1, 2, 3 ... 과 같은) 를 참조하여 정렬한다고 생각하면 될 것 같다. 더 나와 있..

Java 2022.09.21

Algorithm 을 왜 공부해야 할까?

"들어가기 앞서 이 글은 취준 / 면접시 알고리즘을 봐야 하나? 라는 토픽과는 전혀 무관하다. 난 단순히 엔지니어링 측면에서 알고리즘의 중요성에 대한 내 생각을 적어보려고 한다" 최근 알고리즘 문제 풀이에 재미를 느끼고 있는데 Leetcode 문제 풀이를 하던 중, 여러 배열의 문자들의 combination 을 어떻게 구성해야 할까? 라는 고민이 생겼다. 예를 들면 아래와 같은 상황이라고 가정해보자. 이 아티클에서 구현 Level 의 언어는 Python 을 이용하려고 한다. Kotlin 으로 구현해버리면, Kotlin 을 모르는 사람은 알기 힘든 경우도 종종 있어서, 내 생각에 psuedo code 에 비슷하게 구현가능 한 언어인 Python 을 선택했다. 위와 같은 상황에서 a 와 b 배열을 한단어씩 ..

Algorithm 2022.09.12

Coding Interview - 1

Coding Interview - 1 문제 정수 배열 a 와 b 가 주어졌을때, a 와 b 에서 각각 하나씩 집은 뒤 더해서 v 를 만들 수 있으면 true 를 리턴하고, 아니면 false 를 리턴해라 ## CASE1 a = [1, 2, 3] b = [10, 20, 30, 40] v = 42 ## CASE2 a = [0,0,-5,30212] b = [-10, 40, -3, -9] Solution (Brute-Force) fun solution(a: IntArray, b: IntArray, v: Int): Boolean { for (firstNum in a) { val meetsCondition = v - firstNum for (secondNum in b) { if (meetsCondition == se..

Algorithm 2022.08.30

브라우저를 눌렀을때 발생하는 일

브라우저를 눌렀을때 발생하는 일 현재 우리는 여러 Application(Google Chrome, FireFox 등등) 을 통해서, 웹 싸이트를 쉽고 간단하게 돌아다닐 수 있다. 우리가 주소창에 www.google.com 을 입력했을때, 과연 어떤 일이 일어나게 될까? 기저 기반의 지식 해당 Process 를 이해하기 위해서는 우리가 알고있으면 좋은 여러가지 OSI 7 Layer, IP, MAC Address 등등 알면 좋은 컴퓨터 과학 지식들이 존재한다. 일단 이를 먼져 공부하고 알아보자. MAC Address 우리의 전자기기 장치에는 MAC Address 라는 고유한 ID 가 부여되어 있다. 이러한 고유한 ID 를 부여한 이유는 무엇일까? OSI 7 Layer 의 Data Link Layer 에서는 ..

CS 2022.08.28

HashTable vs Binary Search Tree

HashTable vs Binary Search Tree Criteria Binary Search Tree HashTable Time Complexity(Insertion / Deletion / Searching) O(nlogN) O(1) Sorted Order 데이터가 삽입시 부터 정렬되어 있음. 중위 순회를 하면 정렬된 데이터가 나옴. 데이터가 랜덤한 형태로 저장되어 있음(해시값 이용). 만약 Sort 하려면 추출해서 Sort 해야함 Hash Function X O(1) 시간에 수행하기 위해서는 적절하게 키를 생성해내는 Hash Function 이 필요 Collsion X 충돌 발생시 Chaining 이나, Open Address 방법을 이용 Input Data Size 딱히 Input Size 를 ..

Algorithm 2022.08.27
728x90