강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của kamser
kamser

câu hỏi đã được viết

Từ Java 9 đến Java 21

Bài 10. Record class và Sealed class

compact constructor 질문이 있습니다.

Đã giải quyết

Viết

·

174

1

강의 10강 7:15 여기에 보시면

컴팩트 컨스트럭터를 사용하는 경우 필드에 값을 넣어줄 수 없다고 말씀해주셨는데

여기서 직접 this.name 으로 넣는건 불가능하지만

public record MemberRecord(
        String name,
        @CustomAnnotation int age
) {
    private static final String DEFAULT_NAME = "Unknown";
    private static final int DEFAULT_AGE = 1;

    public boolean isAdult() {
        return age > 20;
    }

    public MemberRecord {
        if (name == null || name.isBlank()) {
            name = DEFAULT_NAME;
        }
        if (age < 0) {
            age = DEFAULT_AGE;
        }
    }
}

this.name으로 값을 할당하는 것이 아니라 잘못된 값이 들어오면 그걸 변경해서 넣어주는건 되는거 같습니다.

이런 용도로 컴팩트 컨스트럭처를 사용해도 될까요?

아니면 말씀해주신 것처럼 검증 용도로만 사용하는 것을 권장하시나요?

java

Câu trả lời 1

1

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

안녕하세요! kamser님! 🙂 꼼꼼하게 확인해주셔서 정말 감사드립니다!

 

결론부터 말씀드리면, name = 0; 처럼 this를 사용하지 않고 값을 넣어주는 것은 가능합니다!

또한 이 방식은 https://blogs.oracle.com/javamagazine/post/java-record-compact-canonical-constructor 에서도 확인할 수 있듯이 필요한 경우 충분히 쓸 수 있는 패턴이라고 생각합니다!

 

즉, 꼭 검증용으로 compact constructor를 사용할 필요는 없고, 값을 재할당하는 방식으로 쓰셔도 좋습니다! 🙂

관련한 내용은 영상을 재촬영, 편집하여 업로드 해두었습니다! 오늘 중으로 PDF, PPT도 수정할 예정이에요!

 

kamser님 덕분에 저도 하나 배워갑니다. 감사합니다!! 🙏

kamser님의 프로필 이미지
kamser
Người đặt câu hỏi

답변 감사합니다.

자바 21까지 빠르게 중요한 내용을 습득할 수 있게 영상 올려주셔서 제가 더 감사합니다!

중간 중간마다 기능뿐만 아니라 왜 기능이 추가되었는지 알려주셔서 너무 도움이 되었어요

 

lannstark님의 프로필 이미지
lannstark
Người chia sẻ kiến thức

그런 부분을 특히 신경써서 준비했는데 도움이 되셨다니 다행입니다! 🙂

감사합니다!

Hình ảnh hồ sơ của kamser
kamser

câu hỏi đã được viết

Đặt câu hỏi