본문 바로가기

카테고리 없음

lombok setter Chaining

- 나는 스프링에서 lombok을 사용한다.

- lombok에는 성능 이슈가 있었었었다는 걸 인터넷에서 읽었지만 지금은 괜찮다는 얘기도 있고, 너무 편해서 그냥 쓴다.

- Accessor annotation 은 아직 stable이 아닌 experimental 인게 조금 찝찝하다.


여기서 좀 불변했던게 chaining 부분 예를 들어


db에서 id가 1인 객체를 찾아 나이를 21로 고치고 저장하는 코드를 짜보면


Person person = repository.findById(1);

person.setAge(21);

repository.save(person);

또는


repository.save(

repository.findById(1).map(person -> {

person.setAge(21);

return person;

}

);

(Person은 @Data 가 붙은 field는 int age, id 가 있다고 보면 됨)


여기서 코드가 길어지는 것은 Person.setAge() 의 return type이 void 라서.....





lombok을 찾아보면 @Accessors 가 있다.


https://projectlombok.org/features/experimental/Accessors

※ 아직 @Accessor 는 아직 experimental..


@Accessor(fluent = true)

=> set, get 없이 프로퍼티 이름으로 쓸수 있게 해준다.

=> setter에서 this를 return  한다


적용하여 위 코드를 다시 짜보면


repository.save(repository.findById(1).age(21));


or


repository.save(repository.findById(1).map(person -> person.age(21));


// Person person = repository.findById(21);

// person.setAge(21);

// repository.save(person);


@Accessor(chain = true)

=> setter 에서 this를 return 한다


repository.save(repository.findById(1).setAge(21));


or


repository.save(repository.findById(1).map(person -> person.setAge(21));


// Person person = repository.findById(21);

// person.setAge(21);

// repository.save(person);


@Accessor(prefix)

=> property에서 prefix 부분을 제거 하고 setter, getter를 만든다.