Lombok

Sia·2023년 11월 24일
0

build.gradle 파일 dependencies에 아래 의존성을 추가한다.

implementation 'org.projectlombok:lombok'

Lombok은 java의 라이브러리이며, getter, setter, toString 등의 여러가지 반복 메소드 작성 코드를 줄여줄 수 있는 코드 라이브러리 입니다.

Lombok 장점

Lombok의 장점으로는 어노테이션 기반의 코드 자동생성을 통해 생산성을 향상 시킬 수 있다.

getter, setter 반복 코드를 줄여 가독성과 유지보수를 향상 시킬 수 있다.

getter, setter 외에 빌더 패턴이나 로그생성 등 다방면으로 활용이 가능하다.

Lombok 단점

Lombok의 단점으로는 무분별하게 어노테이션을 사용하면, 순환 참조 또는 무한 재귀 호출로 인해 StackOverFlow 가 발생할 수 있다.

Lombok 어노테이션

  • @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);
      }

}  

0개의 댓글