인프런 김영한 강의 정리/스프링 핵심원리 기본편

스프링 핵심원리 기본편 - 의존관계 자동 주입(3)|롬복과 최신 트랜드

백엔드 개발자 - 젤리곰 2024. 5. 6. 19:23
728x90

의존성 주입에 왜 롬복을 알려줄까?

왜냐하면, 의존성 주입 4가지 방법 중 생성자 주입방법을 가장 권장하기때문이다.

생성자 주입은 생성자를 매번 만들어줘야하는데, 이 귀찮은 작업을 롬복이 도와준다.

 

1. 롬복이란?

롬복(Lombok)은 Java 언어를 위한 라이브러리로 특정한 상황에서 반복적으로 작성되는 코드 조각을 줄여준다.

개발자의 생산성을 향상시키는 데 도움이 된다.

실무에서 아주 많이 쓰이는 라이브러리!

 

2. 롬복 라이브러리 설정하는 법 (build.gradle)

 

✔️build.gradle에 Lombok 라이브러리 코드를 추가하고 재빌드한다.

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

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') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

 

 

 

✔️Settings -> plugins -> lombok 다운로드 받는다.

 

✔️Settings -> Annotation Processors -> Enable annotation processing 체크

 

3. 롬복 적용 전 코드 vs 적용 후 코드 

 

✅롬복 적용 전 코드 (생성자)

@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;
    }
}

- 생성자를 직접 만들어줬다.

- 하지만, 생성자 코드는 형태가 반복된다. 개발자는 반복을 싫어한다!

 

✅롬복 적용 전 코드 (getter, setter, toString)

public class HelloLombok {

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "HelloLombok{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setName("asdfas");

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

- name과 age 변수에 대한 getter, setter를 만들어줬다.

- getter, setter의 형태도 어떤 변수든 결국 반복적인 형태다. 

 

✅롬복 적용 후 코드 (생성자)

@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {

    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;
    
}

 

@RequiredArgsConstructor 를 사용하면 final이 붙은 필드를 모아 생성자를 만들어준다.

 

✅롬복 적용 후 코드 (getter, setter, toString)

@Getter
@Setter
@ToString
public class HelloLombok {

    private String name;
    private int age;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setName("asdfas");

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

 

롬복이 제공해주는 기능인 @Getter, @Setter, @ToString를 사용하면 코드가 확 간결해진다.

 

 

728x90