
이번에는 순수 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의 지연 시간이 길어질 것이기 때문이다. 그렇기 때문에 첫 번재 방법은 수치를 조절해가고 테스트하며 자신의 애플리케이션에 맞는 최적의 설정을 찾는 ..

1. 다양한 Garbage Collection(가비지 컬렉션) 알고리즘JVM이 메모리를 자동으로 관리해주는 것은 개발자의 입장에서 상당한 메리트이다. 하지만 문제는 GC를 수행하기 위해 Stop The World에 의해 애플리케이션이 중지되는 것에 있다. Heap의 사이즈가 커지면서 애플리케이션의 지연(Suspend) 현상이 두드러지게 되었고, 이를 막기 위해 다양한 Garbage Collection(가비지 컬렉션) 알고리즘을 지원하고 있다. [ Serial GC ]Serial GC의 Young 영역은 앞서 설명한 알고리즘(Mark Sweep)대로 수행된다. 하지만 Old 영역에서는 Mark Sweep Compact 알고리즘이 사용되는데, 기존의 Mark Sweep에 Compact라는 작업이 추가되었..