@Repeatable

@Repeatable은 Java 8버전 이후 메타 μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, μ–΄λ…Έν…Œμ΄μ…˜μ„ 반볡 μ μš©ν•  수 있게 ν•œλ‹€. Java8 μ΄μ „μ—λŠ” 반볡 μ μš©ν•˜κ³  싢은 μ–΄λ…Έν…Œμ΄μ…˜μ€ λ‹€μŒκ³Ό 같이 μ μš©ν–ˆλ‹€.

// case 1
@GreenColor
@BlueColor
@RedColor
public class RGBColor { ... }

// case 2
@Color(colors={"green", "blue", "red"}
public class RGBColor { ... }

@GreenColor, @BlueColor, @RedColor μ΄λ ‡κ²Œ 각각의 μ–΄λ…Έν…Œμ΄μ…˜μ„ μƒμ„±ν•˜κ±°λ‚˜, λ°°μ—΄ λ§€κ°œλ³€μˆ˜λ₯Ό λ°›μ•„ κ΅¬ν˜„ν•˜μ˜€λ‹€.

Java 8이후 λΆ€ν„°λŠ” @Repeatable μ–΄λ…Έν…Œμ΄μ…˜μ„ μ œκ³΅ν•΄μ£Όλ©°, μ‚¬μš©λ°©λ²•μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  1. Repeatable Annotation νƒ€μž…μ„ μ„ μ–Έ(μ‹€ μ‚¬μš©ν•  μ–΄λ…Έν…Œμ΄μ…˜)

    • @Repeatable에 Container annotation 전달

      @Repeatable(value = Colors.class) // 
      @Retention(RetentionPolicy.RUNTIME)
      public @interface Color {
        String value(); // 
      }
  2. μ»¨ν…Œμ΄λ„ˆ μ–΄λ…Έν…Œμ΄μ…˜ νƒ€μž…μ„ ν¬ν•¨ν•˜μ—¬ μ„ μ–Έ(묢음 값을 κ΄€λ¦¬ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆ μ–΄λ…Έν…Œμ΄μ…˜)

    • μ»¨ν…Œμ΄λ„ˆ μ–΄λ…Έν…Œμ΄μ…˜μ€ λ‚΄λΆ€ μ–΄λ…Έν…Œμ΄μ…˜μ„ λ°˜ν™˜ν•˜λŠ” value() λ©”μ„œλ“œλ₯Ό μ •μ˜ν•΄μ•Όν•œλ‹€.

      @Target(ElementType.TYPE)
      @Retention(RetentionPolicy.RUNTIME)
      @Documented
      public @interface Colors {
        Color[] value();  
      }

μœ„μ™€ 같이 @Repeatable μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ κ΅¬ν˜„ν•˜λ©΄ λ‹€μŒκ³Ό 같이 μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

@Color("green")
@Color("blue")
@Color("red")
public class RGBColor { ... }

μ΄λ•Œ, ν•œκ°€μ§€ μ£Όμ˜ν•  점이 μžˆλ‹€. ν•˜μœ„ μ–΄λ…Έν…Œμ΄μ…˜(@Color)κ°€ ν•œκ°œλ§Œ μ •μ˜λœ 경우 μ»¨ν…Œμ΄λ„ˆ μ–΄λ…Έν…Œμ΄μ…˜(@Colors)둜 묢이지 μ•ŠμœΌλ―€λ‘œ, ν•˜μœ„ μ–΄λ…Έν…Œμ΄μ…˜(@Color)에도 @Retention(RetentionPolicy.RUNTIME)λ₯Ό μ„ μ–Έν•΄μ£Όμ–΄μ•Όν•œλ‹€.

μ°Έκ³ 

Last updated