스프링 부트 애플리케이션인 lombok과 자바 14에서 출시된 새로운 기능인 record 클래스, 두 가지를 비교해 봅시다.
이 둘의 차이점과 어떤 것을 사용하는 것이 더 나은지 논의하기 전에, record와 lombok에 대해 간단하게 알아보겠습니다.
Project Lombok
Lombok은 에디터와 빌드 도구에 자동으로 연결되어 자바 개발 속도를 높여주는 자바 라이브러리입니다. getter와 equals 메서드를 작성할 필요가 없습니다. 어노테이션 하나만 추가하면 완전한 기능을 추가할 수 있으니까요.
자바로 개발하면서 매번 클래스에 getter/setter를 선언하는 것은 매우 고통스러운 일이었습니다. 새로운 클래스가 생성될 때마다 모든 빈에 대해 동일한 단계를 추가하는 것은 나쁜 디자인일 겁니다. Lombok은 이 고통을 극복하기 위해 몇 가지 어노테이션과 사용하기 쉬운 솔루션을 제공합니다.
//very basic Bean class example
@Data//this annotation doing every thing behiend the screen.
public class Identification {
private String idType;
private String idNumber;
}
@Data를 추가하기만 하면, @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor 를 모두 생성합니다.
Record Classes in JAVA14
Recrod는 자바 14에서 보일러플레이트 코드를 제거하기 위해 새롭게 추가된 클래스입니다.
*보일러플레이트 코드(boilerplate code): 여러 곳에서 반복되어 나타나는 필수적인 코드
Record 클래스는 클래스를 단순한 데이터 전달자로 사용하고 싶을 때 권장되는 방법입니다.
public record Employee(Long id, String firstName, String lastName, String email, int age) {
//you can have other methods as well along with record and even constructor logic also you can define with the help of record class
}
//Calling would be like this
Employee e = new Employee(1l, "vivek", "Kadiyan", "vivekabc@gmail.com", 32);
System.out.println( e.id() ); //1
System.out.println( e.email() ); //vivekabc@gmail.com
System.out.println( e );
Record는 기본적으로 불변이며, 이는 모든 필드가 생성자를 통해 할당되어야 함을 의미합니다.
빌더 패턴
빌더 패턴은 객체를 만들 때 좋은 선택입니다. Lombok은 @Builder 어노테이션으로 쉽게 만들 수 있어 빌더 패턴을 지원합니다. Record는 그런 것들을 제공하지 않습니다.
@Builder//just mark this with builder annotation and all bilorplate is done by Lombok
public class Identification {
private String idType;
private String idNumber;
}
빈 컨벤션
getX(...) setX(...)와 같은 메서드를 자주 사용하시죠? Record를 사용하면 더 이상 getter/setter 보일러 플레이트 코드를 생성하지 않아도 됩니다. 반면 Lombok을 사용하면 @Getter/@Setter 어노테이션을 추가한 후 getter/setter 메서드를 사용할 수 있습니다.
Employee e = new Employee(1l, "vivek", "Kadiyan", "vivekabc@gmail.com", 32);
System.out.println( e.id() ); //1
System.out.println( e.email() ); //vivekabc@gmail.com
System.out.println( e )
상속
현재 Record 클래스는 직접 상속을 지원하지 않지만 Lombok은 어노테이션의 도움을 받아 수행할 수 있습니다.
//Inherietance with the help of Lombok
@Data
class FourWheeler{
private String engineType;
}
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
class Car extends FourWheeler{
private Integer carCapicity;
private String carModel;
}
결론
Record는 보일러 플레이트 코드를 원하지 않고 더 깨끗한 코드를 만들고 싶을 때 좋은 선택이 될 수 있습니다.
하지만 빌더와 같은 더 많은 옵션을 사용하고 싶다면 Lombok이 승자입니다.
'레퍼런스' 카테고리의 다른 글
[Medium] 시스템 디자인 인터뷰의 골든룰 (0) | 2024.03.13 |
---|---|
[Medium] 클린 코드: Null 반환을 피하는 법 (0) | 2024.03.11 |
[Medium] 2024년 자바 개발자 면접 가이드 (2) (0) | 2024.03.04 |
[Medium] 2024년 자바 개발자 면접 가이드 (1) (0) | 2024.02.28 |
[컨퍼런스] 클린 아키텍처 애매한 부분 정해 드립니다 - 클린 아키텍처와 헥사고날 (4) | 2023.12.06 |