프로젝트/잡스캐너

자바 16 레코드 클래스

성장에 몰입중인 개발자 2022. 9. 8. 21:41

 

기존 불변 데이터 객체 생성시에 모든 필드에 final을 사용하고 생성자, 접근자 메서드(getter), 출력 메서드(toString) 등을 재정의 해주어야 한다. lombock을 사용해 @AllArgsConstructor @Getter @ToString 등을 사용해 좀 더 편하게 정의할 수 있기는 하지만 매번 final과 @을 달아줘야하는 건 마찬가지다.

그래서 자바 16부터 record class를 공식적으로 제공한다. record class를 사용하면 간결한 방식으로 불변 데이터 객체를 정의할 수 있다.
모든 필드에 아래 적용
- private final
- 생성자
- getter()
- toString()
- equals()
- hashCode()

불변 데이터 객체로 사용해야하는 properties에 적합하여 이에 적용했다. 불변 데이터 객체로 사용하는 DTO에도 적용할 만한 것 같다.

@ConstructorBinding
@ConfigurationProperties(prefix = "auth")
public record AuthProperties(
	Client client,
	Jwt jwt
) {

	public record Client(
		Kakao kakao,
		Google google,
		Github github
	) {
		public record Kakao(
			String tokenUrl,
			String redirectUrl,
			String clientId,
			String clientSecret
		) {
		}

		public record Google(
			String tokenUrl,
			String redirectUrl,
			String clientId,
			String clientSecret
		) {
		}

		public record Github(
			String tokenUrl,
			String redirectUrl,
			String clientId,
			String clientSecret
		) {
		}
	}

	public record Jwt(
		String appTokenSecret,
		String refreshTokenSecret,
		String appTokenExpiry,
		String refreshTokenExpiry
	) {
	}
}

 

참고
https://scshim.tistory.com/372
https://marrrang.tistory.com/71