최근에 Spring Boot 스터디를 하면서 Lombok에서 주로 활용되는 어노테이션들에 대해 보고 듣고 하여 정리합니다.
저는 @Getter와 @Setter 밖에 알고 있지 못했지만....
접근자와 설정자
@Getter와 @Setter 입니다. 이 어노테이션을 쓰면 접근자와 설정자를 생성할 수 있습니다.
클래스 상단에 써줘서 모든 변수에 적용해 줄수 있고, 특정 변수에만 정의할 수 도 있습니다.
1 2 3 4 5 6 7 | @Getter @Setter public class Product { Long productId; String productName; } | cs |
만약 @Getter, @Setter을 안쓴다면 아래와 같이 다 정의해줘야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Product { Long productId; String productName; public Long getProductId() { return productId; } public void setProductId(Long productId) { this.productId = productId; } public String getProductName() { return productName; } public void setProductName(String productName) { this.productName = productName; } } | cs |
1 2 3 4 5 6 7 | @ToString public class Product { Long productId; String productName; } | cs |
1 2 3 4 | @Override public String toString() { return "Product [productId=" + productId + ", productName=" + productName + "]"; } | cs |
1 2 3 4 5 6 | @ToString(exclude ="productId") public class Product { Long productId; String productName; } | cs |
생성자
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
생성자를 생성해주는 어노테이션은 3가지가 있습니다. 어노테이션명을 볼수 있듯이 @NoArgsConstructor는 파라미터 값이 없는 빈 생성자를 생성해줍니다.
@AllArgsConstructor는 모든 파라미터를 받는 생성자를 만들어줍니다.
@RequiredArgsConstructor는 final이나 @NonNull이 붙은 변수들을 가진 생성자를 생성해줍니다. 때문에 변수 정의에 final이나 @NonNull이 없을 경우 @RequiredArgsConstructor을 사용한다면 오류가 납니다.
1 2 3 4 5 6 7 8 9 10 11 | @NoArgsConstructor @AllArgsConstructor @RequiredArgsConstructor public class Product { Long productId; @NonNull String productName; } | cs |
equals, hashCode 메소드 생성
Product의 인스턴스를 2개이상 생성한다고 가정했을때,
가지고 있는 데이터가 같더라도 인스턴스의 hashCode 값을 비교한다면 서로 다른값 false를 뱉어냅니다.
즉 같은 값을 가진 Product라도 인스턴스 p1, p2를 선언하면 서로 다르게 인식하는데, 이를 막기 위해 equals, hashCode 메소드 생성하여 사용합니다.
이를 대신하는 것이 @EqualsAndHashCode입니다.
1 2 3 4 5 | @EqualsAndHashCode public class Product { Long productId; String productName; } | cs |
@EqualsAndHashCode 또한 exclude 옵션을 주면 해당 변수 값은 다르더라도 같은 객체라고 인식하게됩니다.
1 2 3 4 5 6 | @EqualsAndHashCode(exclude ="productName") public class Product { Long productId; String productName; } | cs |
@Data
@Data는 위에서 설명드린 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정해주는 어노테이션입니다. 옵션 값이 없다면 @Data를 사용하시면 될 것 같습니다.
1 2 3 4 5 6 | @Data public class Product { Long productId; String productName; } | cs |
이외에도 어노테이션이 더 많이 존재하지만,, 우선 제가 학습하고 알고 있는 내용에 대해 작성했습니다.
학습 후 추가할 수 있는 기회가 있으면 좋겠네요.
'IT > Java' 카테고리의 다른 글
JAVA 제네릭(Generic) 이해하기 (0) | 2021.04.06 |
---|---|
JVM의 이해 (0) | 2021.04.05 |
String, StringBuffer, StringBuilder 특징 및 차이점 (0) | 2020.03.24 |
Word Cloud를 위한 한국어 처리기 open-korean-text (with. Maven) (0) | 2018.10.23 |
Servlet 이란 (0) | 2018.04.11 |
댓글