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