본문 바로가기
IT/Java

Lombok 어노테이션 설명

by eddie_factory 2018. 12. 6.
반응형

최근에 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



toString 메소드 생성

@ToString 어노테이션을 클래스 상단에 써주면 변수 값들을 리턴해주는 toString 메소드를 자동생성해줍니다.
1
2
3
4
5
6
7
@ToString
public class Product {
    Long productId;
    String productName;
 
}
 
cs

기존엔 아래와 같이 toSring 메소드를 오버라이드 해서 사용했습니다. 
1
2
3
4
    @Override
    public String toString() {
        return "Product [productId=" + productId + ", productName=" + productName + "]";
    }
cs


@ToStirng 어노테이션에 exclude 옵션을 주면  toString시에 exclude된 정보는 나오지 않습니다.
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



이외에도 어노테이션이 더 많이 존재하지만,, 우선 제가 학습하고 알고 있는 내용에 대해 작성했습니다.

학습 후 추가할 수 있는 기회가 있으면 좋겠네요.

반응형

댓글