-
Lombok 살펴보기언어/Java 2023. 8. 16. 09:48728x90반응형SMALL
현재의 자바 코딩에서 롬복은 필수적으로 사용되고 있습니다. 여러가지 필드 변수들을 통해 Getter, Setter를 구성하는 JPA 특성 상 꼭 필요한 라이브러리입니다. 그렇기 때문에 롬복에 대해 먼저 살펴보도록 하겠습니다.
lombok 의존성 추가
dependencies { compileOnly("org.projectlombok:lombok") annotationProcessor("org.projectlombok:lombok") }
@Getter, @Setter
Class User { private String name; private String email; private String phoneNumber; private LocalDateTime createdAt; }
위와 같이 외부에서 접근할 수 없는 변수의 경우 아래와 같이 필드 변수를 변경하거나 반환할 수 있는 함수를 만들어주어야 합니다.
public class User{ ... public String getName(){ return name; } public void setName(String name){ this.name=name; } public String getEmail(){ return email; } public void setEmail(String name){ this.email=email; } ... }
위와 같이
get
,set
메서드를 모드 선언해주는 것은 코드의 길이를 너무 길어지게 할 것입니다.물론 이를 단축키나, 클래스 내부에서 마우스 오른쪽 버튼을 통해 한 번에 작성가능하게 할 수 있습니다.
하지만, 롬복을 사용하면 좀 더 간단하게 표현할 수 있습니다.
@Getter @Setter public clas User{ private String name; private String email; private String phoneNumber; private LocalDateTime createdAt; }
위와 같이
@Getter
와@Setter
를 클래스 범위에서 사용하면 각 필드 변수의get
,set
메서드가 모두 선언된 것과 동일하게 사용가능합니다.public clas User{ @Getter @Setter private String name; private String email; private String phoneNumber; private LocalDateTime createdAt; }
위와 같이 필드 범위에서 사용하면 해당 필드의
get
,set
메서드만 선언된 것과 같은 효과를 냅니다.클래스 명 위에서 마우스 오른쪽 클릭 후 refactor>delombok>{어노테이션}을 선택하면 해당 롬복 어노테이션이 사라지고 해당 롬복을 코드로 선언했을 때처럼 코드를 수정하게 됩니다. 이는 실제 컴파일이 진행될 때 생성되는 코드입니다.
위와 같은 경우 필드 변수가 4개 밖에 없지만, JPA에서 사용하는 엔티티의 경우 컬럼들이 모두 필드로 표현되게 됩니다. 그렇기 때문에 컬럼의 숫자가 많을 경우 위와 같은 롬복이 굉장히 도움이 될 것입니다.
@Tostring
toString 메서드를 자동으로 오버라이딩 해서 생성해주는 롬복입니다.
자바의 모든 클래스는 Object 클래스를 상속받고 있기 때문에
toString
메서드를 오버라이딩해서 사용할 수 있습니다.@Getter @Setter public clas User{ private String name; private String email; private String phoneNumber; private LocalDateTime createdAt; @Override public String toString(){ return getClass().getName() + " : " + ", name = " + name; + ", email = " + email; + ", phoneNumber = " + phoneNumber; + ", createdAt = " + createAt; } }
위와 같이 구현을 할 경우 필드가 추가될 때마다 수동으로 toString 메서드를 수정해줘야 됩니다. 이를 방지하기 위해
@ToString
롬복을 사용합니다.@Getter @Setter @ToString public clas User{ private String name; private String email; private String phoneNumber; private LocalDateTime createdAt; }
위와 같이 선언해 준다면 해당 클래스의
toString
메서드를 자동으로 오버라이딩 해주고, 해당 내용은 모든 필드 변수를 확인할 수 있는 형식입니다.@NoArgsConstructor, @AllArgsConstructor, @RequiredArgsContructor
각 롬복의 이름만으로도 뜻을 어느정도 유추할 수 있습니다. 각각은 매개변수를 갖지 않는 생성자, 모든 매개변수를 가지는 생성자와 필수 멤버변수를 인자로 받는 생성자를 만들어주는 롬복입니다.
@Getter @Setter @ToString @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor public clas User{ @NonNull private String name; @NonNull private String email; private String phoneNumber; private LocalDateTime createdAt; } class UserTest { @Test void test(){ // NoArgsConstructor User user1 = new User(); user.setName("name"); user.setEmail("email"); //AllArgsConstructor User user2 = new User("name1","email1","phone number", LocalDateTime.now()); //RequiredArgsConstructor User user3 = new User("name2", "email2"); } }
멤버 변수위에
@NonNull
롬복이 있을 경우 필수 멤버 변수가 됩니다.@Data
롬복은@RequiredArgsConstructor
를 기본 제공합니다.JPA에서 기본 스펙 상 기본 생성자를 필요로 하기 때문에
@NoArgsConstructor
는 필수적입니다.@EqualsAndHashCode
JPA에서 사용할 일은 크게 없지만
@Data
어노테이션 상에서 구현되어 있고, 자바에서 객체의 동등성을 비교하기 위해서 equals 메서드와 hashcode 메서드를 오버라이딩 할 것을 권장하고 있기 때문에@EqualsAndHashcode
를 선언해줍니다.@Data
@Getter
,@Setter
,@RequiredArgsConstructor
,@ToString
,@EqualsAndHashCode
어노테이션을 모두 선언한 것과 동일한 효과를 줍니다.@Getter @Setter @ToString @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor @EqualsAndHashCode public clas User1{ @NonNull private String name; @NonNull private String email; private String phoneNumber; private LocalDateTime createdAt; } @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor @Data public clas User2{ @NonNull private String name; @NonNull private String email; private String phoneNumber; private LocalDateTime createdAt; }
위의 User1 클래스와 User2 클래스는 동일합니다.
@Data
에@RequiredArgsConstructor
어노테이션이 포함되어 있다고 했지만, 위의 User2에서@RequiredArgsConstructor
를 선언해준 이유는 다음과 같습니다.@Data
의 경우 이전에 명시적으로 작성된 생성자가 존재할 경우 새로운 생성자를 만들지 않습니다. 그렇기 때문에 위와 같은 경우 User2에@RequiredArgsConstructor
를 선언해주지 않으면 필수 멤버 변수를 포함한 생성자는 제공되지 않습니다. 그렇기 때문에 다른 생성자 관련 어노테이션이 선언되어 있다면, 필요할 경우@RequiredArgsConstructor
를 선언해주어야 합니다.@Builder
@AllArgsConstructor
와 마찮가지로 모든 필드값을 주입해 객체를 만들 수 있도록 합니다.User user = User.builder() .name("name") .email("email@gmail.com") .build();
빌더 형식으로 인스턴스를 만들 수 있습니다.
반응형LIST'언어 > Java' 카테고리의 다른 글
자바 Annotation (0) 2024.02.19 자바 데코레이터 패턴, 쓰레드, 멀티 쓰레드 프로그래밍 (2) 2023.07.16 자바 스트림, reduce, 예외 처리, logging (2) 2023.07.14 자바 내부 클래스, 람다식, 함수형 프로그래밍, 함수형 인터페이스 (2) 2023.07.13 자바 자료구조, 제네릭, 컬렉션 (0) 2023.07.11