@Value 어노테이션의 2가지 사용법

young·2024년 12월 13일
0

Spring

목록 보기
2/2
post-thumbnail

상황

JWT를 공부하고 구현하는 과정에서, JWT의 Secret key 값을 받아와야하는 상황이 생겼다.
해당 어노테이션을 사용하기 위해서 import 해주는 과정에서, 자동완성 import로 lombok에서 제공하는 @Value 어노테이션을 사용하자 값을 받아오지 못하는 오류가 발생했다.

lombok에서 제공하는 @Value

import lombok.Value;

jwt에서 사용하는 @Value

import org.springframework.beans.factory.annotation.Value;

이 두 어노테이션의 차이는 무엇일까?

lombok에서의 @Value

lombok.Value는 lombok에서 제공하는 어노테이션으로 불변한 클래스를 만들기 위한 어노테이션

[ 특징 ]

  • 불변 객체를 생성한다
    모든 필드는 final로 선언된다.
    클래스는 final로 선언된다 => 상속이 불가능하다
  • Getter 메서드가 자동으로 생성된다.
  • 불변성을 유지하기 위해 Setter 메서드는 생성되지 않는다
  • 생성자가 자동으로 생성된다.

[ 왜 사용할까? ]

  1. 데이터 무결성과 동시성 문제를 해결하기 위해 불변의 객체를 생성하기 위해서
  2. 코드 간결성을 높이고, 불변 객체를 쉽게 만들기 위해서

[ 예시 코드 ]

import lombok.Value;

@Value
public class User{
	String name;
    int age;
}
  • private final String name;
  • private final int age;
  • 모든 필드에 대한 Getter
  • 모든 필드를 초기화하는 생성자

등을 자동으로 생성한다.

Spring의 @Value

annotation.Value는 Spring Framework에서 제공하는 어노테이션으로, 설정 값 또는 환경 변수 값을 주입하기 위해 사용됨

[ 특징 ]

  • application.properties 또는 application.yml에 정의된 값을 Java 객체에 주입
  • 환경 변수 등의 표현식을 통해 값을 주입할 수 있음

[ 사용하는 이유 ]
1. 외부 설정 값을 유연하게 주입하기 위해서
2. 환경에 따다 각 다른 값을 주입하거나 설정을 외부화하여 코드와 설정을 분리하기 위해 사용함

[ 예시 코드 ]

import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.stereotype.Component;

@Component
public class AppConfig{

	@Value("${jwt.secret}")
    private String secretKey;
}
# application.yml

jwt:
	secret: abcdefghijklmnop

application.yml 파일에 해당 secret key 값이 작성되어있어야 사용할 수 있음

결론

Lombok의 @Value

-> 객체를 불변하게 만들 때 사용한다. 주로 데이터 클래스나 DTO, Entity 정의 시 사용

Spring의 @Value

-> 외부 설정 값을 주입할 때 사용 됨.

profile
ฅʕ•̫͡•ʔฅ

0개의 댓글