JAVA Annotation - ynjch97/YNJCH_WIKI GitHub Wiki

โ–ท @SuppressWarnings ("unused")

  • all : ๋ชจ๋“  ๊ฒฝ๊ณ ๋ฅผ ์–ต์ œ
  • cast : ์บ์ŠคํŠธ ์—ฐ์‚ฐ์ž ๊ด€๋ จ ๊ฒฝ๊ณ  ์–ต์ œ
  • dep-ann : ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•  ์ฃผ์„ ๊ด€๋ จ ๊ฒฝ๊ณ  ์–ต์ œ
  • deprecation : ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๋ฉ”์†Œ๋“œ ๊ด€๋ จ ๊ฒฝ๊ณ  ์–ต์ œ
  • fallthrough : switch๋ฌธ์—์„œ์˜ break ๋ˆ„๋ฝ ๊ด€๋ จ ๊ฒฝ๊ณ  ์–ต์ œ
  • finally : ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” finally ๋ธ”๋Ÿญ ๊ด€๋ จ ๊ฒฝ๊ณ  ์–ต์ œ
  • null : null ๋ถ„์„ ๊ด€๋ จ ๊ฒฝ๊ณ  ์–ต์ œ
  • rawtypes : ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋ถˆํŠน์ •์ผ ๋•Œ์˜ ๊ฒฝ๊ณ  ์–ต์ œ
  • unchecked : ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ์—ฐ์‚ฐ์ž ๊ด€๋ จ ๊ฒฝ๊ณ  ์–ต์ œ
  • unused : ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ๊ด€๋ จ ๊ฒฝ๊ณ  ์–ต์ œ

โ–ท ์‚ฌ์šฉ์ž ์ •์˜ Annotation ์ƒ์„ฑ ์‹œ ์“ฐ์ด๋Š” 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 ๋ถ€ํ„ฐ ์ง€์›)

โ–ท ์‚ฌ์šฉ์ž ์ •์˜ Annotation ์ƒ์„ฑ

  • @ ํ‘œ์‹œ๋ฅผ ๋ถ™์—ฌ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ
// ์ •์ˆ˜ ๊ฐ’ ์ฃผ์ž… ์˜ˆ์ œ
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InsertIntData {
    int data() default 0;
}
  • myAge ์—๋Š” 30์œผ๋กœ ๊ฐ’์„ ์ฃผ์ž…, defaultAge ์—๋Š” ๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ 0์ด ์ฃผ์ž…๋จ
public class AnnotationExam01 {
    @InsertIntData(data = 30)
    private int myAge;

    @InsertIntData
    private int defaultAge;

    public int getMyAge() {
        return myAge;
    }

    public int getDefaultAge() {
        return defaultAge;
    }
}

โ–ท ์‚ฌ์šฉ์ž ์ •์˜ Annotation ์˜ˆ์ œ

@Target(value={ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Component
public @interface AnnotationTest {
	public enum ResultType {JSON, OBJECT};
	public enum CheckSession {TRUE, FALSE};
	
	ResultType ResultType() default ResultType.JSON;
	CheckSession adminSession() default CheckSession.TRUE;
	CheckSession frontSession() default CheckSession.TRUE;
	
	boolean setTest1() default false;
	String[] setTest2() default {};
	int setTest3() default 0;
}
@AnnotationTest(adminSession=AnnotationTest.CheckSession.FALSE)
@RequestMapping("/admin/memberList.do")
public @ResponseBody TestVO selectMemberList(@RequestParam Map<String, Object> hashMap, HttpServletRequest request) throws Exception {

// (์ƒ๋žต)