build.gradle 파일 dependencies에 아래 의존성을 추가한다.
implementation 'org.projectlombok:lombok'
Lombok은 java의 라이브러리이며, getter, setter, toString 등의 여러가지 반복 메소드 작성 코드를 줄여줄 수 있는 코드 라이브러리 입니다.
Lombok의 장점으로는 어노테이션 기반의 코드 자동생성을 통해 생산성을 향상 시킬 수 있다.
getter, setter 반복 코드를 줄여 가독성과 유지보수를 향상 시킬 수 있다.
getter, setter 외에 빌더 패턴이나 로그생성 등 다방면으로 활용이 가능하다.
Lombok의 단점으로는 무분별하게 어노테이션을 사용하면, 순환 참조 또는 무한 재귀 호출로 인해 StackOverFlow 가 발생할 수 있다.
- @NoArgsConstructor : (거희 Entity에 사용함)
1. 파라미터가 없는 기본 생성자 자동 생성
2. 주로 @Entity 어노테이션이 붙어있는 클래스에서 사용@NoArgsConstructor public class RestApiEntity { private String name; private String email; private String password; // 위 파라미터 없는 기본생성자를 생성하지 않아도 된다. public RestApiEntity() {} }
- @AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자 자동 생성
@AllArgsConstructor public class RestApiEntity { private String name; private String email; private String password; // 위 모든 필드 값을 받은 생성자를 생성하지 않아도 된다. public RestApiEntity(String name, String email, String password) { this.name = name; this.email = email; this.password = password; } }
- @RequiredArgsConstructor : final이나 @NonNull 인 필드 값만 파라미터로 받는 생성자를 만들어 준다.
@RestController @RequiredArgsConstructor public class RestApiController { private final RestApiService restApiService; // final 값의 생성자를 만들어주지 않아도 된다. public RestApiController(RestApiService restApiService) { this.restApiService = restApiService; }
- @EqualsAndHashCode : Equals와HashCode 메소드를 만들어준다.
@EqualsAndHashCode public class RestApiEntity { private String name; private String email; private String password; // 위 모든 필드 값의 equals를 생성하지 않아도 된다. @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; RestApiEntity restApi = (RestApiEntity) o; return numId == restApi.numId && Objects.equals(name, restApi.name) && Objects.equals(email, restApi.email) && Objects.equals(password, restApi.password) && Objects.equals(confirm_password, restApi.confirm_password); } // 위 모든 필드 값의 hashCode를 생성하지 않아도 된다. @Override public int hashCode() { return Objects.hash(numId, name, email, password, confirm_password); } }
- @Data : @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 가
자동으로 적용 된다.@Data public class RestApiEntity { private String name; private String email; private String password; // 위 모든 필드 값을 받은 생성자를 생성하지 않아도 된다. public RestApiEntity(String name, String email, String password) { this.name = name; this.email = email; this.password = password; } // 위 모든 필드 값의 Getter,Setter를 생성하지 않아도 된다. public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } // 위 모든 필드 값의 equals를 생성하지 않아도 된다. @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; RestApiEntity restApi = (RestApiEntity) o; return numId == restApi.numId && Objects.equals(name, restApi.name) && Objects.equals(email, restApi.email) && Objects.equals(password, restApi.password) && Objects.equals(confirm_password, restApi.confirm_password); } // 위 모든 필드 값의 hashCode를 생성하지 않아도 된다. @Override public int hashCode() { return Objects.hash(numId, name, email, password, confirm_password); } }