🎽 μΈν”„λŸ° μ›Œλ°μ—… 클럽 0κΈ° λ°±μ—”λ“œ 첫 번째 과제

nyangΒ·2024λ…„ 2μ›” 19일
0

μΈν”„λŸ°

λͺ©λ‘ 보기
1/7
post-thumbnail

좜처
https://inf.run/XKQg

1. μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λŠ” 이유(효과)λŠ” λ¬΄μ—‡μΌκΉŒ?

μ–΄λ…Έν…Œμ΄μ…˜μ€ 클래슀, λ©”μ†Œλ“œ, ν•„λ“œ 및 λ§€κ°œλ³€μˆ˜μ™€ 같은 μ½”λ“œ μš”μ†Œμ— μΆ”κ°€ν•  수 μžˆλŠ” 메타 λ°μ΄ν„°μ˜ ν˜•νƒœμ΄λ©°, @ 둜 μ‹œμž‘ν•˜κ³  κ·Έ 뒀에 μ–΄λ…Έν…Œμ΄μ…˜ 이름이 μžˆλ‹€.
μ–΄λ…Έν…Œμ΄μ…˜μ€ μ½”λ“œμ— λŒ€ν•œ μΆ”κ°€ 정보λ₯Ό μ œκ³΅ν•˜λ©° 반볡적인 μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.
λ˜ν•œ, λŸ°νƒ€μž„μ— μ½”λ“œμ˜ λ™μž‘μ— 직접적인 영ν–₯을 주지 μ•ŠμœΌλ©°, λ‹€μ–‘ν•œ 툴과 ν”„λ ˆμž„μ›Œν¬μ™€μ˜ 톡합을 κ°œμ„ ν•  수 μžˆλ‹€.

μ˜ˆμ‹œλ‘œ μŠ€ν”„λ§ μ–΄λ…Έν…Œμ΄μ…˜μ— λŒ€ν•΄ μ„€λͺ…ν•˜κ³ μž ν•œλ‹€.
μŠ€ν”„λ§ μ–΄λ…Έν…Œμ΄μ…˜μ—λŠ” @Configuration , @Bean, @Component, @Autowired λ“±μ˜ λ§Žμ€ μ–΄λ…Έν…Œμ΄μ…˜μ΄ μžˆλ‹€.

μŠ€ν”„λ§ μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λ©΄ 개발 ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°„μ†Œν™”ν•˜κ³  μ½”λ“œ 가독성을 높이며 λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈ configuration을 μ€„μ—¬μ£ΌλŠ” 이점이 μžˆλ‹€.

  • 과거에 Springμ—μ„œ Beanκ³Ό dependenciesλ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ xml configuration νŒŒμΌμ— 크게 μ˜μ‘΄ν–ˆλ‹€. ν•˜μ§€λ§Œ ν˜„μž¬μ—λŠ” μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ μžλ°” μ½”λ“œμ— 직접 λ™μΌν•œ configuration을 μˆ˜ν–‰ν•  수 μžˆμœΌλ―€λ‘œ xml 파일의 ν•„μš”μ„±μ΄ μ€„μ–΄λ“€κ²Œ λ˜μ—ˆκ³  가독성이 ν–₯μƒλ˜μ—ˆλ‹€.
  • @Autowired 와 같은 μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•¨μ— 따라 μˆ˜λ™μœΌλ‘œ DI μ½”λ“œλ₯Ό μž‘μ„±ν•  ν•„μš” 없이 Spring이 μžλ™μœΌλ‘œ ν•„μš”ν•œ 곳에 DIλ₯Ό ν•΄μ€€λ‹€.
  • Spring은 νŠΉμ • λ™μž‘μ΄λ‚˜ configuration을 μΊ‘μŠν™”ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ³ μœ ν•œ μš”κ΅¬ 사항에 맞게 μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜μ„ λ§Œλ“€ 수 μžˆλ‹€.

2. λ‚˜λ§Œμ˜ μ–΄λ…Έν…Œμ΄μ…˜μ€ μ–΄λ–»κ²Œ λ§Œλ“€ 수 μžˆμ„κΉŒ?

μžλ°”μ—μ„œ μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜μ€ 클래슀, λ©”μ†Œλ“œ, ν•„λ“œμ™€ 같은 λ‹€μ–‘ν•œ ν”„λ‘œκ·Έλž¨ μš”μ†Œμ— μ μš©ν•  수 μžˆλŠ” μ‚¬μš©μž μ •μ˜ 메타데이터 λ§ˆμ»€μ΄λ‹€.

