Spring/Lombok

@Data

JWonK 2022. 5. 3. 10:49
728x90
반응형

@Data

@Data 어노테이션은 @Getter / @Setter, @ToString, @EqualAndHashCode와 @RequiredArgsConstructor를 모두 다 합쳐놓은 큰 범주의 세트라고 할 수 있다. 

 

POJO(Plain Olde Java Objects)와 bean과 관련된 모든 보일러플레이트(boilerplate = 재사용 가능한 코드)를 생성한다.

class의 모든 필드에 대한 getter, setter, toString, equals와 같은 함수들 말이다.

// Lombok annotation 사용

@Data
public class Member {
    private String name;
    private double score;
}


// Lombok annotation 미사용
public class Member2 {

    private String name;
    private double score;

    public Member2(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Member2{" +
                "name='" + name + '\'' +
                ", score=" + score +
                '}';
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Member2 member2 = (Member2) o;
        return Double.compare(member2.score, score) == 0 && Objects.equals(name, member2.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, score);
    }
}

 

 

@Data 어노테이션은 callSuper, includeFieldName, exclude와 같은 파라미터와 같이 사용될 수 없으므로, 해당 파라미터 사용이 필요할 때는 개별 어노테이션을 따로 명시해주어야한다.

@Getter
@Setter
@ToString(includeFieldNames=true)
@EqualsAndHashCode
@RequiredArgsConstructor
public class Ex{
	private String name;
    private double score;
}
728x90
반응형