CORE
HOME > JAVA > J2SE > CORE
2018.09.23 / 16:14

Java¿¡¼­ ¾î³ëÅ×À̼Ç(Annotation) À̶õ?

hangawee
Ãßõ ¼ö 179

ÀÚ¹Ù °³¹ßÀ» ÇÏ´Ù º¸¸é Ŭ·¡½º ¶Ç´Â ¸Þ¼­µå ¶Ç´Â º¯¼ö ¾Õ¿¡ @Override °°Àº @ Ç¥½Ã¸¦ ¸¹ÀÌ ºÃÀ» °ÍÀÔ´Ï´Ù.
ÀÌ ¾î³ëÅ×À̼ÇÀº JEE5(Java Platform, Enterprise Edition 5)ºÎÅÍ »õ·Ó°Ô Ãß°¡µÈ ¿ä¼ÒÀÔ´Ï´Ù.

ÀÌ ¾î³ëÅ×À̼ÇÀ¸·Î ÀÎÇØ µ¥ÀÌÅÍÀÇ À¯È¿¼º °Ë»ç µîÀ» ½±°Ô ¾Ë ¼ö ÀÖ°í, ÀÌ¿Í °ü·ÃÇÑ Äڵ尡 ±ò²ûÇØÁö°Ô µË´Ï´Ù.
ÀÏ´Ü ¾î³ëÅ×À̼ÇÀÇ ¿ëµµ´Â ´Ù¾çÇÑ ¸ñÀûÀÌ ÀÖÁö¸¸ ¸ÞŸ µ¥ÀÌÅÍÀÇ ºñÁßÀÌ °¡Àå Å©´Ù ÇÒ ¼ö ÀÖ½À´Ï´Ù.

¸ÞŸ-Å×ÀÌÅÍ(Meta-Data) : µ¥ÀÌÅ͸¦ À§ÇÑ µ¥ÀÌÅ͸¦ ÀǹÌÇϸç, Ç®¾î À̾߱âÇϸé ÇÑ µ¥ÀÌÅÍ¿¡ ´ëÇÑ ¼³¸íÀ» ÀǹÌÇÏ´Â µ¥ÀÌÅÍ. (ÀÚ½ÅÀÇ Á¤º¸¸¦ ´ã°í ÀÖ´Â µ¥ÀÌÅÍ)

Java¿¡¼­ ±âº»ÀûÀ¸·Î Á¦°øÇÏ´Â ¾î³ëÅ×ÀÌ¼Ç Á¾·ù

  1. @Override
  • ¼±¾ðÇÑ ¸Þ¼­µå°¡ ¿À¹ö¶óÀÌµå µÇ¾ú´Ù´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.
  • ¸¸¾à »óÀ§(ºÎ¸ð) Ŭ·¡½º(¶Ç´Â ÀÎÅÍÆäÀ̽º)¿¡¼­ ÇØ´ç ¸Þ¼­µå¸¦ ãÀ» ¼ö ¾ø´Ù¸é ÄÄÆÄÀÏ ¿¡·¯¸¦ ¹ß»ý ½Ãŵ´Ï´Ù.
  1. @Deprecated
  • ÇØ´ç ¸Þ¼­µå°¡ ´õ ÀÌ»ó »ç¿ëµÇÁö ¾ÊÀ½À» Ç¥½ÃÇÕ´Ï´Ù.
  • ¸¸¾à »ç¿ëÇÒ °æ¿ì ÄÄÆÄÀÏ °æ°í¸¦ ¹ß»ý Å°½Ê´Ï´Ù.
  1. @SuppressWarnings
  • ¼±¾ðÇÑ °÷ÀÇ ÄÄÆÄÀÏ °æ°í¸¦ ¹«½ÃÇϵµ·Ï ÇÕ´Ï´Ù.
  1. @SafeVarargs
  • Java7 ºÎÅÍ Áö¿øÇϸç, Á¦³Ê¸¯ °°Àº °¡º¯ÀÎÀÚÀÇ ¸Å°³º¯¼ö¸¦ »ç¿ëÇÒ ¶§ÀÇ °æ°í¸¦ ¹«½ÃÇÕ´Ï´Ù.
  1. @FunctionalInterface
  • Java8 ºÎÅÍ Áö¿øÇϸç, ÇÔ¼öÇü ÀÎÅÍÆäÀ̽º¸¦ ÁöÁ¤ÇÏ´Â ¾î³ëÅ×À̼ÇÀÔ´Ï´Ù.
  • ¸¸¾à ¸Þ¼­µå°¡ Á¸ÀçÇÏÁö ¾Ê°Å³ª, 1°³ ÀÌ»óÀÇ ¸Þ¼­µå(default ¸Þ¼­µå Á¦¿Ü)°¡ Á¸ÀçÇÒ °æ¿ì ÄÄÆÄÀÏ ¿À·ù¸¦ ¹ß»ý ½Ãŵ´Ï´Ù.


¾î³ëÅ×À̼ÇÀº ¾î¶»°Ô ±¸¼ºµÇ¾î ÀÖÀ»±î?

¸ÕÀú ¾î³ëÅ×À̼ÇÀÇ ±¸Á¶¸¦ º¸±â À§Çؼ­ ¾Æ·¡ÀÇ Äڵ带 Âü°íÇØ º¾´Ï´Ù. (¿¹¸¦ À§ÇØ ÀÛ¼ºµÈ Ä¿½ºÅÒ ¾î³ëÅ×À̼ÇÀÔ´Ï´Ù.)

