Java

[Java][Tutorial] 1-4. Learning the Java Language: Annotation

noahkim_ 2023. 10. 15. 02:47

The Java Tutorials have been written for JDK 8

 

4. Annotation

  • 프로그램에 메타데이터 정보를 제공하는 주석입니다.
  • 코드에 직접적인 영향을 주지 않습니다.

 

ElementType

public enum ElementType {    
    TYPE, /** Class, interface, enum, or record declaration */
    FIELD, /** Field declaration */    
    METHOD, /** Method declaration */    
    PARAMETER, /** Formal parameter declaration */    
    CONSTRUCTOR, /** Constructor declaration */    
    LOCAL_VARIABLE, /** Local variable declaration */    
    ANNOTATION_TYPE, /** Annotation interface declaration */    
    PACKAGE, /** Package declaration */         
    TYPE_PARAMETER, /** Type parameter declaration */    
    TYPE_USE, /** Use of a type */         
    MODULE, /** Module declaration. */         
    RECORD_COMPONENT; /** Record component */
}

 

RetentionPolicy

public enum RetentionPolicy {    
    SOURCE,  /** discarded by the compiler. */
    CLASS,   /** (default) need not be retained by the VM at run time */
    RUNTIME  /** retained by the VM at run time */
}

 

 

5. Interfaces and Inheritance

Interface

  • 클래스간의 통신에 대한 계약을 명시하는 reference type 입니다.
    • 인터페이스를 구현하는 구현체는 반드시 계약에 대한 구현을 해야 컴파일될 수 있습니다.
    • 클라이언트쪽에서는 상세 구현에 대해 알 필요가 없습니다.
  • 상수, 메서드만 가질수 있습니다.
    • static, default 키워드의 메서드가 허용됩니다.
    • 상태를 가질 수 없습니다.

 

Inheritance

  • 한 클래스가 다른 클래스의 속성과 메서드를 재사용할 수 있게 해줍니다.
  • 계층적 구조를 만들어 의미 있는 클래스 관계를 표현할 수 있습니다.

 

6. Numbers and Strings

Number

  • java.lang에 정의된 추상클래스로 여러 숫자형 클래스의 슈퍼클래스로 사용됩니다.
  • java의 기본숫자형 wrapper class를 제공합니다.

 

Autoboxing 

  • 자동적으로 컴파일러가 primitive type에 대응되는 wrapper class로 컨버팅하는 기능입니다.

 

Unboxing

  • 자동적으로 컴파일러가 wrapper class에 대응되는 primitive type로 컨버팅하는 기능입니다.

 

 

String

  • character의 연속적인 집합입니다.
  • 인스턴스를 double quotes로 끝나는 character 집합으로 초기화할 수 있습니다.
  • immutable 한 클래스입니다.

 

StringBuilder

  • 문자열을 변경할 수 있는 클래스입니다.
    • 내부적으로 연속적인 character를 보관하는 특정 길이의 array로 문자열을 다룹니다.
  • 동기화에 대한 보장이 없습니다.
  • null 값을 전달할 경우, NPE가 발생합니다. 

 

StringBuffer

  • 문자열을 변경할 수 있는 클래스입니다.
  • 동기화 처리가 되어있습니다.

 

7. Generics

  • 타입을 파라미터로 가지는 클래스나 인터페이스를 정의할 때 사용됩니다.
  • 제네릭을 사용하면 컴파일 타임에 타입 안전성을 제공하므로 런타임 오류를 방지하는 데 도움이 됩니다.

 

Type Parameter Naming Conventions

  • E: Element (주로 컬렉션에서 사용)
  • K: Key
  • N: Number
  • T: Type
  • V: Value
  • S, U, V 등: 2번째, 3번째, 4번째 타입을 나타낼 때 사용

 

Bounded Type Parameters

  • extends : 특정 타입이나 그 타입의 하위 클래스/인터페이스만 허용하도록 제한할 수 있습니다.
  • super : 특정 타입이나 그 타입의 상위 클래스/인터페이스만 허용하도록 제한할 수 있습니다.
public <U extends Number> void inspect(U u){

 

Type Inference

  • 인자를 기반으로 타입을 추론하는 기능입니다.
List<String> list = new ArrayList<>();

 

Type Erasure

  • 컴파일 타임에만 타입 제약 조건을 정의합니다.
  • 타입 정보가 런타임에 소거됩니다.
    • 예를 들어, List<Integer>와 List<String>은 컴파일 후에 모두 List로 변환됩니다.

 

 

출처