1. 체크 예외(Check Exception)와 언체크 예외/런타임 예외 (Uncheck Exception, Runtime Exception)의 차이 [ 예외(Exception)의 종류 ] 에러(Error) 예외(Exception) 체크 예외(Check Exception) 언체크 예외(Uncheck Exception) 에러(Error) java.lang.Error 클래스의 하위 클래스들이다. Error는 메모리가 부족하는 등과 같이 시스템이 비정상적인 상황인 경우에 사용한다. 주로 JVM에서 발생시키기 때문에 애플리케이션 코드에서 잡아서는 안되며, 잡아서 대응할 수 있는 방법도 없다. 따라서 시스템 레벨에서 특별한 작업을 하는게 아니라면 이러한 에러 처리는 하지 않아도 된다. 예외(Exception) j..
이번에는 순수 Java 기반의 애플리케이션에 대해 테스트 코드를 작성해보고자 합니다. 1. Java 단위 테스트(Unit Test) 작성 준비 [ 필요한 라이브러리 ] 요즘 Java 단위테스트 작성에는 크게 2가지 라이브러리가 사용된다. JUnit5: 자바 단위 테스트를 위한 테스팅 프레임워크 AssertJ: 자바 테스트를 돕기 위해 다양한 문법을 지원하는 라이브러리 JUnit 만으로도 단위 테스트를 충분히 작성할 수 있다. 하지만 JUnit에서 제공하는 assertEquals()와 같은 메소드는 AssertJ가 주는 메소드에 비해 가독성이 떨어진다. 그렇기 때문에 순수 Java 애플리케이션에서 단위 테스트를 위해 JUnit5와 AssertJ 조합이 많이 사용된다. [ given/when/then 패턴 ..
클린코드를 읽어도, 이펙티브 자바를 읽어도, 개발을 잘하는 팀의 얘기를 들어도 항상 좋은 코드를 얘기할 때면 불변의 객체를 필연적으로 접하게 되는 것 같습니다. 그래서 이번에는 불변의 객체를 사용해야 하는 이유에 대해서 알아고자 합니다. 1. 불변 객체(Immutable Object) 및 final을 사용해야 하는 이유 [ 불변 객체(Immutable Object)란? ] 불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. 불변 객체는 read-only 메소드만을 제공하며, 객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다. Java의 대표적인 불변 객체로는 String이 있다. String name = "Old"; name.to..
코드를 작성하다보니 동일한 어노테이션을 여러 클래스에 반복적으로 작성해야 하는 상황이 발생하였다. 이러한 작업이 상당히 번거롭게 느껴졌고, 이러한 반복 작업을 줄이고자 커스텀 어노테이션을 만들어 적용하게 되었는데, 이에 대해 자세히 알아보도록 하자. 1. 다양한 Java 어노테이션 [ 어노테이션의 종류 ] 어노테이션을 직접 개발하기 위해서는 Java에서 제공하는 어노테이션에 대해 먼저 알아야 한다. Java의 어노테이션은 크게 built-in 어노테이션(Built-in Annotation)과 Meta 어노테이션(Meta Annotation)이 존재한다. built-in 어노테이션 Java 코드에 적용되는 어노테이션 @Overrie, @Deprecated, @SuppressWarnings 등이 존재 met..
1. Garbage Collection(가비지 컬렉션)의 성능을 높이는 코딩 방법 애플리케이션의 성능은 가비지 컬렉션의 빈도수와 지연 시간에 직접적인 영향을 받기 때문에, 가비지 컬렉션을 최적화하는 것은 상당히 중요하다. 그리고 이를 위해서는 크게 2가지 방법이 있다. Young 영역과 Old 영역의 힙 크기를 알맞게 조정하는 것 객체의 할당(Allocation)이나 Old 영역으로의 이동(Promotion) 등의 작업을 줄이는 것이다. 우선 힙의 크기를 조정하는 방법은 Trade-Off가 있다. 힙의 크기를 줄이면 GC의 빈도수가 많아질 것이고, 늘리면 GC의 지연 시간이 길어질 것이기 때문이다. 그렇기 때문에 첫 번재 방법은 수치를 조절해가고 테스트하며 자신의 애플리케이션에 맞는 최적의 설정을 찾는 ..