Lombok Annotation
목차
0. Lombok 이란?
1. 접근자/설정자 자동 생성 - @Getter/@Setter
2. 생성자 자동 생성 - @NoArgsConstructor/@AllArgsConstructor / @RequiredArgsConstructor
3. ToString 메소드 자동 생성 - @ToString
4. equals, hashCode 자동생성 - @EqualsAndHashCode
5. @Data
들어가기에 앞서..
강의를 통해 spring을 접하는게 아니라 단기간에 빠르게 코드를 이해해야하는 상황이 왔다.
spring 새내기 필자는 일단 spring boot에서 java 코드가 아닌 자바 어노테이션(@)을 이해하는 부분부터 알아야겠다는 생각을 했다.
해당 프로젝트의 Dependencies로 lombok을 썼다. 그래서 lombok이란 무엇인가?
0. Lombok 이란?
- Lombok은 Java의 라이브러리로, 반복되는 메소드를 Annotation을 사용해서 자동으로 작성해주는 라이브버리 (반복적인 개발을 줄일 수 있는 여러 기능을 제공함.)
- 보통 DTO나 Model, Entity의 경우 여러 속성이 존재하고 이들이 가지는 프로퍼티에 대해서 Getter나 Setter, 생성자 등을 매번 작성해줘야하는 경우가 있다. Lombok은 이러한 부분을 자동으로 만들어주는 라이브러리이다.
- Lombok을 이용해서 작성한 코드는 컴파일 과정에서 Annotation을 이용해서 코드를 생성하고 .class에 자동 컴파일된다.
1. 접근자/설정자 자동 생성 - @Getter/@Setter
xxx
라는 필드에 선언하면 자동으로getXxx()
(boolean 타입인 경우,isXxx()
)와setXxx()
메소드를 생성해준다.
@Getter
@Setter
private String name;
- 특정 필드에 어노테이션을 붙여주면, 다음과 같이 자동으로 생성된 접근자와 설정자 메소드를 사용할 수 있어 매우 편리하다.
user.setName("홍길동");
String userName = user.getName();
- 또한, 필드 레벨이 아닌 클래스 레벨에
@Getter
또는@Setter
를 선언해줄 경우, 모든 필드에 접근자와 설정자가 자동으로 생성된다.
2. 생성자 자동 생성 - @NoArgsConstructor / @AllArgsConstructor / @RequiredArgsConstructor
- Lombok을 사용하면 생성자도 자동으로 생성 가능하다.
- @NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성
- @AllArgsConstructor 어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 생성
- @RequiredArgsConstructor 어노테이션은 final이나 @NonNull 인 필드 값만 파라미터로 받는 생성자를 생성
@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
@NonNull
private String username;
@NonNull
private String password;
private int[] scores;
}
User user1 = new User(); // @NoArgsConstructor
User user2 = new User("dale", "1234"); // @RequiredArgsConstructor
User user3 = new User(1L, "dale", "1234", null); //@AllArgsConstructor
3. ToString 메소드 자동 생성 - @ToString
- @ToString 어노테이션은 toString() 메소드를 자동으로 생성
- exclude 속성을 사용하면, 특정 필드를 toString() 결과에서 제외시킬 수도 있다.
@ToString(exclude = "password")
public class User {
private Long id;
private String username;
private String password;
private int[] scores;
}
- 내부적으로 구현되는 모습
User user = new User();
user.setId(1L);
user.setUsername("dalle");
user.setScores(new int[]{80, 70, 100});
System.out.println(user);
// User(id=1, username=1234, scores=[80, 70, 100])
- 클래스명(필드1명=필드1값,필드2명=필드2값,...) 식으로 출력된다.
- 위의 코드에서 @ToString(exclude = "password") 어노테이션을 사용했기 때문에 toString() 메서드의 결과에서 password 필드가 포함되지 않습니다. 나머지 필드들은 id, username, scores에 대한 정보를 포함한 문자열로 출력됩니다. 이를 통해 객체의 정보를 간편하게 출력할 수 있습니다.
4. equals, hashCode 자동생성 - @EqualsAndHashCode
- 자바 빈을 만들 때 equals와 hashCode 메소드를 자주 오버라이딩하는데 @EqualsAndHashCode 어노테이션을 사용하면 자동으로 메소드를 생성
@EqualsAndHashCode(callSuper = true)
public class User extends Domain {
private String username;
private String password;
}
- callSuper 속성을 통해 equals와 hashCode 메소드 자동 생성 시 부모 클래스의 필드까지 감안할지 안 할지에 대해서 설정할 수 있습니다.
- 즉, callSuper = true로 설정하면 부모 클래스 필드 값들도 동일한지 체크하며, callSuper = false로 설정(기본값)하면 자신 클래스의 필드 값들만 고려합니다.
User user1 = new User();
user1.setId(1L);
user1.setUsername("user");
user1.setPassword("pass");
User user2 = new User();
user1.setId(2L); // 부모 클래스의 필드가 다름
user2.setUsername("user");
user2.setPassword("pass");
user1.equals(user2);
// callSuper = true 이면 false, callSuper = false 이면 true
5. @Data
- @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정해주는 매우 유용한 어노테이션
- @Data 어노테이션을 붙여주면,
- 모든 필드를 대상으로 접근자와 설정자가 자동으로 생성되고,
- final 또는 @NonNull 필드 값을 파라미터로 바든 생성자가 만들어지며,
- toString, equals, hashCode 메소드가 자동으로 만들어진다.
@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode //를 한꺼번에 설정해주는 어노테이션 @Data public class User { // ... }
결론:
lombok은 보일러플레이트 코드와 같은 반복적으로 작성되어야하는 코드들을
Annotation을 이용해서 자동 완성해주는 라이브러리로, 컴파일 시점에 Annotation을 이용해 코드가 생성된다.
보통 DTO와 model에서 사용함. (lombok을 공부하고, 사용함으로써 spring boot에서의 쓰임 위치를 알게 되었다.)
- @Getter: 접근자 자동 생성
- @Setter: 설정자 자동 생성
- @NoArgsConstructor: 파라미터가 없는 기본 생성자 생성 / @NoArgsConstructor 접근 권한을 최소화 하자
- @AllArgsConstructor: 모든 필드 값을 파라미터로 받는 생성자 생성
- @RequiredArgsConstructor: final이나 @NonNull인 필드값만 파라미터로 받는 생성자 생성
- @ToString: toString() 메소드 자동 생성
- @EqualsAndHashCode: equals, hashCode 자동 생성
- @Data: @Getter + @Setter + @RequiredArgsConstructor + @ToString + @EqualsAndHashCode / @Data는 지양하자
Reference)
lombok의 각각 어노테이션 설명 참고: https://www.daleseo.com/lombok-popular-annotations/
More)
실무에서 lombok 사용법 (@Data는 지양하자, @NoArgsConstructor 접근 권한을 최소화 하자, Builder 사용시 매개변수를 최소화 하자): https://cheese10yun.github.io/lombok/
'Development > Java' 카테고리의 다른 글
[Java] String을 int로 변환하는 법/int를 String으로 변환하는 법 (0) | 2022.07.27 |
---|---|
[JAVA] next(), nextLine() 의 차이 (0) | 2022.07.26 |
[Java] 문자열을 char형 배열로 바꿔주는 toCharArray() (0) | 2022.07.20 |
[Java] 문자열 및 문자를 대문자, 소문자로 변환하기 (0) | 2022.07.20 |
[Java] Scanner를 통해 자바 한 문자만 입력받기(char형 데이터) (0) | 2022.07.20 |