일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Stress test
- cloud native java
- 마이크로서비스
- Adapter 패턴
- MySQL
- ansible
- CRD
- Kotlin
- cloud native
- MSA
- Spring
- java
- Algorithm
- spring microservice
- 자바
- ingress
- Microservice
- 쿠버네티스
- 코틀린
- kubernetes
- devops
- 클라우드 네이티브
- 클라우드 네이티브 자바
- 헬름
- Semaphore
- 동기화
- nGrinder
- 익명클래스
- 머신러닝
- decorator 패턴
- Today
- Total
목록Kotlin (11)
카샤의 만개시기
채널은 넌블로킹 전송 개념으로 SendChannel과 ReceiveChannel 인터페이스를 이용해 값들의 스트림을 전송하는 방법을 제공합니다. fun main() = runBlocking { val channel = Channel() launch { // 여기에 다량의 CPU 연산작업이나 비동기 로직을 둘 수 있다. for (x in 1..5) channel.send(x * x) } // 5개의 값을 채널로부터 받는다 repeat(5) { println(channel.receive()) } println("Done!") launch { for (x in 1..5) channel.send(x * x) channel.close() // 모두 보내고 닫기 명시 } // for 루프를 사용해 끝까지 읽기 fo..
프로그램에서 태스크를 수행할 때 운영체제를 사용할 수 있게 하고 특정한 작업에 작업 시간을 할당하는 것을 선점한다라고 합니다. 선점형 멀티태스킹(Preemptive Multitasking)은 운영체제가 강제로 태스크의 실행을 바꾸는 개념이고 협력형 멀티태스킹은 태스크들이 자발적으로 양보하며 실행을 바꿀 수 있는 개념입니다. 코루틴은 이러한 협력형 멀티태스킹을 이용하여 동시성 프로그래밍을 지원하는데, 해당 루틴을 일시 중단(Suspended)하는 방식으로 Context-Switching을 없애고, 최적화된 비동기 함수를 통해 비선점형으로 작동하기 때문에 복잡한 넌블로킹 코드를 간결하게 해주며 더 나은 성능을 지원합니다. launch와 async 코루틴에서 사용되는 함수는 suspend()로 선언된 지연 함..
시퀀스는 순차적인 컬렉션으로 요소의 크기를 특정하지 않고, 나중에 결정할 수 있는 컬렉션이다. 예를 들어 특정 파일을 줄 단위로 읽어서 마지막 라인 수를 모를때 사용할 수 있다. 따라서 시퀀스는 처리 중에는 계산하고 있지 않다가 toList()나 count()와 같은 최종 연산에 의해 결정 된다. generateSequence()로 생성 fun main() { // 시드값 1을 시작으로 1씩 증가하는 시퀀스 정의 val nums: Sequence = generateSequence(1) { it + 1 } // take()를 사용해 원하는 요소 개수만큼 획득하고 toList()를 사용해 List 컬렉션으로 반환 println(nums.take(10).toList()) }위 코드에서 take(10)을 했을때..
DSL(Domain-Specific Language)은 특정 주제에 특화된 언어를 의미하며, 데이터베이스에 접근하기 위한 SQL이 대표적인 DSL이다. 이 밖에도 화면 레이아웃을 단순화한 DSL이나 웹 접근을 단순화한 DSL 등의 많은 프레임워크가 만들어져 있다. 코틀린에서는 고차함수와 람다식의 특징을 이용하여 읽기 좋고 간략한 코드를 만들수 있다. 우리가 목표로 할 DSL 코드는 다음과 같다 data class Person( var name: String? = null, var age: Int? = null, var job: Job? = null) data class Job( var category: String? = null, var position: String? = null, var extensi..
takeIf 함수 람다식이 true이면 결과값을 반환. public inline fun T.takeIf(predicate: (T) -> Boolean): T? = if (predicate(this)) this else nulltakeUnless 함수 람다식이 false이면 결과값을 반환. public inline fun T.takeIf(predicate: (T) -> Boolean): T? = if (!predicate(this)) this else null예제 val user = "KaSha" val str = "Sha" var index = 0 index = user.indexOf(str).takeIf { it >= 0 } ?: -1 index = user.indexOf(str).takeUnless ..
코틀린의 스코프 함수는 다음 5가지 함수를 제공하며 기본적으로 매우 비슷하다. apply, with, let, also, run 추가적으로 use 함수도 제공한다. 스코프 함수는 receiver와 code block을 받아 제공된 코드 블럭을 제공된 수신자에서 실행한다. 자바의 함수형 인터페이스(Funtional Interface)와 비슷하다고 보면 된다. 함수 이름 람다식의 접근 방법 반환 방법 let it block 결과 also it T caller (it) apply this T caller (this) run this block 결과 with this block 결과 let 함수 public inline fun T.let(block: (T) -> R): R { ... return block(th..
코틀린의 object 키워드를 이용하여 다음 내용들을 해결합니다. 싱글톤 정의 동반 객체(companion object)를 이용한 팩토리 메서드 구현 익명클래스 선언 싱글톤 자바에서의 싱글톤 public class Test { private static Test obj; private Test() {} static Test getInstance() { if(obj == null) obj = new Test(); return obj; } }코틀린에서의 싱글톤 object Test { }코틀린에서 object 클래스는 선언과 동시에 객체가 자동으로 생성되고 개발자가 생성 할 수 없으므로 싱글톤 개념이 적용된 클래스입니다. 객체에서 comparator를 여러개 구현할 필요가 없을 경우 싱글톤으로 하나만 만들어..
Sealed클래스는 enum 클래스를 확장한 개념을 가진 클래스로써, 제한된 집합의 유형 중 하나를 가질 수 있지만 다른 유형은 가질 수 없는 제한된 계층 구조를 나타낼때 사용합니다. Enum 상수는 단일 인스턴스로 존재하는 반면, Sealed 클래스의 서브 클래스는 포함 할 수 있는 여러 인스턴스를 가질 수 있습니다. 일반 클래스와의 차이 Sealed를 이용하지 않아도 일반 클래스 내에 서브 클래스를 선언할 수 있고, 준비된 서브 클래스 중 하나를 대입하게 하여 프로그래밍 할 수 있습니다. 하지만 일반 클래스는 그 클래스 자체가 객체 생성이 가능하지만 sealed 클래스는 기본으로 abstract를 내장하고 있으므로 객체 생성이 불가능합니다. sealed class Shape { class Circle..