Inline Functions

high-order function 을 쓰는것은 런타임에 부담을 부과할수 있다. 각각의 함수가 오브젝트이고 이것을 클로저로 캡쳐했을때 런타임에 부담을 줄수 있는 상황인 것이다. 예를들어 함수의 본체에서 접근하는 변수들이 있다고 가정해보자. 함수 object 과 클래스 모두에 대한 메모리 할당과 가상 콜은 런타임 오버해드를 야기할있다. 하지만 인라인 람다 익스프레션을 사용하면 대부분의 오버해드의 경우가 없어질수있다! (예이이!!) lock 함수는 call-sites로 인라인화 될수있다.(the […]

First-class function ? : Higher-order function

Higher-Order Functions and Lambdas Kotlin functions are first-class, which means that they can be stored in variables and data structures, passed as arguments to and returned from other higher-order functions. You can operate with functions in any way that is possible for other non-function values. To facilitate this, Kotlin, as a statically typed programming language, uses a […]

Test

assertEquals(a,b) : 객체 a와b의 값이 같은지 확인 assertTrue(a) : a가 참인지 확인 assertThat(“reason”,a,b): a 가 되어야하는데 b인지를 확인assertSame(a,b) : 객체 a와b가 같은 객체임을 확인 assertNotSame(a,b) : 객체 a와b가 같은 객체임을 확인 assertNotNull(a) : a객체가 null이 아님을 확인 assertArrayEquals(a,b) : 배열 a와b가 일치함을 확인  assertTrue public static void assertTrue(java.lang.String message, boolean condition) Asserts that a condition is true. If it isn’t it throws […]

Kotlin 101 – Basic Features – runblocking[ENG/KOR]

runblocking 을 알려면 사실 kotlin의 coroutine 도 알아야한다. coroutine이 기초가 된후 그 위에 runblocking 구문이 있기때문. runblocking 구문을 왜 사용하는가? runblocking구문을 통해서 새로운 coroutine 블럭을 실행하고 이 구문이 실행되고 끝날때까지 현재 쓰레드(런 블러킹을 실행한 쓰레드) 는 홀드되는 것이다.이 구문은 일반적인 blocking 코드를 주요한 기능에서 일시적으로 사용할수 있도록 라이브러리로 구현된것인데, 예를들면 메인 함수나 테스트 함수에서 잠시! […]

json 을 이야기하는거 같은데 contract 이라고?

업무중에 동료들이 아무리 생각해봐도 json 형식에 대해서 이야기하는것 같은데 contract 라는 단어를 써가면서 대화를 하고있었다. 일단 눈칫밥, 통밥으로 대화를 마무리하고 업무시간 이후에 사부님께 물었다. “혹시 json 을 contract 이라고 말하기도 하나요?”“음.. 서비스 간에 통신할때 계약관계라는 말을 쓰는데 거기서 나오는 contract 인가?내가 지난번에 이야기할때 계약관계라고 말해준적이 있는데 혹시 기억하나?”“아니요..” “contract driven development 에서 나오는 contract 일꺼야.” […]

docker compose

여러개의 컨테이너를 실행해야하는 서비스를 가지고있는 서비스프로바이더들은 복잡한 설정을 피하기위해서 도커 컴포즈를 쓴다. 특정 네임스페이스 설정해서 그 네임스페이스의 config yaml 파일들을 읽으면서 컨테이너 환경을 바라보게 할수 있다. 우리회사는 1개 서비스만 프로세스로 디버깅 하고 local 컨피그가 바라보는 계약관계의 서비스는 데브 퓨전인데 이건 우리회사는 개발자가 로컬 풀셋을 가져가는게 현실적으로 어렵도(도메인이 수십개) 때문에, 로컬 서비스 1개를 개발해서, 로컬환경은 나머지는 […]

minikube

내가 받은 프로젝트에 RUNNING_ENV 가 세가지가있었다. local, nonprod, production.기존에 하던 프로젝트는 로컬로 돌리면 소스단까지 바로 접근이가능했고, dev 환경과 production 과 동일한 환경인 staging(sandbox 라고 생각하면된다), 그리고 production 이 있었기때문에, nonprod환경은 dev 환경이고, local은 말그대로 로컬 렙탑에서 돌리면 되는것이라고 생각했었는데, 이해가 안되는 부분이 있었다. 우리회사는 dev 환경 온프로미스 클라우드가 있다. (온프레미스(On-premise) – 소프트웨어 등 솔루션을 클라우드 […]

docker – overview

내가 간과하고있었던 부분. dockerfile 이 거기에 왜 있어야하는지 몰랐음.yaml 파일이 어디에 쓰이는지도 몰랐음.minikube, 쿠버네틱스 환경에 대해서 잘 알지 못했음.(사실 궁금해도 안함.ㅋㅋㅋㅋ) 하나씩 의식의 흐름대로 찬찬히… 미니큐브 : 로컬 쿠버네티스 클러스터를 만들어서 사용하는것.여기서 모르는거 : 클러스터 ? 뭐 어쩌라고 클러스터야.로컬 쿠버네티스 : 운영이랑 동일한 환경을 셋팅하려고 하는건가? 한번 검색해보니 바로 도커 오케스트레이션 내용이 나옴. 도커 오케스트레이션도커 […]

Kotlin 101 – Basic Features – Polymorphism:abstract class /inteface[ENG/KOR]

abstract class 하면 다형성을 생각하게되고 처음에 abstract class 와 interface 와 혼란이 많이와서 이참에 정리를 하려고한다. 다형성(polymorphism) 다형성의 철학은 세가지가 기본이된다.– 클래스 상속 계층구조– 메소드 오버라이딩(재정의). 이를 통한 동적 바인딩– 업캐스팅 후 재정이된 메소드 호출 이를 기반으로 나온것이 abstract class 와 interface 이다 Abstract classes 일부 클래스와 그 내부의 클래스는 abstract(A class and some of […]