컴파일 νƒ€μž„ λ˜λŠ” λŸ°νƒ€μž„μ— 툴과 ν”„λ ˆμž„μ›Œν¬μ— μ½”λ“œμ— λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•  수 μžˆλ‹€.
μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜μ€ μžλ°”μ˜ κΈ°λ³Έ 제곡 μ–΄λ…Έν…Œμ΄μ…˜(e.g. @Override, Deprecated, SuppressWarnings )κ³Ό μœ μ‚¬ν•œ λ°©μ‹μœΌλ‘œ μž‘λ™ν•˜μ§€λ§Œ, κ°œλ°œμžλŠ” νŠΉμ • μš”κ΅¬ 사항에 맞게 μ–΄λ…Έν…Œμ΄μ…˜μ„ μ •μ˜ν•  수 μžˆλ‹€.

메타 λ°μ΄ν„°λŠ” κ΅¬ν˜„ μ„ΈλΆ€ 사항을 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄μ§€ μ•Šκ³ λ„ μ½”λ“œμ˜ λͺ©μ , λ™μž‘, μ œμ•½μ‘°κ±΄μ„ μ΄ν•΄ν•˜λŠ”λ° 도움이 λ˜λ―€λ‘œ μ½”λ“œ 가독성과 μœ μ§€ λ³΄μˆ˜μ„±μ„ κ°œμ„ ν•˜κ³  였λ₯˜ λ°œμƒ κ°€λŠ₯성을 쀄여쀀닀.

μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜μ€ μ½”λ“œμ— 메타 데이터λ₯Ό μΆ”κ°€ν•˜λŠ”λ° μ€‘μš”ν•œ 역할을 ν•œλ‹€.

@Animal(name= "FuBao", birth_date="2020-07-20")
public class Zoo{
}

@Animal λΌλŠ” μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜μ„ λ§Œλ“€μ–΄μ„œ Zoo ν΄λž˜μŠ€μ— μ μš©ν•˜λ©΄, 동물 이름과 νƒœμ–΄λ‚œ λ‚ μ§œμ— λŒ€ν•œ 메타 데이터λ₯Ό μ œκ³΅ν•œλ‹€.

이 μ½”λ“œλ₯Ό 읽은 μ‚¬λžŒμ€ 정보λ₯Ό λΉ λ₯΄κ²Œ μˆ˜μ§‘ν•˜μ—¬ μ½”λ“œ λ² μ΄μŠ€μ— λŒ€ν•œ 이해λ₯Ό 높일 수 μžˆλ‹€.

μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜ λ§Œλ“œλŠ” 방법

1. μ–΄λ…Έν…Œμ΄μ…˜ μ •μ˜ν•˜κΈ°

@interface ν‚€μ›Œλ“œ 뒀에 μ–΄λ…Έν…Œμ΄μ…˜ 이름을 μ λŠ”λ‹€.

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyCustomAnnotation {
    String value() default "xxx";
    int count() default 1;
}

@Retention(RetentionPolicy.RUNTIME): λ¦¬ν”Œλ ‰μ…˜μ„ 톡해 λŸ°νƒ€μž„μ— μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ 보μž₯ν•œλ‹€.
@Target(ElementType.METHOD): ν•΄λ‹Ή μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜μ„ λ©”μ†Œλ“œμ— μ μš©ν•  수 μžˆλ„λ‘ μ§€μ •ν•œλ‹€.

2. Elements 및 Attributes μΆ”κ°€

μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜ λ‚΄μ—μ„œ elements와 attributesλ₯Ό μΆ”κ°€ν•  수 μžˆλ‹€.

String value() default "Default Value"; λŠ” 기본값이 β€œxxx”인 valueλΌλŠ” μ΄λ¦„μ˜ μ–΄λ…Έν…Œμ΄μ…˜ 멀버와 int count() default 1; λŠ” 기본값이 1인 countλΌλŠ” μ΄λ¦„μ˜ μ–΄λ…Έν…Œμ΄μ…˜ 멀버λ₯Ό μ •μ˜ν•œ 것이닀.

3. μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜ μ‚¬μš©

μ •μ˜κ°€ μ™„λ£Œλ˜λ©΄ μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜μ„ λ©”μ†Œλ“œλ‚˜ ν΄λž˜μŠ€μ— μ‚¬μš©ν•  수 있게 λœλ‹€.

public class MyService {

    @MyCustomAnnotation(value = "book", count = 5)
    public void customMethod() {
        // Method implementation
    }
}

@MyCustomAnnotation 의 valueμ—λŠ” β€œbook”, countμ—λŠ” 5λΌλŠ” 값을 μ§€μ •ν•˜κ³  ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜λ©΄, λŸ°νƒ€μž„ μ‹œμ μ— μ–΄λ…Έν…Œμ΄μ…˜ 정보λ₯Ό 읽을 수 있게 λœλ‹€.


πŸ“š 참고자료
Why use Spring AnnotationsΒ ?
Custom Spring Annotations, How To And Why?

profile
🐾

0개의 λŒ“κΈ€