JAVA/Spring(Springboot)

[Spring] 롬복 라이브러리 / 설치 및 사용법

나는아이스크림 2021. 7. 23. 23:13
728x90

개발을 해보면 대부분이 다 불변이기 때문에 생성자에 final 키워드를 사용하게 된다

생성자 주입을 하게 되면 생성자도 만들어야 하고, 

주입받은 값을 대입하는 코드도 만들어야하므로 코드를 작성하기가 귀찮아진다

-> '롬복'이라는 라이브러리를 사용하면 훨씬 간편해진다!!

 

롬복 라이브러리는 자바의 '애노테이션 프로세서' 기능을 이용해서 

컴파일 시점에 코드를 자동으로 생성해준다

롬복 라이브러리는 Getter, Setter, 생성자를 자동으로 만들어준다!!

 

 

 

롬복 라이브러리 설치

롬복 라이브러리를 spring boot 를 생성할때 library 추가를 통해 사용할 수 있다

Spring Initializr

사이트에서

 

 

 

ADD DEPENDENCIES 를 클릭하고

 

 

 

Lombok 을 검색하여 추가한다

 

 

 

 

또는 이미 생성된 스프링 프로젝트라면

프로젝트의 build.gradle 에 들어가서

//lombok 설정 추가 시작
configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}
//lombok 설정 추가 끝

dependencies {
	//lombok 라이브러리 추가 시작
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
	//lombok 라이브러리 추가 끝
}

위 코드를 추가해 주면 된다

dependencies 에서는 기존의 소스에 추가로 입력해주면 된다

 

그리고 코끼리 모양 아이콘(Reload)를 클릭한다

 

File > Settings 를 클릭한다

lombok 을 검색하여 설치해 준다

 

 

 

그리고 annotation processors 를 검색한 다음에 

Enable annotation processing 을 꼭 체크해주어야 한다

 

이러면 이제 InteliJ 에서 lombok 을 사용할 수 있게 된다!!

 

 

 

 

롬복 라이브러리 사용법

롬복 라이브러리를 사용하면 getter, setter 를 자동으로 만들어주고,

toString 메서드도 자동으로 만들어준다

사용법은 아래와 같다

 

@Getter
@Setter
@ToString
public class Hello {
    private String name;
    private int age;

    public static void main(String[] args) {
        Hello hello = new Hello();
        hello.setName("hihi");
        hello.getName();

        System.out.println("hello = " + hello);
    }
}

 

간단한 Hello 라는 클래스를 생성하였다

name, age 라는 필드가 존재한다

 

 

클래스 위에 @Getter, @Setter, @ToString 을 적게 되면 Lombok 을 사용할 수 있게 된다

코드를 보면 getter, setter, toString 메서드를 정의하지 않아도 바로 사용할 수 있는 것을 알 수 있다

 

 

참고로 ToString 의 모습은 아래와 같다

 

 

 

생성자를 자동으로 만들기 위해서는 클래스에 @RequiredArgsConstructor 를 적어줘야 한다

@RequiredArgsConstructor 를 적으면 final 이 붙은 변수를 참고하여 생성자를 자동으로 만들어 준다!

@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;
    
}
728x90
728x90