코틀린은 간결하면서도 안전한 코드 작성을 돕기 위해 다양한 기능을 제공한다. 그 중 하나로, `runCatching` 함수가 있다. `runCatching`은 코드 블록에서 발생할 수 있는 예외를 효과적으로 처리할 수 있도록 도와주는 고차 함수로, 자바의 `try-catch` 문을 보다 함수형 스타일로 대체할 수 있다.runCatching 기본 구조val result = runCatching { // 예외가 발생할 수 있는 코드}`runCatching`은 `Result` 타입을 반환하며, 이 타입은 성공(Success)과 실패(Failure) 상태를 모두 포괄한다.이를 통해 예외가 발생하면 다양한 후처리 메서드를 활용해 로직을 깔끔하게 구성할 수 있다.runCatching vs try-catch전..
안녕하세요 ! 오늘은 Java에서 제공하는 강력한 기능 중 하나인 리플렉션에 대해서 알아보겠습니다.예제에 쓰인 모든 코드는 깃허브 에서 확인하실 수 있습니다. 리플렉션이란?리플렉션이란, 런타임에 클래스와 인터페이스 등을 검사하고 조작할 수 있는 기능입니다. 리플렉션을 이해하기위해서 먼저 JVM의 동작 방식에 대해 살펴볼 필요가 있습니다.1. Java 컴파일러(javac)가 소스코드를 바이트 코드(.class)로 변환합니다.2. 컴파일된 바이트 코드를 클래스 로더에게 전달합니다.3. 클래스 로더는 동적 로딩을 통해 필요한 클래스들을 링크하여 런타임 데이터 영역에 올립니다. 여기서 Method Area의 클래스 정보들을 조작할 수 있는 기능이 바로 리플렉션입니다. 어떻게 Method Area에 접근하는가?..
java로 개발을 하다보면 비동기로 성능을 높여야 하는 경우가 생깁니다. 저 또한 이런 경우가 많았는데요, 이럴 때 Java에서 제공하는 CompletableFuture를 이용하면 쉽게 해결할 수 있습니다. CompletableFuture에 관하여 검색을 해보니, 박우빈님이 작성하신 CompletableFuture 톺아보기 가 가장 정리가 잘 되어 있어서 한번 따라해보고, 해당 글을 기반으로 저 또한 정리를 해두고자 합니다! CompletableFuture란?CompletableFuture는 Java에서 비동기 프로그래밍을 지원하는 강력한 클래스입니다. Java 8부터 도입되었으며, 사용하기에 따라서 Async-Blocking, Async-Non-Blocking 하게 사용할 수 있습니다.Completa..
IntroSpring으로 개발한 웹 애플리케이션을 운영하다 보면, 메모리 누수가 발생하거나 많은 트래픽이 몰리는 현상 또는 구현 상의 버그로 인해 Heap의 사용량이 순간적으로 크게 증가할 수 있습니다.이 경우 GC가 과도하게 일어나면서 애플리케이션의 성능을 저해할 수 있고, 심한 경우에는 OOM(Out Of Memory) 에러가 발생하여 애플리케이션이 다운될 수 있습니다.해당 에러가 발생하면 코드 상으로 어떠한 객체가 원인인지 찾아내기 상당히 어렵기 때문에, 해당 글에서는 OOM이 발생한 시점 Dump를 떠서 분석해보는 것을 목표로 합니다. OutOfMemoryError 발생시키기먼저, OutOfMemoryError(OOM)을 발생시키는 API를 하나 만들어줍니다.@Data@Builderpublic c..
Garbage Collection(GC) 이란?프로그램을 개발 하다 보면 더이상 쓰이지 않는(참조되지 않는) 메모리인 Garbage가 발생하게 됩니다.C언어에서는 free()라는 함수를 통하여 개발자가 직접 메모리를 해제해주어야 하지만, Java나 Kotlin 에서는 Garbage Collector가 알아서 불필요한 메모리를 정리해주기 때문에 개발자의 실수로 memory leak이 발생하는 일을 막아줍니다.그런데 GC는 어떻게 알아서 똑똑하게 불필요한 메모리를 판단하여 정리하고, 또 언제 정리를 할까요?이를 알기 위해선 먼저 Java의 컴파일 과정과, JVM 메모리구조, GC의 여러가지 방식들에 대하여 살펴볼 필요가 있습니다.Java 컴파일 과정 자바 프로그램을 실행하면, JVM은 OS로부터 메모리를 할..