1. JVM의 init 메서드, 객체의 초기화를 위한 인스턴스 초기화 메서드(instance initialization method)[ 인스턴스 초기화 메서드 (instance initialization method) ]JVM은 객체 인스턴스를 초기화 할 때 init이라는 고유한 메서드를 활용한다. 예를 들어 다음과 같이 Object 객체를 생성하는 코드가 있다고 하자.Object obj = new Object(); 해당 코드를 컴파일하고 javap -c 명령어로 바이트 코드를 살펴보면 다음과 같음을 확인할 수 있다.0: new #2 // class java/lang/Object3: dup4: invokespecial #1 // Method java/lang/Obje..

이직을 하게 되면서, 기존에 자바만 사용하다가 처음으로 코틀린을 사용하게 되었다. 코틀린으로 작성된 코드를 읽는데, 지나치게 kotlin-specific 한 문법들이나 인지 부하를 초래하는 코드들로 인해 코드가 전혀 읽히지 않았다. 그래서 코틀린 공식 문서를 포함하여 책 3권 및 코틀린 관련 많은 영상들을 참고하여, 코틀린을 입문할 때 알면 좋은 내용들을 정리하였다. 1. 자바 개발자가 코틀린을 입문할 때 알면 좋은 내용들 모음[ 코틀린 공통 ]코틀린의 설계 목적컴퓨터가 인식할 수 있는 코드는 바보라도 작성할 수 있지만, 인간이 이해할 수 있는 코드는 실력 있는 프로그래머만 작성할 수 있다.- 마틴 파울러(Martin Fowler), 리팩터링 -“개발자가 코드를 작성하는 데는 1분 걸리지만, 이를 ..
1. Jackson ObjectMapper의 성능을 높여줄 Blackbird 모듈[ Blackbird 모듈이란? ]기존에 Jackson 라이브러리의 성능 향상을 위해 Jackson Afterburner 모듈이 사용되고 있었다. 하지만 Afterburner 모듈은 끔찍한 바이트코드 조작을 사용하고 있었고, 곧 지원이 중단되는 Unsafe.defineClass 를 사용하고 있었다. 즉, 최신 JVM(JVM 11+)와의 호환성이나 쓰기 접근 제한 등을 고려하여 노후화 징후를 보이고 있었던 것이다.따라서 이를 대체하기 위한 새로운 모듈이 등장하게 되었다. Jackson 2.1.2 릴리스(2020년 12월)와 함께 등장한 Blackbird 모듈은 뛰어난 성능 뿐만 아니라 새로운 구조(ex LambdaMetafac..

아래의 내용은 해외의 다음 포스팅을 변역 및 정리한 내용입니다. 1. 리플렉션(Reflection)을 포함한 다양한 코드 접근 방식들의 성능 [ 코드 접근 방식의 성능 요구사항 ] 우리는 특정 클래스를 요청/응답에 사용하거나 혹은 ORM에 사용하는 등의 많은 경우에 직렬화/역직렬화 과정을 거쳐야 하며, 이를 위해 특정 클래스의 Getter에 접근해야 할 때가 있다. 제네릭 혹은 Object 등을 사용하면 컴파일 타입이 존재하지 않으므로 어떤 클래스에 대한 직렬화/역직렬화를 하는지 모르는데, 이때 특정 클래스에서 Getter를 읽는 가장 빠른 방법은 무엇일까?예를 들어 다음과 같은 Person 클래스가 있다고 하자.public class Person { ... public String get..

1. 공식문서로 Kotest에 대해 알아보기 [ Kotest란? ] 코틀린에서 사용 가능한 언어의 특징을 이용함으로써, Kotest는 더욱 강력하지만 간단한 테스트 정의 방법을 제공한다. KoTest에서 테스트는 테스트 로직을 담고 있는 단순한 함수일 뿐이며, 이제 자바 파일에 테스트를 메서드로 정의하는 시대는 끝난 것이다. Kotest에서 테스트 메서드는 번거롭게 수동으로 정의하는 것이 아니라 Kotest의 DSL을 사용해서 정의한다. class MyFirstTestClass : FunSpec({ test("my first test") { 1 + 2 shouldBe 3 } }) 테스트를 중첩시키는 것 역시 간결해졌다. JUnit에서 테스트를 중첩시키려면 다음의 번거로운 작업이 필요했다. class Ne..