반응형
Lombok은 annotation Processor를 이용해 자동으로 코드를 만들어 줍니다.
예를 들면 @setter ,@getter를 사용하면
public void setMemberId(){} 와같은 코드를 작성하지 않아도 됩니다.
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.List;
@Entity
public class Restaurant {
@Id
@GeneratedValue
private Long id;
private String name;
private String address;
@Transient
private List<MenuItem> menuItems = new ArrayList<>();
public Restaurant() {
}
public Restaurant(String name, String address) {
this.name = name;
this.address = address;
}
public Restaurant(Long id, String name, String address) {
this.name = name;
this.address = address;
this.id = id;
}
public void setId(long id) {
this.id = id;
}
public Long getId() {
return id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return this.address;
}
public String getInformation(){
return name + " in " + address;
}
public List<MenuItem> getMenuItems(){
return menuItems;
}
public void addMenuItem(MenuItem menuItem) {
this.menuItems.add(menuItem);
}
public void setMenuItems(List<MenuItem> menuItems) {
for(MenuItem menuItem : menuItems){
addMenuItem(menuItem);
}
}
public void updateInformation(String name, String address) {
this.name = name;
this.address = address;
}
}
여기서 단순히 정보를 얻어온다거나 설정한다는 코드를 전부 간단하게 Lombok을 이용해 보겠습니다.
그전에 라이브러리를 확인해야합니다.
다음과 같이 Lombok을 다운로드하여줍니다.
이제 Restaurant의 모든 getter를 삭제하겠습니다.
그다음 test를 진행해보죠
package kr.co.fastcampus.eatgo.domain;
import lombok.Getter;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
public class Restaurant {
@Id
@GeneratedValue
private Long id;
private String name;
private String address;
@Transient
private List<MenuItem> menuItems = new ArrayList<>();
public Restaurant() {
}
public Restaurant(String name, String address) {
this.name = name;
this.address = address;
}
public Restaurant(Long id, String name, String address) {
this.name = name;
this.address = address;
this.id = id;
}
public void setId(long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public String getInformation(){
return name + " in " + address;
}
public void addMenuItem(MenuItem menuItem) {
this.menuItems.add(menuItem);
}
public void setMenuItems(List<MenuItem> menuItems) {
for(MenuItem menuItem : menuItems){
addMenuItem(menuItem);
}
}
public void updateInformation(String name, String address) {
this.name = name;
this.address = address;
}
}
다음과 같이 getter가 존재하지 않아도 test가 성공적으로 진행된 것을 확인할 수 있다.
해당 클래스의 @Getter을 이용하면 모든 멤버 변수의 getter를 생성해준다.!!
만약 해당 멤버 변수에만 붙여주게 되면 멤버 변수의 getter만 생성해준다.
@NoArgsConstructor를 사용하면 비어있는 생성자까지 만들어 준다.
@AllArgsConstructor를 이용 모든 args가 존재하는 생성자를 만들어 준다.
이제 builder패턴을 이용해보자 좀 더 깔끔한 방식으로 객체를 생성할 수 있다.
// Restaurant restaurant = new Restaurant(1004L,"Bob zip", "Seoul");
Restaurant restaurant = Restaurant.builder()
.id(1004L)
.name("Bob zip")
.address("Seoul")
.build();
코드 읽기와 유지보수가 편리해진다는 장점이 존재합니다.
이러한 Lombok은 코드량을 줄여주는 장점을 가지고 있지만 의도치 않은 객체의 getter setter로 인해 접근을 허용할 수 도 있기에 어느 순간에 적절하게 사용해야 합니다.
반응형
'Spring|Spring-boot' 카테고리의 다른 글
회원가입을 위한 Spring security (0) | 2020.08.09 |
---|---|
Gradle 멀티 모듈 (0) | 2020.08.06 |
[Spring] Interceptor , ArgumentResolver (0) | 2020.07.20 |
[Spring] Spring security (0) | 2020.07.20 |
[Spring] Spring MVC Session (0) | 2020.07.20 |
댓글