Java¿¡¼ ¾î³ëÅ×À̼Ç(Annotation) À̶õ?
ÀÚ¹Ù °³¹ßÀ» ÇÏ´Ù º¸¸é Ŭ·¡½º ¶Ç´Â ¸Þ¼µå ¶Ç´Â º¯¼ö ¾Õ¿¡ @Override °°Àº @ Ç¥½Ã¸¦ ¸¹ÀÌ ºÃÀ» °ÍÀÔ´Ï´Ù.
ÀÌ ¾î³ëÅ×À̼ÇÀº JEE5(Java Platform, Enterprise Edition 5)ºÎÅÍ »õ·Ó°Ô Ãß°¡µÈ ¿ä¼ÒÀÔ´Ï´Ù.
ÀÌ ¾î³ëÅ×À̼ÇÀ¸·Î ÀÎÇØ µ¥ÀÌÅÍÀÇ À¯È¿¼º °Ë»ç µîÀ» ½±°Ô ¾Ë ¼ö ÀÖ°í, ÀÌ¿Í °ü·ÃÇÑ Äڵ尡 ±ò²ûÇØÁö°Ô µË´Ï´Ù.
ÀÏ´Ü ¾î³ëÅ×À̼ÇÀÇ ¿ëµµ´Â ´Ù¾çÇÑ ¸ñÀûÀÌ ÀÖÁö¸¸ ¸ÞŸ µ¥ÀÌÅÍÀÇ ºñÁßÀÌ °¡Àå Å©´Ù ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸ÞŸ-Å×ÀÌÅÍ(Meta-Data) : µ¥ÀÌÅ͸¦ À§ÇÑ µ¥ÀÌÅ͸¦ ÀǹÌÇϸç, Ç®¾î À̾߱âÇϸé ÇÑ µ¥ÀÌÅÍ¿¡ ´ëÇÑ ¼³¸íÀ» ÀǹÌÇÏ´Â µ¥ÀÌÅÍ. (ÀÚ½ÅÀÇ Á¤º¸¸¦ ´ã°í ÀÖ´Â µ¥ÀÌÅÍ)
Java¿¡¼ ±âº»ÀûÀ¸·Î Á¦°øÇÏ´Â ¾î³ëÅ×ÀÌ¼Ç Á¾·ù
- @Override
- ¼±¾ðÇÑ ¸Þ¼µå°¡ ¿À¹ö¶óÀÌµå µÇ¾ú´Ù´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù.
- ¸¸¾à »óÀ§(ºÎ¸ð) Ŭ·¡½º(¶Ç´Â ÀÎÅÍÆäÀ̽º)¿¡¼ ÇØ´ç ¸Þ¼µå¸¦ ãÀ» ¼ö ¾ø´Ù¸é ÄÄÆÄÀÏ ¿¡·¯¸¦ ¹ß»ý ½Ãŵ´Ï´Ù.
- @Deprecated
- ÇØ´ç ¸Þ¼µå°¡ ´õ ÀÌ»ó »ç¿ëµÇÁö ¾ÊÀ½À» Ç¥½ÃÇÕ´Ï´Ù.
- ¸¸¾à »ç¿ëÇÒ °æ¿ì ÄÄÆÄÀÏ °æ°í¸¦ ¹ß»ý Å°½Ê´Ï´Ù.
- @SuppressWarnings
- ¼±¾ðÇÑ °÷ÀÇ ÄÄÆÄÀÏ °æ°í¸¦ ¹«½ÃÇϵµ·Ï ÇÕ´Ï´Ù.
- @SafeVarargs
- Java7 ºÎÅÍ Áö¿øÇϸç, Á¦³Ê¸¯ °°Àº °¡º¯ÀÎÀÚÀÇ ¸Å°³º¯¼ö¸¦ »ç¿ëÇÒ ¶§ÀÇ °æ°í¸¦ ¹«½ÃÇÕ´Ï´Ù.
- @FunctionalInterface
- Java8 ºÎÅÍ Áö¿øÇϸç, ÇÔ¼öÇü ÀÎÅÍÆäÀ̽º¸¦ ÁöÁ¤ÇÏ´Â ¾î³ëÅ×À̼ÇÀÔ´Ï´Ù.
- ¸¸¾à ¸Þ¼µå°¡ Á¸ÀçÇÏÁö ¾Ê°Å³ª, 1°³ ÀÌ»óÀÇ ¸Þ¼µå(default ¸Þ¼µå Á¦¿Ü)°¡ Á¸ÀçÇÒ °æ¿ì ÄÄÆÄÀÏ ¿À·ù¸¦ ¹ß»ý ½Ãŵ´Ï´Ù.
¾î³ëÅ×À̼ÇÀº ¾î¶»°Ô ±¸¼ºµÇ¾î ÀÖÀ»±î?
¸ÕÀú ¾î³ëÅ×À̼ÇÀÇ ±¸Á¶¸¦ º¸±â À§Çؼ ¾Æ·¡ÀÇ Äڵ带 Âü°íÇØ º¾´Ï´Ù. (¿¹¸¦ À§ÇØ ÀÛ¼ºµÈ Ä¿½ºÅÒ ¾î³ëÅ×À̼ÇÀÔ´Ï´Ù.)
1 | (ElementType.METHOD) |
¸ÕÀú 1¹ø, 2¹øÀÇ ¾î³ëÅ×ÀÌ¼Ç ¼±¾ð¿¡ ¾²ÀÎ ¾î³ëÅ×À̼ÇÀº ¸ÞŸ ¾î³ëÅ×À̼Ç(Meta Annotation)À̶ó Çϸç À̸¦ ÀÌ¿ëÇØ Ä¿½ºÅÒ ¾î³ëÅ×À̼ÇÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.
¸ÞŸ ¾î³ëÅ×À̼ÇÀÇ Á¾·ù
- @Retention
- ÀÚ¹Ù ÄÄÆÄÀÏ·¯°¡ ¾î³ëÅ×À̼ÇÀ» ´Ù·ç´Â ¹æ¹ýÀ» ±â¼úÇϸç, ƯÁ¤ ½ÃÁ¡±îÁö ¿µÇâÀ» ¹ÌÄ¡´ÂÁö¸¦ °áÁ¤ÇÕ´Ï´Ù.
- Á¾·ù´Â ´ÙÀ½°ú °°½À´Ï´Ù.
- RetentionPolicy.SOURCE : ÄÄÆÄÀÏ Àü±îÁö¸¸ À¯È¿. (ÄÄÆÄÀÏ ÀÌÈÄ¿¡´Â »ç¶óÁü)
- RetentionPolicy.CLASS : ÄÄÆÄÀÏ·¯°¡ Ŭ·¡½º¸¦ ÂüÁ¶ÇÒ ¶§±îÁö À¯È¿.
- RetentionPolicy.RUNTIME : ÄÄÆÄÀÏ ÀÌÈÄ¿¡µµ JVM¿¡ ÀÇÇØ °è¼Ó ÂüÁ¶°¡ °¡´É. (¸®Ç÷º¼Ç »ç¿ë)
- @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 : ŸÀÔ ¼±¾ð
- @Documented
- ÇØ´ç ¾î³ëÅ×À̼ÇÀ» Javadoc¿¡ Æ÷ÇÔ½Ãŵ´Ï´Ù.
- @Inherited
- ¾î³ëÅ×À̼ÇÀÇ »ó¼ÓÀ» °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù.
- @Repeatable
- Java8 ºÎÅÍ Áö¿øÇϸç, ¿¬¼ÓÀûÀ¸·Î ¾î³ëÅ×À̼ÇÀ» ¼±¾ðÇÒ ¼ö ÀÖ°Ô ÇØÁÝ´Ï´Ù.
¾î³ëÅ×À̼ÇÀº ±âº»ÀûÀ¸·Î ÀÎÅÍÆäÀ̽º ÇüŸ¦ ÃëÇÏ°í ÀÖÀ¸¸ç, ´ÜÁö interface ¾Õ¿¡ @ Ç¥½Ã¸¦ ÇØÁÝ´Ï´Ù.
¾î³ëÅ×À̼ÇÀÇ Çʵ忡¼´Â enum, StringÀ̳ª ±âº» ÀÚ·áÇü, ±âº» ÀÚ·áÇüÀÇ ¹è¿À» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
¾î³ëÅ×À̼ǿ¡ ´ëÇÑ ÀÌ·ÐÀûÀÎ ºÎºÐÀº ¿©±â±îÁöÀ̸ç, À̸¦ È°¿ëÇÏ¿© Ä¿½ºÅÒ ¾î³ëÅ×À̼ÇÀ» ÀÛ¼ºÇÏ´Â °ÍÀº ´ÙÀ½ Æ÷½ºÆ®¿¡¼ ´Ù·çµµ·Ï ÇÏ°Ú½À´Ï´Ù.