πŸ’»
Albert's Til
GitHub
  • 맀일맀일 μ‘°κΈˆμ”© μ„±μž₯ν•˜κΈ°
    • README
    • CS
      • Network
      • HTTP
        • NO-CACHE
      • 였λ₯˜ μ½”λ“œ
      • ORM 도ꡬ
      • Design Pattern
        • CQRS Pattern
          • Event Sourcing and CQRS pattern
        • Builder Pattern
    • DB
      • MySQL
        • Timeline
        • Pagination
        • Index
        • Database Performance Optimization Strategies
        • B+ tree
        • MySQL Connectors VS MySQL Shell(Scripting) VS MySQL Workbench
        • MySQL Storage Engine Architecture
      • Normalization & Denormalization
      • JPA
        • @Transactional
        • Why JPA?
        • About JPA
        • N+1 Issue
        • Index
        • ElementCollection&CollectionTable
        • orphanRemoval
        • CascadeType
        • Use Subselect
        • Dynamic Instance Creation
        • Paging
        • Order
        • Spefication
        • mappedBy
      • MongoDB
        • ObjectId
      • Why MySQL?
      • ACID properties of transactions
      • Between JPA and JDBC
      • Identifiers in Hibernate/JPA
    • Java
      • Jackson de/serialize
      • Collections.singletonList() vs List.of()
      • Manage dependencies in Gradle
      • Logging Level
      • Bean Validation
      • JVM Internals
        • Threads
          • Frame
        • Shared Between Threads
          • Classloader
            • Class Loader Hierarchy
            • Loading Linking Initialization
      • Java Collection Framework
      • Annotation
      • Generic
      • λ””λ―Έν„° 법칙
    • Spring
      • Caching
      • Spring Integration Overview
        • ThreadPollTaskExecutor
        • Messaging Bridge
        • Channel Adapter
        • Poller
        • Configuration and @EnableIntegration
        • Message Endpoints
        • Message Channels
      • HATEOAS
      • @Autowired vs Constructor Dependency Injection
      • Spring Security
        • JWT 토큰 μ‚¬μš©ν•œ 인가
        • OAuth 2 Login
        • OAuth 2 인증
        • 인가
        • 인증
        • PasswordEncoder
      • IoC Container
      • Filter,Interceptor,AOP,Argument Resolver
      • Spring Annotation
      • About Spring
    • Kafka
      • Error Channel
    • Infra
      • Scale Up || Scale Out
      • Docker
        • Dockerfile
        • Docker Hub Deploy
        • Command
      • Cloud μœ ν˜•
        • Infrastructure as a Service
        • Platform as a Service
        • Software as a Service
      • 무쀑단 배포
        • μ—”μ§„μ—‘μŠ€(Nginx)
      • μ½”λ“œ μžλ™ 배포
        • Technical
      • AWS EC2
        • PEM(Privacy Enhanced Mail) ν‚€
      • AWS RDS
      • AWS S3
    • CodeSquad
      • Spring Boot Project 1μ£Όμ°¨ 회고
      • Spring Boot Project 2μ£Όμ°¨ 회고
      • Spirng Boot Project 3μ£Όμ°¨ 회고
      • Spring Boot Project 4μ£Όμ°¨ 회고
    • Foody Moody ν”„λ‘œμ νŠΈ
      • Query Performance Comparison
      • HeartCount Asynchronous Issue
      • DeferredResult
      • ResponseBodyEmitter
      • SseEmitter (Spring)
      • Server-Sent Events (SSE)
      • 기술 μŠ€νƒ 적용 이유
      • NO-CACHE(HTTP)
      • Transactional
    • DDD
      • AggregateId
    • Test
      • RestAssured
    • Coding and Algorithmic Problems
      • 819. Most Common Word
      • 344. Reverse String
      • 125. Valid Palindrome
      • 937. Reorder Data in Log Files
    • Node
      • Async... Await...
      • Custom Transactional Decorator Challenger
    • Python
      • Python Basic Grammar
        • Comments and Input/Output
        • Variable
        • Data type
        • Operations and syntax
        • List,Tuple,Dictionary,Set
        • Function
        • Conditional statement
        • Loop
    • HTML
      • HTML Basic
      • HTML Basic Tags
      • HTML Form Tags
      • HTML Table Tags
    • CSS
      • CSS Basic
      • CSS Practice
