개발/TIL

java record 알차게 사용하기

ebang 2025. 2. 25. 21:21

 

Java Record는 데이터를 담는 용도의 클래스를 간결하게 선언할 수 있도록 도와주는 Java의 기능이다.  

Java 14에서 preview로 도입되었으며, Java 16부터 정식으로 사용 가능하다.

Record를 사용하면 보일러플레이트 코드를 크게 줄일 수 있고, 불변(immutable) 데이터 모델을 쉽게 구현할 수 있다!

 

기본적으로 Record는 다음과 같은 특징을 가진다. 

  • 간결한 선언:
    필드(구성 요소)를 나열하는 것만으로 자동으로 생성자, 접근자(getter), equals(), hashCode(), toString() 메서드 등이 생성된다. 
    정말 강력한 장점!
  • 불변성:
    Record의 모든 필드는 암묵적으로 final이며, Record 객체는 생성 이후 변경할 수 없다. 
  • 명확한 목적:
    데이터의 단순 전달이나 캡슐화를 위한 “데이터 carrier”로 설계되어, 비즈니스 로직보다는 데이터를 담는 데 집중한다. 

 

예제는 다음과 같다.

 

public record Person(String name, int age) {
	
    public Person {
        if (age < 0) {
            throw new IllegalArgumentException("Age cannot be negative");
        }
    }
    
    public boolean isAdult() {
        return age >= 18;
    }    
}

public class Main {
    public static void main(String[] args) {

        Person person = new Person("Alice", 20);

        System.out.println("Name: " + person.name());
        System.out.println("Age: " + person.age());
        
        System.out.println("Is adult? " + person.isAdult());
    }
}

 

생성자를 정의할 필요는 없지만, 정의하면서 필요한 검증 로직을 추가할 수 있다. 

또한, record 필드에 접근하는 것은 그냥 .연산자를 이용해서 쉽게 접근할 수 있다. 

예제에는 없지만 내부에 static 변수와 static 함수를 선언하여 사용할 수도 있다. 

 

record 를 사용하면 jvm 이 효율적으로 최적화하기 때문에 성능상에도 도움이 된다. 

기본적으로 불변하는 필드를 갖고 있기 때문에, 멀티 쓰레드 환경에서 동기화를 신경쓰지 않아도 되는 장점이 있어서 더더욱 그렇다. (참고)

 

나의 경우 record 를 효과적으로 사용한 부분은 ExcelWriter 이다. 

작성한 코드 중 Excel을 template 에 맞게 필요한 데이터들을 입력하는 로직이 있는데

apache.poi 에서 제공하는 excel 시트 작성 라이브러리를 이용하는 클래스로 구현했었다. 

 

이때 기존 하드코딩된 코드에서, record 를 사용하여 각 필요한 데이터를 저장하는데 효과적으로 사용할 수 있었다. 

 

별도 annotation, getter나 setter 없이 다음과 같이 선언만 해둬도 

.values로 쉽게 데이터에 접근할 수 있는 장점, 그리고 어떤 데이터가 있는지 한눈에 확인할 수 있는 높은 가독성의 강점을 가져간다. 

public record CellData(String key, Map<String, Integer> values) {
}

 

 

 

 

좀 더 자세한 사용법을 보기 원한다면 medium 블로그를 참고해도 좋다. 

https://medium.com/@mak0024/a-comprehensive-guide-to-java-records-2e8edcbd9c75