만쥬의 개발일기

Lombok이란?

Lombok이란 어노테이션 기반으로 코드를 자동완성 해주는 Java 라이브러리이다.

Lombok은 기계적인 코드 작성 ex)생성자, getter, setter등에 대한 코드 작성을 자동화하여 코드 다이어트를 도와준다.

Lombok을 이용하면 Getter, Setter, Equlas, ToString 등과 다양한 방면의 코드를 자동완성 시킬 수 있다.

Lombok 사용예시

getter, setter

 

만약 어느 프로젝트를 진행하면서, 변수를 많이 가지고 있는 DTO 혹은 VO 클래스를 만든다고 생각해보자.

public class customer extends user {

    private String name;
    private String age;
    private String telephone;
    
    public String getName(){
    	return name;
    }
    
    public void setName(String name){
    	this.name = name;
    }
    
    public String getAge(){
    	return age;
    }
    
    public void setAge(String age){
    	this.age = age;
    }
    
    public String getTelephone(){
    	return telephone;
    }
    
    public void setTelephone(String telephone){
    	this.telephone = telephone;
    }
}

 

위 예시를 보면 , 변수가 3개뿐인데도 벌써 getter와 setter만으로도 코드가 길어진다.

그럼 Lombok을 사용한다면?

 

@Getter
@Setter
public class customer extends user {

    private String name;
    private String age;
    private String telephone;
    
}

 

위처럼 코드가 훨씬 짧아지고 가독성도 좋아지는 모습이다.

 

@AllArgsConstructor

@AllArgsConstructor는 모든 변수를 사용하는 생성자를 자동완성 시켜주는 어노테이션이다. 

@AllArgsConstructor를 활용한 예제는 아래와 같다.

@Getter
@AllArgsConstructor
public class customer extends user {

    private String name;
    private String age;
    private String telephone;
    
    /* 해당 어노테이션으로 아래 생성자를 자동 생성할 수 있다.
    public customer(String name,String age,String telephone){
    	this.name=name;
        this.age=age;
        this.telephone=telephone;
    }
    */
}

 

@NoArgsConstructor

@NoArgsConstructor는 어떠한 변수도 사용하지 않는 기본 생성자를 자동완성 시켜주는 어노테이션이다. 

@NoArgsConstructor를 활용한 예제는 아래와 같다

@Getter
@AllArgsConstructor
public class customer extends user {

    private String name;
    private String age;
    private String telephone;
    
    /* 해당 어노테이션으로 아래 생성자를 자동 생성할 수 있다.
    public customer(){

    }
    */
}

[ @RequiredArgsConstructor ]

@RequiredArgsConstructor는 특정 변수만을 활용하는 생성자를 자동완성 시켜주는 어노테이션이다.

생성자의 인자로 추가할 변수에 @NonNull 어노테이션을 붙여서 해당 변수를 생성자의 인자로 추가할 수 있다.

아니면 해당 변수를 final로 선언해도 의존성을 주입받을 수 있다.
@RequiredArgsConstructor를 활용한 예제는 아래와 같다

@Getter
@AllArgsConstructor
public class customer extends user {

	@NonNull
    private String name;
    private final String age;
    private String telephone;
    
    /* 해당 어노테이션으로 아래 생성자를 자동 생성할 수 있다.
    public customer(String name , String age){
		this.name=name;
        this.age=age;
    }
    */
}

 

Builder

@Builder 어노테이션을 활용하면 해당 클래스의 객체의 생성에 Builder패턴을 적용시켜준다. 

모든 변수들에 대해 build하기를 원한다면 클래스 위에 @Builder를 붙이면 되지만, 

특정 변수만을 build하기 원한다면 생성자를 작성하고 그 위에 @Builder 어노테이션을 붙여주면 된다.

@Getter
@NoArgsConstructor
public class customer extends user {

    private String name;
    private final String age;
    private String telephone;
    
    @Builder
    public customer(String name , String age){
	this.name=name;
        this.age=age;
    }
    
}
@RestController
@RequestMapping(value = "/store")
@Log4j2
public class StoreController {

    @GetMapping(value = "/init")
    private ResponseEntity init(){
        customer customer1 = customer.builder()
                .name("kangmanjoo")
                .age("24")
                .build();

        return ResponseEntity.ok(customer1);
    }

}

Log4j2

@Log4j2와 같은 어노테이션을 활용하면 해당 클래스의 로그 클래스를 자동 완성 시켜준다. 

@Log 관련 어노테이션을 활용한 예제는 아래와 같다.

@RestController
@RequestMapping(value = "/user")
@Log4j2
public class userController {

    @GetMapping(value = "/log")
    private ResponseEntity log(){
        log.error("Error");
        return ResponseEntity.ok().build();
    }

}

Lombok의 장점

  • 어노테이션 기반의 코드 자동 생성을 통한 생산성 향상
  • 반복되는 코드 다이어트를 통한 가독성 및 유지보수성 향상
  • Getter, Setter 외에 빌더 패턴이나 로그 생성 등 다양한 방면으로 활용 가능

reference

https://mangkyu.tistory.com/78

 

profile

만쥬의 개발일기

@KangManJoo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!