Powered by GitBook
On this page
  • Built-in Annotation
  • Meta-Annotations
  • λ‚˜λ§Œμ˜ μ–΄λ…Έν…Œμ΄μ…˜ λ§Œλ“€κΈ° (@Component)
  • Reference

Was this helpful?

  1. 맀일맀일 μ‘°κΈˆμ”© μ„±μž₯ν•˜κΈ°
  2. Java

Annotation

Annotationμ΄λž€ μ£Όμ„μ΄λž€ 뜻으둜, μΈν„°νŽ˜μ΄μŠ€λ₯Ό 기반으둜 ν•œ 문법이닀. μ£Όμ„κ³ΌλŠ” κ·Έ 역할이 λ‹€λ₯΄μ§€λ§Œ μ£Όμ„μ²˜λŸΌ μ½”λ“œμ— 달아 ν΄λž˜μŠ€μ— νŠΉλ³„ν•œ 의미λ₯Ό λΆ€μ—¬ν•˜κ±°λ‚˜ κΈ°λŠ₯을 μ£Όμž…ν•  수 μžˆλ‹€. 또 ν•΄μ„λ˜λŠ” μ‹œμ μ„ μ •ν•  μˆ˜λ„ μžˆλ‹€.(Rentention Policy) Annotationμ—λŠ” 크게 μ„Έ κ°€μ§€ μ’…λ₯˜κ°€ μ‘΄μž¬ν•œλ‹€. JDK 에 λ‚΄μž₯λ˜μ–΄ μžˆλŠ” built-in annotationκ³Ό annotation에 λŒ€ν•œ 정보λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•œ annotation인 Meta-annotation 그리고 κ°œλ°œμžκ°€ 직접 λ§Œλ“€μ–΄ λ‚΄λŠ” Custom Annotation이 μžˆλ‹€.

Annotations은 metadataλ₯Ό ꡬ문과 μ—°κ²°ν•˜λŠ” 클래슀 , λ©”μ„œλ“œ λ˜λŠ” ν•„λ“œμ™€ 같은 Java ꡬ문에 μ μš©λ˜λŠ” λ°μ½”λ ˆμ΄ν„°μž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ°μ½”λ ˆμ΄ν„°λŠ” 양성이며 자체적으둜 μ–΄λ–€ μ½”λ“œλ„ μ‹€ν–‰ν•˜μ§€ μ•Šμ§€λ§Œ λŸ°νƒ€μž„ ν”„λ ˆμž„μ›Œν¬ λ˜λŠ” μ»΄νŒŒμΌλŸ¬μ—μ„œ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ’€ 더 κ³΅μ‹μ μœΌλ‘œ λ§ν•˜λ©΄ Java μ–Έμ–΄ 사양(JlS), μ„Ήμ…˜ 9.7μ—μ„œ λ‹€μŒκ΄€ 같은 μ •μ˜λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

An anotation is a marker which associates information with a program construct, but has no effect at run time

