본문으로 바로가기
반응형

 

 

 

웹 프로젝트를 개발할 때 프레임워크를 사용하면(스프링 기준)

빈 객체들의 의존관계 주입을 위해 생성자@Autowired를 사용하여 의존관계를 주입해준다.

 

 

 

 

그런데 생성자도 만들어야 하고, 주입받은 값을 대입하는 코드도 만들어야 하고

개발자들이 해야할 일이 많아진다.

 

 

 

위와 같은 불편한 점을

lombok이라는 라이브러리를 사용하여 해결할 수 있다.

 

 

 

먼저 롬복을 사용하려면 설치와 설정이 필요하다.

 

 

 

 

 

 

 


● lombok 설치  

 

 

 

 

 

 

1. 프로젝트에 build.gradle에서 라이브러리 및 환경을 추가해준다.

 

 

 

build.gradle

plugins {
	id 'org.springframework.boot' version '2.6.2'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

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

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
	// web 라이브러리 추가
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'javax.inject:javax.inject:1'

	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	//lombok 라이브러리 추가 시작
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'

	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
	//lombok 라이브러리 추가 끝
}

test {
	useJUnitPlatform()
}

 

 

주석 처리가 된 부분을 추가해주면 된다.

 

 

 

 

 

 

 

 

 

2. lombok 설치

 

 

 

 

 

윈도우(Windows) : File > Settings > Plugins > lombok 검색 및 설치

맥(Mac) : Preferences >Settings > Plugins > lombok 검색 및 설치

 

 

 

 

 

 

 

 

 


● 설정  

 

 

 

 

 

 

1. annotation processing 활성화

 

 

 

윈도우(Windows) : File > Settings > Annotation Processors > Enable annotation processing 체크박스 활성화

맥(Mac) : Preferences > Annotation Processors > Enable annotation processing 체크박스 활성화

 

 

 

 

 

이제 설치 및 설정은 끝났다.

 

 

lombok을 활용해보자.

 

 

 

 

 

 

 

 

 

 


● lombok 활용  

 

 

 

 

간단한 예를 통해 lombok을 활용해보자.

 

 

 

 

HelloLombok.java

package hello.core;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

// lombok 테스트
@Getter
@Setter
@ToString
public class HelloLombok {

    private String name;
    private int age;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setName("asda"); // lombok으로 자동 getter, setter 생성

        String name = helloLombok.getName();
        System.out.println("name = " + name);

        System.out.println("helloLombok = " + helloLombok); // ToString도 지원
    }
}

 

 

클래스 안에 name, age 필드를 생성하고,

클래스 상단에 @Getter, @Setter, @ToString을 입력하였다.

 

 

그리고 main 메서드를 실행하면..

 

 

 

 

 

setName과 getName이 lombok에 의해 자동으로 생성되고

잘 실행되는 것을 볼 수 있다.

 

 

 

 

 

 

 

 

 

 


● lombok을 활용한 의존관계 주입  

 

 

 

 

 

lombok을 활용하여 의존관계 주입을 할 수 있다.(@Autowired)

 

 

예시 빈 객체를 통해 알아보자.

 

 

 

 

OrderServiceImpl.java

package hello.core.order;

import hello.core.annotation.MainDiscountPolicy;
import hello.core.discount.DiscountPolicy;
import hello.core.member.Member;
import hello.core.member.MemberRepository;
import hello.core.member.MemoryMemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class OrderServiceImpl implements OrderService{

    // final을 통해 생성자에서 값이 설정되지 않을 경우 오류 발생
    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

    @Autowired 
    public OrderServiceImpl(MemberRepository memberRepository,DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;          
        this.discountPolicy = discountPolicy;
    }

    @Override
    public Order createOrder(Long memberId, String itemName, int itemPrice) {
        Member member = memberRepository.findById(memberId);
        int discountPrice = discountPolicy.discount(member, itemPrice);

        return new Order(memberId, itemName, itemPrice, discountPrice);
    }

}

 

 

빈 객체(MemberRepository) 를 필드로 입력하고 

생성자를 통해 의존관계를 주입한다.

 

 

이제는 lombok을 사용해보자.

 

 

 

 

package hello.core.order;

import hello.core.annotation.MainDiscountPolicy;
import hello.core.discount.DiscountPolicy;
import hello.core.member.Member;
import hello.core.member.MemberRepository;
import hello.core.member.MemoryMemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor // 추가됨!
public class OrderServiceImpl implements OrderService{

    // final을 통해 생성자에서 값이 설정되지 않을 경우 오류 발생
    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;

//    @Autowired 
//    public OrderServiceImpl(MemberRepository memberRepository,DiscountPolicy discountPolicy) {
//        this.memberRepository = memberRepository;          
//       this.discountPolicy = discountPolicy;
//   }

    @Override
    public Order createOrder(Long memberId, String itemName, int itemPrice) {
        Member member = memberRepository.findById(memberId);
        int discountPrice = discountPolicy.discount(member, itemPrice);

        return new Order(memberId, itemName, itemPrice, discountPrice);
    }

}

 

 

클래스명 상단에 @RequiredArgsConstructor 를 입력해주면

생성자를 통해서 의존관계를 주입하는 것과 동일한 효과를 준다.

(이때 필드는 final로 필수 입력을 받아야 한다.)

 

 

롬복 라이브러리가 제공하는 @RequiredArgsConstructor 기능을 사용하면

final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다.

 

 

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

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

 

 

 

 

 

 

반응형