728x90

분류 전체보기 173

TDD 로 알고리즘 풀이

TDD 테스트 주도 개발 (Test Driven Development) 로 기능에 대한 테스트를 먼져 작성한 뒤 테스트가 통과할 수 있는 코드를 작성하는 것을 뜻한다. 예전에는 이러한 방법이 단순히 더 느리다고만 생각했는데, 요즘 드는 생각은 TDD 로 하는 방법이 일반 방법보다 때로는 빠를때도 많다는 것이 내 의견이다. 사람들이 TDD 책을 읽지 않고 단순히 테스트 먼져 적으면 되는거 아니야? 라고 해서 TDD 를 시작하게 되면 당연하게도 TDD 가 느리네 라고 생각할 수 밖에 없다. 그래서 켄트백과 최범균님의 책을 읽고나서 내가 느낀 경험을 바탕으로 TDD 를 하는 방법을 적어보려고 한다. Know-how 일단 켄트백의 TDD 책을 읽어보면 테스트를 쉽게 할 수 있는 작은 기능을 찾는게 가장 중요하다..

Algorithm 2022.08.22

Coroutine DeepDive - 1

Coroutine Deep Dive - 1 Purpose 이 게시글은 일단 코루틴을 사용하는데 좀 더 이해도를 높이기 위해 작성된 글이다. 대부분의 내용은 코루틴 라이브러리를 보고 작성되었으니, 어느정도 신뢰하여도 좋다. What is Coroutine? 코루틴은 일시중단이 가능한 연산의 인스턴스 이다. 여기서 인스턴스라는 말이 중요한데, 일단 이해하지 말고, 왜 인스턴스라고 하지? 라는 고민을 가지고 이 글을 읽어줬으면 한다. 밑에서 다 설명할 것이다. 일시 중단 된 지점으로 부터 후에 다시 재 실행될 수 있으며, 이때 특정 Thread 에 Bound 되어 있는 것이 아닌, 일시중단을한 Thread 와 다른 Thread 가 와서 작업을 재개할 수도 있다. Coroutine use cases Corout..

Kotlin 2022.08.18

JVM GC 정리

Java GC 정리 서론 Lazily Initialization 이 왜 Memory 상에서 유리한지? 이론적으로 설명하기는 쉽지만 실제로 이를 Monitoring 하는 도구로 수치를 보여주고, 이를 설명하기 위해서는 GC 를 다시 재 정리 할 필요가 있다고 느꼈다. 그래서 GC 를 재 정리 하려고 한다. Garbage Collection 이란? 일단 Garbage Collector 에 대해 알기 전에 Garbage Collection 에 대해 조금 알아보자. Garbage Collection 이란 runtime 에 사용하지 않는 객체의 메모리를 회수해 오는 것을 뜻한다. 보통 C 와 같이 Memory 를 managing 하는 언어에서는 이를 free() 와 같은 키워드를 이용하여 회수한다. 따라서 C 언..

Java 2022.08.17

WebFlux 에서 ResponseBody 에 Mono, Flux 를 사용하는 이유

최근 Reactive Programming 에 조금씩 관심을 기울여서 보고 있는데 강의를 보다가 하나 궁금한점이 생겼다. 아래 코드를 보면 Flux, Mono Type 으로 Return 하거나 RequestBody 에서 부터 받아서 사용하는데 이게 도대체 무슨차이지? 라는 생각이 들었다. Kotlin Coroutine 이나 JavaScript 의 Promise Model 을 공부하면서 느낀건 결국 Reactive 세상에서 가장 중요한건 아래의 두가지라는 생각이 들었다. Thread 의 Blocking 을 최소화 하는 코드를 작성해라. Lazily 하게 값이 evaluate 되어야 한다. 위의 두가지가 제일 중요하기에 Fully Non-Blocking 이라고 불리는 Web-Flux 에서 Response 에..

Spring 2022.08.11

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
728x90