1
2
3
4
5
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
boolean isCheck() default true;
}

¸ÕÀú 1¹ø, 2¹øÀÇ ¾î³ëÅ×ÀÌ¼Ç ¼±¾ð¿¡ ¾²ÀÎ ¾î³ëÅ×À̼ÇÀº ¸ÞŸ ¾î³ëÅ×À̼Ç(Meta Annotation)À̶ó Çϸç À̸¦ ÀÌ¿ëÇØ Ä¿½ºÅÒ ¾î³ëÅ×À̼ÇÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

¸ÞŸ ¾î³ëÅ×À̼ÇÀÇ Á¾·ù

  1. @Retention
  • ÀÚ¹Ù ÄÄÆÄÀÏ·¯°¡ ¾î³ëÅ×À̼ÇÀ» ´Ù·ç´Â ¹æ¹ýÀ» ±â¼úÇϸç, ƯÁ¤ ½ÃÁ¡±îÁö ¿µÇâÀ» ¹ÌÄ¡´ÂÁö¸¦ °áÁ¤ÇÕ´Ï´Ù.
  • Á¾·ù´Â ´ÙÀ½°ú °°½À´Ï´Ù.
    • RetentionPolicy.SOURCE : ÄÄÆÄÀÏ Àü±îÁö¸¸ À¯È¿. (ÄÄÆÄÀÏ ÀÌÈÄ¿¡´Â »ç¶óÁü)
    • RetentionPolicy.CLASS : ÄÄÆÄÀÏ·¯°¡ Ŭ·¡½º¸¦ ÂüÁ¶ÇÒ ¶§±îÁö À¯È¿.
    • RetentionPolicy.RUNTIME : ÄÄÆÄÀÏ ÀÌÈÄ¿¡µµ JVM¿¡ ÀÇÇØ °è¼Ó ÂüÁ¶°¡ °¡´É. (¸®Ç÷º¼Ç »ç¿ë)
  1. @Target
  • ¾î³ëÅ×À̼ÇÀÌ Àû¿ëÇÒ À§Ä¡¸¦ ¼±ÅÃÇÕ´Ï´Ù.
  • Á¾·ù´Â ´ÙÀ½°ú °°½À´Ï´Ù.
    • ElementType.PACKAGE : ÆÐÅ°Áö ¼±¾ð
    • ElementType.TYPE : ŸÀÔ ¼±¾ð
    • ElementType.ANNOTATION_TYPE : ¾î³ëÅ×ÀÌ¼Ç Å¸ÀÔ ¼±¾ð
    • ElementType.CONSTRUCTOR : »ý¼ºÀÚ ¼±¾ð
    • ElementType.FIELD : ¸â¹ö º¯¼ö ¼±¾ð
    • ElementType.LOCAL_VARIABLE : Áö¿ª º¯¼ö ¼±¾ð
    • ElementType.METHOD : ¸Þ¼­µå ¼±¾ð
    • ElementType.PARAMETER : Àü´ÞÀÎÀÚ ¼±¾ð
    • ElementType.TYPE_PARAMETER : Àü´ÞÀÎÀÚ Å¸ÀÔ ¼±¾ð
    • ElementType.TYPE_USE : ŸÀÔ ¼±¾ð
  1. @Documented
  • ÇØ´ç ¾î³ëÅ×À̼ÇÀ» Javadoc¿¡ Æ÷ÇÔ½Ãŵ´Ï´Ù.
  1. @Inherited
  • ¾î³ëÅ×À̼ÇÀÇ »ó¼ÓÀ» °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù.
  1. @Repeatable
  • Java8 ºÎÅÍ Áö¿øÇϸç, ¿¬¼ÓÀûÀ¸·Î ¾î³ëÅ×À̼ÇÀ» ¼±¾ðÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù.


¾î³ëÅ×À̼ÇÀº ±âº»ÀûÀ¸·Î ÀÎÅÍÆäÀ̽º ÇüŸ¦ ÃëÇÏ°í ÀÖÀ¸¸ç, ´ÜÁö interface ¾Õ¿¡ @ Ç¥½Ã¸¦ ÇØÁÝ´Ï´Ù.
¾î³ëÅ×À̼ÇÀÇ Çʵ忡¼­´Â enum, StringÀ̳ª ±âº» ÀÚ·áÇü, ±âº» ÀÚ·áÇüÀÇ ¹è¿­À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

¾î³ëÅ×À̼ǿ¡ ´ëÇÑ ÀÌ·ÐÀûÀÎ ºÎºÐÀº ¿©±â±îÁöÀ̸ç, À̸¦ È°¿ëÇÏ¿© Ä¿½ºÅÒ ¾î³ëÅ×À̼ÇÀ» ÀÛ¼ºÇÏ´Â °ÍÀº ´ÙÀ½ Æ÷½ºÆ®¿¡¼­ ´Ù·çµµ·Ï ÇÏ°Ú½À´Ï´Ù.

Ä¿½ºÅÒ ¾î³ëÅ×ÀÌ¼Ç ¸¸µé°í »ç¿ëÇϱâ