Built-in Annotation

  • @Override

    • λ©”μ„œλ“œκ°€ μƒμ†λœ λ©”μ„œλ“œμ˜ λ™μž‘μ„ μž¬μ •μ˜ν•˜κ±°λ‚˜ λŒ€μ²΄ν•¨μ„ λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

  • @FunctionalInterface

    • μΈν„°νŽ˜μ΄μŠ€μ— ν•˜λ‚˜μ˜ λ©”μ„œλ“œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

  • @SuppressWarnings

    • μ½”λ“œμ˜ μΌλΆ€μ—μ„œ νŠΉμ • κ²½κ³ λ₯Ό λ¬΄μ‹œν•˜κ³  μ‹Άλ‹€λŠ” 것을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

  • @SafeVarargs

    • varargs μ‚¬μš©κ³Ό κ΄€λ ¨λœ κ²½κ³  μœ ν˜•μ— μ μš©λ©λ‹ˆλ‹€.

  • @Deprecated

    • APIλ₯Ό 더 이상 μ‚¬μš©ν•˜μ§€ μ•Šλ„λ‘ ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Meta-Annotations

  • @Target

    • μ μš©ν•  수 μžˆλŠ” λŒ€μƒμ„ μ„€λͺ…ν•©λ‹ˆλ‹€.

  • @Retention

    • μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ μœ μ§€λ˜μ–΄μ•Ό ν•˜λŠ” 기간을 μ„€λͺ…ν•©λ‹ˆλ‹€.

    • RetentionPolicy.SOURCE – μ»΄νŒŒμΌλŸ¬μ™€ λŸ°νƒ€μž„ λͺ¨λ‘μ—μ„œ λ³Ό 수 μ—†μŠ΅λ‹ˆλ‹€.

    • RetentionPolicy.CLASS – μ»΄νŒŒμΌλŸ¬μ—μ„œ λ³Ό 수 있음

    • RetentionPolicy.RUNTIME – μ»΄νŒŒμΌλŸ¬μ™€ λŸ°νƒ€μž„μ—μ„œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

  • @Inherited

    • μƒμœ„ μœ ν˜•μ— μ μš©λ˜λŠ” 경우 ν•˜μœ„ μœ ν˜•μ— μ˜ν•΄ μƒμ†λ˜μ–΄μ•Ό 함을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

  • @Documented

    • 기본적으둜 JavaλŠ” Javadocsμ—μ„œ @Annotation μ‚¬μš©μ„ λ¬Έμ„œν™”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    • κ·ΈλŸ¬λ‚˜ @Documented 주석을 μ‚¬μš©ν•˜μ—¬ Java의 κΈ°λ³Έ λ™μž‘μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • @Repeatable

    • λ™μΌν•œ μ»¨ν…μŠ€νŠΈμ—μ„œ μ—¬λŸ¬ 번 μ μš©ν•  수 μžˆμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 즉 ν΄λž˜μŠ€λŠ” λ™μΌν•œ 주석을 두 번 이상 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λ§Œμ˜ μ–΄λ…Έν…Œμ΄μ…˜ λ§Œλ“€κΈ° (@Component)

@Target({ElementType.TYPE})  // 이 μ–΄λ…Έν…Œμ΄μ…˜μ€ νƒ€μž… 레벨(클래슀, μΈν„°νŽ˜μ΄μŠ€, μ—΄κ±°ν˜•)에 μ μš©λ©λ‹ˆλ‹€.
@Retention(RetentionPolicy.RUNTIME)  // μ–΄λ…Έν…Œμ΄μ…˜ 정보가 λŸ°νƒ€μž„κΉŒμ§€ μœ μ§€λ©λ‹ˆλ‹€, 즉 μ‹€ν–‰ μ‹œκ°„ λ™μ•ˆ 정보에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
@Documented  // μ–΄λ…Έν…Œμ΄μ…˜ 정보가 JavaDoc에 ν¬ν•¨λ˜μ–΄ λ¬Έμ„œν™”λ©λ‹ˆλ‹€.
@Indexed  // μŠ€ν”„λ§μ˜ μ»΄ν¬λ„ŒνŠΈ μŠ€μΊλ‹ λ©”μ»€λ‹ˆμ¦˜μ΄ 이 μ–΄λ…Έν…Œμ΄μ…˜μ„ κ°€μ§„ 클래슀λ₯Ό μ‰½κ²Œ μΈλ±μ‹±ν•˜κ³  찾을 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
public @interface Component {
    String value() default "";  // μ–΄λ…Έν…Œμ΄μ…˜ μ‚¬μš© μ‹œ μ„ νƒμ μœΌλ‘œ μ§€μ •ν•  수 μžˆλŠ” κ°’, 주둜 빈의 μ΄λ¦„μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
}

Reference

Last updated 1 year ago

Was this helpful?

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Java#annotation
https://dzone.com/articles/5-annotations-every-java-developer-should-know
https://dzone.com/articles/what-are-meta-annotations-in-java
https://www.baeldung.com/java-default-annotations
https://docs.oracle.com/javase/tutorial/java/annotations/predefined.html