Java

[Java] Lombok

예은파파 2020. 10. 20. 15:13

 

Lombok(롬복) 이란?

- Java에서 Model Object를 만들때, 멤버필드(프로퍼티)에 대해 Getter/Setter, toString과 멤버필드에 주입하는 생성자를 만드는 코드 등 불필요하게 반복적으로 만드는 코드를 어노테이션을 통해 줄여주는 라이브러리 프로젝트이다.

 

  1. 생성자 자동 생성
     
    • @NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성해준다
    • @AllArgsConstructor 어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 생성해준다
    • @RequiredArgsConstructor 어노테이션은 final 이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 생성해준다.

  2. ToString 메소드 자동 생성

    • @ToString 어노테이션만 클래스에 붙여주면 자동으로 생성.
    • exclude 속성을 사용하면, 특정 필드를 toString() 결과에서 제외시킬 수 있다.

       

  3. Builder Pattern 자동 생성

    • 모델 객체를 생성할 때 Builder를 자동으로 추가해주는 어노테이션이다.
    • 1.1.16 버전 이상 사용시 @Builder.Default라는 어노테이션을 사용하여 기본값을 적용 할 수 있다.

  4. @Data

    • @Data는 위에서 설명한 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EnableAndHashCodef를 한꺼번에 설정해주는 가장 많이 사용되는 어노테이션이다.
    • 클래스 레벨에서 @Data 어노테이션을 붙여주면 모든 필드를 대상으로 접근자와 생성자가 자동으로 생성되고, final 또는 @NonNull 필드 값을 파라미터로 받는 생성자가 만들어지며, toString, equals, hashCode 메소드가 자동으로 만들어 진다.

 

@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
public class User {

  private Long id;
  @NonNull
  private String username;
  @NonNull
  private String password;
  private int[] scores;
}

 

User user1 = new User();
User user2 = new User("dale", "1234");
User user3 = new User(1L, "dale", "1234", null);

 

import lombok.*;

// @Data로 사용 가능
@Getter
@Setter
@ToString
@EqualsAndHashCode
@Builder
public class LombokModel {

	private @NonNull String name;
	private @NonNull String age;
	private @NonNull String address;
}

 

public class MainClass {

	public static void main( Stirng[] args ) {
    
    	LombokModel lombokModel = new LombokModelBuilder()
		.name("Park")
		.address("seoul")
		.age("34")
	.build();
    }
}

 

* Lombok Annotation 참고자료

 

- 공식 홈페이지 : https://projectlombok.org/index.html

- Reference Doc : https://projectlombok.org/features/index.html

- 플러그인 안내 : https://plugins.jetbrains.com/androidstudio/plugin/6317-lombok-plugin

- 튜토리얼      : http://jnb.ociweb.com/jnb/jnbJan2010.html

 

'Java' 카테고리의 다른 글

[Java] Optional  (0) 2020.11.15
[Java] CPU 점유율이 높은 스레드 상태 분석(Thread dump)  (0) 2020.11.10
[Java] PriorityBlockingQueue  (0) 2020.10.05
[Java] Generics(제네릭)  (0) 2020.09.29
[Java] Heap Memory Dump Analysis  (0) 2020.09.26