🍡 java

JAVA | Annotationκ³Ό κ·Έ μ’…λ₯˜

c0zi 2023. 5. 24. 10:44

 πŸ€” Annotation : μ—λ„ˆν…Œμ΄μ…˜μ΄λž€ ?


μžλ°” μ• λ„ˆν…Œμ΄μ…˜(Java Annotation) : μžλ°” μ†ŒμŠ€ μ½”λ“œμ— μΆ”κ°€ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆλŠ” λ©”νƒ€λ°μ΄ν„°μ˜ 일쒅

 

- 보톡 @ 기호λ₯Ό μ•žμ— λΆ™μ—¬μ„œ μ‚¬μš©

- JDK 1.5 버전 μ΄μƒμ—μ„œ μ‚¬μš© κ°€λŠ₯

- 클래슀 νŒŒμΌμ— μž„λ² λ””λ“œλ˜μ–΄ μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μƒμ„±λœ ν›„ μžλ°” 가상머신에 ν¬ν•¨λ˜μ–΄ μž‘λ™

 

μ–΄λ…Έν…Œμ΄μ…˜μ€ @μ–΄λ…Έν…Œμ΄μ…˜μ΄λ¦„(속성1=κ°’1, 속성2=κ°’2, ...) ν˜•νƒœλ‘œ μ‚¬μš©ν•˜λ©°, 주둜 클래슀, λ©”μ„œλ“œ, λ³€μˆ˜, λ§€κ°œλ³€μˆ˜ 등에 λΆ€μ°©ν•˜μ—¬ μ‚¬μš©λ©λ‹ˆλ‹€.

 

* 메타데이터 : μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ²˜λ¦¬ν•  데이터가 μ•„λ‹Œ, 컴파일 κ³Όμ •κ³Ό μ‹€ν–‰ κ³Όμ •μ—μ„œ μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ”μ§€ μ•Œλ €μ£ΌλŠ” μΆ”κ°€ 정보

 

 

πŸ“Œ μ—λ„ˆν…Œμ΄μ…˜μ˜ ν•„μš”μ„± 


기쑴의 파일 관리 방법

과거의 파일 κ΄€λ¦¬λŠ” μžλ°” μ½”λ“œμ™€ κ΄€λ ¨ μ„€μ • νŒŒμΌμ„ λ”°λ‘œ μ €μž₯ν•˜κ³ , κ·Έ λ•Œλ§ˆλ‹€ version을 κ΅¬λΆ„ν•˜μ—¬ κ΄€λ¦¬ν–ˆλ‹€.

μœ„μ€ 관리방법은 λ‹€μŒκ³Ό 같은 단점이 μžˆμ—ˆλ‹€.

  1. μ΄μš©μžκ°€ μ„€μ • νŒŒμΌμ„ μ—…λ°μ΄νŠΈ ν•˜μ§€ μ•ŠλŠ” 어렀움
  2. μ„€μ •κ³Ό μ½”λ“œκ°€ λΆ„λ¦¬λ˜μ–΄μžˆμ–΄ κ°œλ°œμ— λŒ€ν•œ 어렀움

 

κ·Έ ν•΄κ²°μ±…μœΌλ‘œ λ‹€μŒκ³Ό 같은 방법이 μ œμ‹œλ˜μ—ˆλ‹€.

 

μ–΄λ…Έν…Œμ΄μ…˜μ˜ 적용

 

이둜 인해 ν•˜λ‚˜μ˜ νŒŒμΌμ—μ„œ μ½”λ“œμ™€ 섀정을 관리할 수 있게 λ˜μ—ˆλ‹€.

 

 

πŸ“‘ μ–΄λ…Έν…Œμ΄μ…˜μ˜ μ’…λ₯˜


  • ν‘œμ€€(λ‚΄μž₯) μ–΄λ…Έν…Œμ΄μ…˜ : μžλ°”κ°€ 기본적으둜 μ œκ³΅ν•΄μ£ΌλŠ” μ–΄λ…Έν…Œμ΄μ…˜
  • 메타 μ–΄λ…Έν…Œμ΄μ…˜ : μ–΄λ…Έν…Œμ΄μ…˜μ„ μœ„ν•œ μ–΄λ…Έν…Œμ΄μ…˜ 
  • μ‚¬μš©μžμ •μ˜ μ–΄λ…Έν…Œμ΄μ…˜ : μ‚¬μš©μžκ°€ 직접 μ •μ˜ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜

 

