
1. 자바 스레드의 여러 가지 상태들[ 여러 종류의 스레드 상태들(Thread State) ]자바 공식 문서(자바 23 기준)에 따르면 다음과 같은 자바 스레드 상태가 존재한다.NEW스레드가 생성되었으나 아직 시작되지 않은 상태아직 OS 스레드는 아직 존재하지 않으며, Thread.start()를 호출해야 OS가 실제로 스레드를 생성하도록 신호를 보냄RUNNABLE스레드가 실행 가능하여 운영 체제의 자원(예: 프로세서)을 기다리고 있거나 JVM 내에서 실행중인 상태운영체제의 스케줄러가 각 스레드에 CPU 시간을 할당하여 실행하므로, Runnable 상태의 스레드는 스케줄러의 실행 대기열에 포함되어 있다가 차례로 CPU에서 실행됨BLOCKED스레드가 모니터 락(동기화 락)을 기다리며 블록된 상태이 상태의 ..
아래는 자바 언어 아키텍트인 Brian Goetz의 “Background: how we got the generics we have (Or, how I learned to stop worrying and love erasure)” 포스팅을 재구성하여 작성한 것입니다. 해당 포스팅은 현재의 제네릭에 도달하게 된 과정과 그 이유에 초점을 맞추고, 현재 제네릭이 우리가 구축하려는 "더 나은" 제네릭에 어떤 영향을 미칠지에 대한 토대를 마련하기 위해 작성되었습니다. 특히 2004년 Java에 제네릭을 추가하기 위해 소거가 실제로 합리적이고 실용적인 선택이었음을 강조하며, 소거로의 전환을 선택하게 한 많은 강요들이 지금도 여전히 작동하고 있을 수 있음을 강조하고자 합니다. 1. 오늘날의 제네릭이 되기까지 제..

1. H2 데이터베이스에서 @Transactional(readOnly=true)일때 save를 호출하는 경우[ H2 데이터베이스에서 @Transactional(readOnly=true)일때 save를 호출하는 경우 ]다음과 같이 트랜잭션을 시작하고 데이터를 저장하는 로직이 있다고 하자. 그런데 실수로 @Transactional을 readOnly로 설정하고 작업했다면 어떻게 동작할까?@RestControllerclass SystemController( private val memberRepository: MemberRepository,) { @GetMapping("/member") @Transactional(readOnly = true) fun health() { memb..
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분 걸리지만, 이를 ..