-
[Spring boot] Lombok에 대해 알아보자spring boot 2024. 2. 12. 22:55
설명
Lombok은 반복되는 메소드를 Annotation을 사용하여 대체해주는 라이브러리이다.
예: @Getter, @Setter, @NoArgConstructor, @AllArgConstructor .....
1. @Getter, @Setter
@Getter 와 @Setter는 일일이 get, set 메서드를 쓸 필요없이 대체한다
@Getter @Setter public class User { private int age; }
User user = new User(); user.getAge(); user.setAge(10);
2. @NoArgConstructor, @AllArgConstructor, @RequiredConstructor
@NoArgConstructor는 파라미터가 없는 생성자를 생성한다
@NoArgsConstructor public class User { @NonNull private String name; @NonNull private int age; private String email; }
User user = new User();
@AllArgConstructor는 모든 필드값을 파라미터로 갖는 생성자를 생성한다
@AllArgsConstructor public class User { @NonNull private String name; @NonNull private int age; private String email; }
User user1 = new User("홍길동", 30, "a@gmail.com");
@RequiredConstructor는 final 혹은 @NonNull인 필드값을 파라미터로 갖는 생성자를 생성한다
@RequiredArgsConstructor public class User { @NonNull private String name; @NonNull private int age; private String email; }
User user2 = new User("홍길동", 30);
3. @ToString
@toString 메소드를 자동으로 생성
@ToString public class User { @NonNull private String name; @NonNull private int age; private String email; }
User user1 = new User("홍길동", 30, "a@gmail.com"); System.out.println(user1.toString()); // User(name=홍길동, age=30, email=a@gmail.com)
exclude를 사용하여 특정 필드를 제외 시키는 것도 가능하다
@ToString(exclude = "email") public class User { @NonNull private String name; @NonNull private int age; private String email; }
User user1 = new User("홍길동", 30, "a@gmail.com"); System.out.println(user1.toString()); // User(name=홍길동, age=30)
4. @EqualsAndHashCode
@EqualsAndHashCode 어노테이션을 사용하지 않았을 때)
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor public class User { @NonNull private String name; @NonNull private int age; private String email; }
User user1 = new User("홍길동", 20, "a@gamil.com"); User user2 = new User("홍길동", 20, "a@gamil.com"); System.out.println(user1.equals(user2)); // false System.out.println(user1); // com.example.dto.User@6108b2d7 System.out.println(user2); // com.example.dto.User@1554909b
@EqualsAndHashCode 어노테이션을 사용 했을 때)
@Getter @Setter @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor @EqualsAndHashCode public class User { @NonNull private String name; @NonNull private int age; private String email; }
User user1 = new User("홍길동", 20, "a@gamil.com"); User user2 = new User("홍길동", 20, "a@gamil.com"); System.out.println(user1.equals(user2)); // true System.out.println(user1); // com.example.dto.User@7e8ce0fb System.out.println(user2); // com.example.dto.User@7e8ce0fb
@EqualsAndHashCode가 없을 땐, equals 메서드를 사용하면 비교하면 두 객체 자체가 같은지 비교한다.
- user1의 주소는 "com.example.dto.User@6108b2d7" 이고 user2의 주소는 "com.example.dto.User@1554909b" 이므로 결과가 false로 나온다.
@EqualsAndHashCode가 있을 땐, equals 메서드를 사용하면 비교하면 두 객체의 내용이 같은지 비교한다.
- user1의 내용과 user2의 내용이 같으므로 결과가 true로 나온다.
이 경우에 주소 값은 왜 같게 나오지? 라고 생각 할 수 있을 것이다. 이 주소를 hashcode라고 하는데, hashcode의 규약은 이러하다.
1) equals() 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashcode()는 항상 같은 값을 반환해야한다.
2) equals()로 비교했을 때 같다고 판단했다면, 두 객체의 hashCode는 같은 값을 반환해야 한다.
3) equals()가 두 객체를 다르다고 판단한 경우 꼭 hashCode가 다를 필요는 없다. 다른 값을 반환하는 게 좋다.
이에 따라 hashcode값이 같게 나오는 것이다.
5. @Data
이 어노테이션을 사용하면 @Getter, @Setter, @RequiredArgConstructor, @ToString, @EqualsAndHashCode를 한번에 추가해준다.
출처
[Spring boot] Lombok - Annotation 자동 작성 라이브러리, 언제 쓰이고, 어떻게 쓰이는가
Lombok Annotation 목차 0. Lombok 이란? 1. 접근자/설정자 자동 생성 - @Getter/@Setter 2. 생성자 자동 생성 - @NoArgsConstructor/@AllArgsConstructor / @RequiredArgsConstructor 3. ToString 메소드 자동 생성 - @ToString 4. equals, hash
bo5mi.tistory.com
https://effortguy.tistory.com/168
[Java] equals(), hashCode(), toString() 재정의 이유와 방법 (2)
이번 포스팅에선 hashCode(), toString() 재정의 이유와 방법에 대해 알아보겠습니다. equals()에 대해 궁금하신 분은 이전 포스팅을 참고바랍니다. [Java] equals() (+ == 와 차이점), hashcode(), toString() 재정의
effortguy.tistory.com
'spring boot' 카테고리의 다른 글
[Spring boot] RestTemplate에 대해 알아보자 (0) 2024.02.17 [Spring boot] JPA 적용하기, MySQL (0) 2024.02.14 [Spring boot] Logback에 대해서 알아보자. (0) 2024.02.12 [spring boot] 에러 핸들링 @ExceptionHandler @ControllerAdvice (0) 2024.01.25 [Spring Boot] ResponseEntity란? (0) 2024.01.24