๐ŸŒ WEB/JAVA

[Lombok] Difference Between @Value and @Data

์• ์ •์“ฐ 2022. 3. 11. 21:22

์ปดํŒŒ์ผ๊ณผ์ •์—์„œ ์ƒ์„ฑํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” java๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

@Value

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๋ณ€๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

class์— ์„ ์–ธํ•˜๋ฉด ์•„๋ž˜์˜ ์–ด๋…ธํ…Œ์ด์…˜์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋œ๋‹ค.

@Getter @AllArgsConstructor 

@ToString  @EqualsAndHashCode 

@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)

 

ํ•˜์ง€๋งŒ 

 

@Setter ๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.

์™œ๋ƒํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถˆ๋ณ€์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— setter๋ฅผ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ค

 

@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) ๋Š” private์ด๋‚˜ final ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 

์ตœ์ข…์ ์œผ๋กœ @Value ๋ฅผ ์‚ฌ์šฉํ•œ๋Š” ๊ฒƒ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

        import lombok.Getter;
        import lombok.ToString;
        import lombok.EqualsAndHashCode;
        import lombok.experimental.FieldDefaults;;
        import lombok.AllArgsConstructor;
        
        @Getter
        @ToString
        @EqualsAndHashCode
        @FieldDefaults(makeFinal = true)
        @AllArgsConstructor
        public class Student  {
            private String name;
            private int section;
        }

 

@Data

 

    
        import lombok.EqualsAndHashCode;
        import lombok.Getter;
        import lombok.RequiredArgsConstructor;
        import lombok.Setter;
        import lombok.ToString;
        
        @Getter
        @Setter
        @ToString
        @EqualsAndHashCode
        @RequiredArgsConstructor
        public class Person  {
            private Long id;
            private String firstName;
            private String lastName;
            private String email;
            private int age;

        }

 

+ @Data With @Builder

 

@Data ๋Š” ํ•„์ˆ˜ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

ํ•˜์ง€๋งŒ @Builder๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ‘์ž๊ธฐ @Data ๊ฐ€ ๋ชจ๋“  ํ•„๋“œ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

Spring DI ๋Š” ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์—

@NoArgsConstructor๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

์•ˆ๊ทธ๋Ÿฌ๋ฉด ์—๋Ÿฌ๋‚จ

        @AllArgsConstructor
        @NoArgsConstructor
        @Data
        @Builder
        public class Person  {
            ...
        }

 

@NoArgsConstructor ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž ์ƒ์„ฑ
@AllArgsConstructor ๋ชจ๋“  ํ•„๋“œ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž ์ƒ์„ฑ
@RequiredArgsConstructor final , @NonNull์ธ ํ•„๋“œ ๊ฐ’๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ์ƒ์„ฑ์ž ์ƒ์„ฑ

 

 

 

์ฐธ๊ณ  ์‚ฌ์ดํŠธ

https://devwithus.com/lombok-data-annotation/

๋ฐ˜์‘ํ˜•