본문 바로가기
Backend/Spring | SpringBoot

[SpringBoot] 롬복(@RequiredArgsContructor), 적용 방법(gradle)

by 2245 2023. 6. 24.

목차

     

     

    @RequiredArgsContructor

    https://wngml56.tistory.com/188

     

    [SpringBoot] 의존관계 주입 방법 4가지

    의존관계 주입에는 4가지 방법이 있습니다. 생성자 주입 수정자 주입 (Setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 @Component public class OrderServiceImpl implements OrderService { private final MemberReposi

    wngml56.tistory.com

    스프링부트에서 의존관계를 자동으로 주입할 때, 4가지 방법 중 생성자 주입을 권장합니다.

    그러기 위해선 생성자를 만들어야 하고, 주입 받은 값을 대입하는 코드를 직접 작성해야 합니다.

    여기서 롬복을 사용하면, 필드 주입처럼 편리하게 작성할 수 있습니다.

     

    생성자 주입 기존 코드

    @Component
    public class OrderServiceImpl implements OrderService {
    
        private final MemberRepository memberRepository;
        private final DiscountPolicy discountPolicy;
    
        @Autowired
        public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
            this.memberRepository = memberRepository;
            this.discountPolicy = discountPolicy;
        }
    }

     

    @Autowired 생략

    생성자가 1개 있으면 @Autowired 를 생략할 수 있습니다.

    @Component
    public class OrderServiceImpl implements OrderService {
    
        private final MemberRepository memberRepository;
        private final DiscountPolicy discountPolicy;
    
        public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
            this.memberRepository = memberRepository;
            this.discountPolicy = discountPolicy;
        }
    }

     

    롬복 라이브러리가 제공하는 @RequiredArgsContructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어줍니다. (코드에는 보이지 않지만 실체 호출이 가능합니다.)

     

    롬복 적용

    @Component
    @RequiredArgsConstructor
    public class OrderServiceImpl implements OrderService {
    
        private final MemberRepository memberRepository;
        private final DiscountPolicy discountPolicy;
    }

     

    위의 코드는 이전의 코드와 완전히 동일합니다.

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

    롬복이 자바의 애노테이션 프로세서라는 기능을 이용해 컴파일 시점에 final이 붙은 필드를 모아 자동으로 생성자 코드를 생성해줍니다. 실제 class 를 열어보면 위의 코드가 추가되어 있는 것을 확인할 수 있습니다.

     

    정리

    최근에는 생성자를 1개만 두고 @Autowired를 생략하는 방법을 주로 사용합니다.

    여기에 Lombok 라이브러리의 @RequiredArgsConstructor 를 함께 사용하면 기능은 모두 제공하면서 코드는 깔끔하게 사용할 수 있습니다. 

    의존관계를 하나 추가할 때도 굉장히 편리합니다.

     

     

    롬복 라이브러리 적용 방법

    build.gradle 에 라이브러리 및 환경을 추가합니다.

    plugins {
    	id 'java'
    	id 'org.springframework.boot' version '2.7.11'
    	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
    }
    
    group = 'hello'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '1.8'
    
    //lombok 설정 추가 시작
    configurations {
    	compileOnly {
    		extendsFrom annotationProcessor
    	}
    }
    //lombok 설정 추가 끝
    
    repositories {
    	mavenCentral()
    }
    
    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter'
    
    	//lombok 라이브러리 추가 시작
    	compileOnly 'org.projectlombok:lombok'
    	annotationProcessor 'org.projectlombok:lombok'
    	testCompileOnly 'org.projectlombok:lombok'
    	testAnnotationProcessor 'org.projectlombok:lombok'
    	//lombok 라이브러리 추가 끝
    
    	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    
    tasks.named('test') {
    	useJUnitPlatform()
    }

    ※ 코끼리 누르기

    https://start.spring.io/ 에서 프로젝트를 생성할 때, Lombok 플러그인을 선택하는 방법도 있습니다.

     

    롬복 플러그인이 안깔려 있는 경우

    1. mac : Preference(window: File → Settings) → plugins → lombok 검색 후 설치 실행 (재시작)

    2. mac : Preference(window: File → Settings)   Annotation Processors 검색   Enable annotation processing 체크 (재시작)

    3. 임의의 테스트 클래스를 만들고 @Getter, @Setter 확인

    package hello.core;
    
    import lombok.Getter;
    import lombok.Setter;
    
    @Getter
    @Setter
    public class HelloLombok {
        private String name;
        private int age;
    
        public static void main(String[] args) {
            HelloLombok helloLombok = new HelloLombok();
            helloLombok.setName("이주희");
    
            String name = helloLombok.getName();
            System.out.println("name= " + name);
        }
    }

     

     


    출처 

    https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

     

    스프링 핵심 원리 - 기본편 - 인프런 | 강의

    스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런

    www.inflearn.com