1. 빌트인 μ–΄λ…Έν…Œμ΄μ…˜(Built-in Annotation)

 

@Override

  • μƒμœ„ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ˜ λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œν•¨μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μƒμœ„ 클래슀(λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€)μ—μ„œ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό 찾을 수 μ—†λ‹€λ©΄ 컴파일 μ—λŸ¬λ₯Ό λ°œμƒ μ‹œν‚΅λ‹ˆλ‹€
public class Parent {
    public void mother() {
    }

    public void father() {
    }
}

public class child extends Parent {
    @Override
    public void mother() { // good override.
        System.out.println("Mom");
    }

    @Override
    public void daughter() { // Compile-time error.
    }
}

 

@Deprecated

  • ν•΄λ‹Ή μš”μ†Œ(클래슀, λ©”μ„œλ“œ, ν•„λ“œ λ“±)κ°€ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • μ‚¬μš©ν•  경우 μ»΄νŒŒμΌ κ²½κ³ λ₯Ό λ°œμƒ ν‚€μ‹­λ‹ˆλ‹€.

 

@SuppressWarnings

  • 컴파일러의 κ²½κ³ λ₯Ό λ¬΄μ‹œν•˜λ„λ‘ μ§€μ •ν•©λ‹ˆλ‹€.

 

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

  • ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜μ„ 상속 κ°€λŠ₯ν•˜λ„λ‘ μ§€μ •ν•©λ‹ˆλ‹€.

 

 

3. μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜(Custom Annotation)

κ°œλ°œμžκ°€ 직접 μ •μ˜ν•œ μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λ§žλŠ” μ‚¬μš©μž μ •μ˜ μ–΄λ…Έν…Œμ΄μ…˜μ„ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

@Target(ElemetType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ObjectId { // Annotation μ •μ˜
}

public class SkillSpec { // Annotation 적용
	//
    @ObjectId
    private String old;
    private String name;
    ...
}

 

πŸ“‹ μ°Έκ³  자료


1. https://velog.io/@jkijki12/annotation

 

[Java] μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뭔데??

μžλ°” μ–΄λ…Έν…Œμ΄μ…˜μ— λŒ€ν•΄μ„œ κ³΅λΆ€ν•˜μž!!

velog.io

 

2. μžλ°”μ˜ 정석- 남ꢁ성

 

3. https://bangu4.tistory.com/199

 

[Java] Annotation μ–΄λ…Έν…Œμ΄μ…˜ - 총정리

1. μ–΄λ…Έν…Œμ΄μ…˜μ΄λž€? μžλ°” μ–΄λ…Έν…Œμ΄μ…˜(Java Annotation) μ—λ…Έν…Œμ΄μ…˜μ€ μ£Όμ„μ΄λΌλŠ” 의미λ₯Ό κ°€μ§„λ‹€. μžλ°” μ†ŒμŠ€ μ½”λ“œμ— 사이에 @ 기호λ₯Ό μ•žμ— λΆ™μ—¬μ„œ μ‚¬μš©ν•˜λŠ”λ°, JDK 1.5 버전 μ΄μƒμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€. μ–΄

bangu4.tistory.com

 

4. https://techblog.woowahan.com/2684/

 

μ‹œμ˜μ μ ˆν•œ μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜ | μš°μ•„ν•œν˜•μ œλ“€ κΈ°μˆ λΈ”λ‘œκ·Έ

{{item.name}} layout: post title: "μ‹œμ˜μ μ ˆν•œ μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜" description: "custom annotation으둜 κ°„κ²°ν•˜κ³  μ˜λ„κ°€ λͺ…ν™•ν•œ μ½”λ“œ μž‘μ„±ν•˜κΈ°" author: allen.song date: 2020-06-26 15:50:00 +0900 categories: experience published: t

techblog.woowahan.com

⇒ μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜μ„ μ–΄λ–»κ²Œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€λ₯Ό μ˜ˆμ‹œλ₯Ό λ“€μ–΄ μ„€λͺ…ν•΄μ£Όμ‹œλŠ”λ°, μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜μ„ 자주 μ‚¬μš©ν•˜λŠ” 뢄듀이라면 ν•œλ²ˆμ―€ μ½μ–΄λ³Όλ§Œν•œ λ‚΄μš©μΈ 것 κ°™μ•„ 여기에 참고둜 λ„£μ–΄λ‘”λ‹€.