- 나는 스프링에서 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를 만든다.