[Spring] 7-4. Lombok

송광호·2024년 1월 8일

[Spring]

목록 보기
31/41
post-thumbnail

Spring 시리즈는 혼자 공부하며 기록으로 남기고, 만약 잘못 학습 한 지식이 있다면 공유하며 피드백을 받고자 작성합니다.
스프링에 대해 깊게 공부해보고자 인프런의 김영한 강사님께서 강의를 진행하시는 (스프링 핵심 원리 - 기본편) 강의를 수강하며 정리하는 글입니다.
혹여나 글을 읽으시며 잘못 설명된 부분이 있다면 지적 부탁드리겠습니다.


롬복과 최신 트랜드

막상 개발을 하다보면 대부분이 다 불변이고, final 키워드를 자주 사용하게 된다.
근데 매번 생성자 만들고.. 주입하고.. 귀찮고 복잡하다.

앞서 했던 코드에 Lombok을 적용해보자
기존 코드

@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;
    }
}
  • 여기서 이제 내가 이 강의를 듣는 이유가 나온다. 대학생활중 프로젝트를 진행해보면서 Lombok을 사용했었는데 그땐 왜 이걸 사용하는지도 모르고 그냥 다른 강의영상에서 쓰니깐 따라서 사용했을뿐이다.
  • 하지만 김영한 강사님께서는 스프링에 대한 원리를 처음부터 하나하나씩 설명해주시기 때문에 왜 이런 기술을 사용하는지 알게된다.
  • 한번 실제로 코드에 적용해보자.

Lombok 적용

@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService {
    private final MemberRepository memberRepository;
    private final DiscountPolicy discountPolicy;
}
  • 놀랍게도 이게 끝이다. 아니 그럼 생성자가 없는데 의존관계를 어떻게 주입받냐?
  • 코드에는 존재하지 않지만 @RequiredArgsConstructor에 의해 생성자가 존재한다.

Getter, Setter

  • 그 밖에 필드의 값을 받아오는 get 메서드, set 메서드 또한 Lombok의 @Getter, @Setter 애노테이션으로 추가할 수 있다.
  • HelloLombok클래스를 하나 만들어서 코드를 살펴보자
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;
    }
}
  • 롬복 테스트를 위해 임시로 클래스하나를 만들었다. 기존 코드라면 각각의 필드에 대한 get, set 메서드를 추가해야하지만 위 코드에 롬복을 적용시키면?

결과 코드

@Getter
@Setter
public class HelloLombok {
    private String name;
    private int age;
}
  • 이것도 마찬가지로 뜯어보면 get, set 메서드가 구현되어있는걸 볼 수 있다.

참고: toString()은 @ToString 애노테이션을 추가하면된다. 얘도 롬복이다.

0개의 댓글