@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

Was this helpful?