본문 바로가기

Spring

Spring- lombok

@Getter, @Setter

  lombok을 설치 후 @Getter, @Setter 어노테이션을 사용하면, 굳이 코드로 getter, setter를 짜지 않아도 호출이 가능하다.

package hello.core;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
/*클래스 내부에 getter, setter를 만들지 않아도 사용 가능*/

public class HelloLombok {

    private String name;
    private int age;

    public static void main(String[] args) {
        HelloLombok helloLombok = new HelloLombok();
        helloLombok.setName("lombok");  // setter 호출
        String name = helloLombok.getName();  // getter 호출 

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

name = lombok

@ToString

package hello.core;

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

@Getter
@Setter
@ToString
/*클래스 내부에 toString() 만들지 않아도 사용 가능*/
public class HelloLombok {

    private String name;
    private int age;

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

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

name = lombok
helloLombok = HelloLombok(name=lombok, age=0)

@ToString을 사용하면 굳이 toString() 메소드 안 만들어도 호출 가능

 

@RequiredArgsConstructor

 기존 방식

package hello.core.order;

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

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

@RequiredArgsConstructor 사용

package hello.core.order;

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

@Component
@RequiredArgsConstructor /*final이 붙은 필드에 대한 생성자 자동 생성*/
public class OrderServiceImpl implements OrderService{
    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;
			....
}

@RequiredArgsConstructor를 사용하면 final 키워드가 붙은 멤버들에 한해 생성자를 자동으로 생성해 주입해준다. 코드도 간결해지고 나중에 멤버를 추가할 때도 생성자를 건드릴 필요 없이 추가할 멤버에 final만 붙이면 되니까 간편하다.