일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- preemption #
- 개성국밥
- 깡돼후
- pytest
- JanusWebRTC
- tolerated
- VARCHAR (1)
- 오블완
- mp4fpsmod
- 겨울 부산
- 코루틴 컨텍스트
- JanusWebRTCGateway
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- table not found
- 코루틴 빌더
- Value too long for column
- terminal
- python
- 티스토리챌린지
- Spring Batch
- 자원부족
- JanusWebRTCServer
- k8s #kubernetes #쿠버네티스
- PytestPluginManager
- JanusGateway
- vfr video
- 달인막창
- PersistenceContext
- taint
- kotlin
목록Programming Language (47)
너와 나의 스토리
JAVA 11로 websocket 통신 구현하기 1. Dependencies 추가 implementation group: 'javax.websocket', name: 'javax.websocket-api', version: '1.1' implementation group: 'org.glassfish.tyrus', name: 'tyrus-server', version: '1.1' implementation group: 'org.glassfish.tyrus', name: 'tyrus-client', version: '1.1' implementation group: 'org.glassfish.tyrus', name: 'tyrus-container-grizzly', version: '1.1' 2. Client ..
kotlinx.coroutines.CoroutineScope.async async는 사실상 launch와 같은 일을 한다. 유일한 차이는 launch가 Job을 반환하는 반면 async는 Deffered를 반환한다는 점뿐이다. 심지어 Deffered는 Job을 상속한 클래스이기 때문에 launch 대신 async를 사용해도 아무 문제 없다. async는 코드 블록을 비동기로 실행할 수 있다. async가 반환하는 Deffered의 await을 사용해서 코루틴이 결과 값을 내놓을 때까지 기다렸다가 결과값을 얻어낼 수 있다. Deffered vs Job Job 타입 파라미터가 없음 Deffered 타입 파라미터가 있는 제네릭 타입 Deffered 안에는 await() 함수가 정의되어 있다. Deffered의..
Kotlin 사이트에 나와있는 내용을 기반으로 번역 및 추가 내용을 정리하였습니다. Class Layout class의 내용은 다음 순서로 정의돼야 합니다. Property 선언과 initializer blocks Secondary constructors Method 선언 Companion Object class Layout() { // Property var name = "name" val age: Int // Initializer block init { age = 20 } // Secondary constructors constructor(_name: String) : this() { name = _name } // Companion object companion object { private con..
takeIf If문이랑 비슷한 역할이다. 조건에 해당되면 해당 값을, 조건에 맞지 않으면 null을 리턴한다. 리턴 값이 Boolean인 함수를 인자로 받는다. 예: input에 "hi" 문자열이 포함된 경우 input 리턴, 포함되지 않은 경우 null 리턴 input.takeIf { input.contains("hi") } takeUnless takeIf의 반대. 조건에 해당되면 null을 반환하고, 조건에 맞지 않으면 해당 값을 리턴. 리턴 값이 Boolean인 함수를 인자로 받는다. 예: input이 (null 또는 빈 칸)이 아닌 경우 input 리턴, (null 또는 빈 칸)인 경우 null 리턴 input.takeUnless { input.isNullOrBlank() }
꼬리 재귀 함수와 tailrec 설명 바로 가기 예제 1: 정수 리스트에 들어 있는 모든 원소의 합계를 구하는 함수 먼저 간단하게 구현하면 다음과 같다. fun sum(list: List): Int = if (list.isEmpty()) 0 else list[0] + sum(list.drop(1)) 코드는 간단하지만 빈 리스트를 만날 때까지 스택에 메모리가 계속 쌓이게 된다. 이 함수는 꼬리 재귀가 아니기 때문에 tailrec 키워드를 붙일 수 없고, 리스트 인자가 몇천 개 이상이면 이 함수를 사용할 수 없다. 이 함수를 꼬리 재귀 함수로 만들어보자. fun sum(list: List): Int { tailrec fun sum_(list: List, acc: Int): Int = if (list.isEm..
재귀 함수 값 사용하기 팩토리얼 함수를 구현한다고 해보자. 다음과 같이 재귀 함수를 정의하는 것은 쉽다. fun factorial(n: Int): Int { return if (n Int = { n -> if (n Int init { factorial = { n -> if (n Int by lazy {{ n:Int -> if (n
꼬리 호출 제거(TCE, Tail Call Elimination) 함수가 제일 마지막에 하는 일이 자기 자신을 호출하는 것이라면, 즉, 재귀 호출의 결과를 다른 연산에 사용하지 않고 즉시 반환한다면, 코틀린이 이 꼬리 호출을 제거한다는 뜻이다. 아래 예제를 보며 이해해보자. N을 입력으로 받아 1~N까지를 모두 더하는 함수를 만들어 보자. fun sum(n: Int): Int { fun sum(s: Int, i: Int): Int = if (i
1. 부수 효과 없애자 값을 반환하는 메서드나 함수가 외부 상태를 변경하는 경우 이를 부수 효과(side effect)라고 한다. 부수 효과를 사용하는 프로그램은 잘못된 것이다. 이런 부수 효과는 단일 책임 원칙(single responsibility principle)을 위배하는 좋지 못한 기법이다. 안전한 대안: 계산 때문에 일어나는 상태 변이와 프로그램의 나머지 부분을 분리하거나 계산하는 부분을 최대한 추상화하기 2. 참조 투명성 프로그램을 충분히 안전하고 결정적으로 만들려면 외부 세계로부터 영향을 받아서도 안 된다. 즉, 프로그램의 출력은 오직 그 인자에 의해서만 영향을 받아야 한다. 외부 세계의 상태를 변경하지도 않고 외부 상태에 의존하지도 않는 코드를 일컬어 참조 투명(referentially..