SpringBoot
Lombok @Accessors 기능
심나라
2022. 12. 4. 14:51
728x90
1. @Accessors(chain=true)
@Setter를 이용해서 객체를 생성할 때 아래와 같이 여러 줄로 set Method를 생성해야 하는 단점이 있습니다.
public class MemberService() {
String memberId = "test";
String memberPw = "1111";
.....
LocalDateTime createdDate = LocalDateTime().now();
LocalDateTime modifiedDate = LocalDateTime().now();
Member mem = new Member();
mem.setMemberId(memberId);
mem.setMemberPw(memberPw);
.....
mem.setModifiedDate(modifiedDate);
}
이러한 단점을 보완하기 위해서 @Accessors(chain=true)를 사용합니다.
Member 클래스에 @Accessors(chain=true) 애노테이션을 추가 합니다.
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Accessors(chain=true)
public class Member {
private String memberId;
private String memberPw;
.....
private LocalDateTime createdDate;
private LocalDateTime modifiedDate;
}
@Accessors(chain=true) 애노테이션을 추가 후 아래와 같이 Setter를 이용할 수 있습니다.
public class MemberService {
String memberId = "test";
String memberPw = "1111";
.....
LocalDateTime createdDate = LocalDateTime.now();
LocalDateTime modifiedDate = LocalDateTime.now();
Member mem = new Member() //chaining
.setMemberId(memberId)
.setMemberPw(memberPw)
.....
setModifiedDate(modifiedDate);
}
@Accessors(chain=true) 장점
- set Method를 여러줄로 생성할 필요 없이 Chain형태로 연속해서 set Method를 생성할 수 있습니다.
2. @Accessors(fluent = true)
get, set 같은 기본 prefix의 사용 여부를 설정해 줄 수 있습니다. 아래의 코드 처럼 @Accessors 어노테이션의 fluent 값을 true로 설정해 주면, get 이나 set 같은 prefix가 붙지 않은 getter, setter 메서드를 생성해 줍니다.
@Getter
@Setter
public class Member {
private String memberId;
private String memberPw;
@Accessors(fluent = true)
private boolean active;
}
public class MemberService {
Member mem = new Member();
member.active(true); // member.setActive(true)와 같이 사용하지 않음.
boolean active = member.active(); // member.getActive()와 같이 사용하지 않음.
}
장.단점
- 위의 코드 처럼 getter 메서드가 get prefix 없이 active()로 생성 되어 가독성이 좋고 편리함니다.
- setter 메서드에도 set prefix가 붙지 않기 때문에 setActive()로 사용하고 싶은 경우에는 사용하지 않는 것이 좋습니다.
728x90