IT/프로그래밍

Builder 와 Record 비교

Collin 2026. 3. 29. 08:00
반응형

자바에서 객체를 생성하고 데이터를 다루는 방식은 크게 Builder 패턴과 **Record(레코드)**로 나뉩니다. 두 기능은 목적과 사용 사례가 다르기 때문에 상황에 맞춰 선택하는 것이 중요합니다.


1. Builder 패턴 (Lombok @Builder)

Builder 패턴은 복잡한 객체를 안전하고 편리하게 생성하기 위해 사용됩니다. 주로 계층이 있고 필드가 많은 클래스에 적합합니다.

특징

  • 가독성: 필드가 많을 때 어떤 값이 어떤 필드에 들어가는지 명확히 알 수 있습니다.
  • 선택적 매개변수: 모든 필드를 채울 필요 없이 필요한 값만 세팅할 수 있습니다.
  • 불변성 유지: 객체 생성 후 값을 바꿀 수 없도록(Setter 없음) 설계하기 좋습니다.

코드 예시

 

Java



@Builder
@Getter
public class User {
    private final String name;
    private final int age;
    private final String email;
}

// 사용 예시
User user = User.builder()
                .name("홍길동")
                .age(30)
                // email은 생략 가능
                .build();


2. Record (자바 14 이상)

Record는 **"순수하게 데이터 전달만을 위한 객체(DTO)"**를 위해 도입된 새로운 클래스 타입입니다.

특징

  • 간결함: 클래스 선언 한 줄로 Constructor, Getter, equals, hashCode, toString이 자동 생성됩니다.
  • 불변 객체: 모든 필드가 private final로 선언되며, 수정이 불가능합니다.
  • 상속 불가: 다른 클래스를 상속받을 수 없습니다. (인터페이스 구현은 가능)

코드 예시

 

Java



public record UserRecord(String name, int age, String email) {}

// 사용 예시
UserRecord user = new UserRecord("이순신", 40, "lee@test.com");
System.out.println(user.name()); // get이 아닌 필드명으로 호출


3. Builder vs Record 핵심 비교

구분 Builder 패턴 (Lombok) Record (Java Standard)
주요 목적 객체 생성의 편의성 및 가독성 데이터 전달용(DTO) 객체의 간결함
가변성 가변/불변 선택 가능 무조건 불변 (Immutable)
생성 방식 체이닝 방식 (.name().age()) 생성자 방식 (new Record(...))
코드 양 @Builder 등 어노테이션 필요 키워드 하나로 모든 메서드 자동 생성
필드 개수 필드가 많을수록 유리함 필드가 많으면 생성자 파라미터가 길어짐

4. 언제 무엇을 써야 할까요?

Builder를 써야 할 때

  • 생성자 파라미터가 5개 이상으로 많을 때
  • 객체 생성 시 필수 값과 선택 값이 나뉘어 있을 때
  • 이미 정의된 클래스(Entity 등)를 불변으로 만들고 싶을 때

Record를 써야 할 때

  • API 응답/요청을 위한 DTO를 만들 때
  • 단순히 데이터를 담아서 전달하는 목적일 때
  • 자바 표준 기능만 사용하여 코드를 간결하게 유지하고 싶을 때

💡 꿀팁: Record와 Builder 함께 쓰기

최근에는 Record에 @Builder를 붙여서 사용하는 방식이 가장 인기가 많습니다. Record의 간결함과 Builder의 생성 편의성을 모두 챙길 수 있기 때문입니다.

 

Java

@Builder
public record UserDto(String name, int age, String email) {}

// 사용 시
UserDto dto = UserDto.builder().name("김철수").build();

 

728x90
반응형