[백기선 자바] Enum과 애노테이션

[백기선 자바] Enum과 애노테이션

작성일자
Aug 13, 2023
태그
SUB PAGE
프로젝트
백기선 자바
책 종류

[자바 라이브 스터디] 11주차 - Enum과 애노테이션

1. Enum

  • 정의) 서로 관련된 상수를 편리하게 선언하기 위한 것
    • 예시)
      • enum 사용 x
        • enum 사용 o
        • 특징)
          • JDK1.5부터 새로 추가됨
          • 타입에 안전한 열거형(typesafe eum)
            • 자바 Enum은 값뿐만 아니라 타입도 관리해서 논리적인 오류 줄일 수 있음
            • 값 같아도 타입이 다르면 컴파일 에러 발생
            • 상수와 달리 열거형 상수 사용 시, 상수 값이 바뀌어도 기존 소스 다시 컴파일할 필요 없음
            • 비교 시 ==, compareTo() 사용 가능. <, > 같은 비교 연산자 사용 불가능.
            • switch문의 조건식에 사용할 때 열거형 이름은 적지 않고 상수 이름만 적어야 함
              • java.lang.Enum
                • 모든 자바 열거체의 공통된 조상 클래스로 열거체를 조작하기 위한 다양한 메소드 가짐
                • 제공하는 메소드
                  • 메서드
                    설명
                    Class<E> getDeclaringClass()
                    열거형의 Class객체 반환
                    String name()
                    열거형 상수의 이름을 문자열로 반환
                    int ordinal()
                    열거형 상수가 정의된 순서 반환(0부터 시작)
                    T valueOf(Class<T> enumType, String name)
                    name과 일치하는 열거형 상수 반환
                  • cf) 모든 열거체에 컴파일러가 자동으로 추가해 주는 메소드
                    • static E values() → 열거형의 모든 상수를 배열에 담아 반환
                    • static E valueOf(String name) → name과 일치하는 열거형 상수 반환
                • 예시)

              2. 애노테이션

              • 정의) 프로그램 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것
                • 특징)
                  • 주석처럼 프로그래밍 언어에 영향 미치지 않으면서 다른 프로그램에게 유용한 정보 제공함
                  • JDK에서 제공하는 애너테이션은 java.lang.annotation 패키지에 포함되어 있음
                  • 표준 애너테이션은 주로 컴파일러에게 유용한 정보 제공함
                    • @Override
                      컴파일러에게 오버라이딩하는 메서드라는 것을 알림
                      @Deprecated
                      앞으로 사용하지 않을 것을 권장하는 대상에 붙임
                      @SuppressWarnings
                      컴파일러의 특정 경고메시지가 나타나지 않게 해줌
                      @SafeVarargs
                      지네릭스 타입의 가변인자에 사용함
                      @Functionallnterface
                      함수형 인터페이스라는 것을 알림
                      @Native
                      native 메서드에서 참조되는 상수 앞에 붙임
                  • 메타 에너테이션은 새로운 에너테이션 정의할 때 사용함
                    • @Retention
                      애너테이션이 유지되는 범위를 지정하는데 사용함
                      @Target
                      애너테이션이 적용 가능한 대상을 지정하는데 사용함
                      @Documented
                      애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 함
                      @Inherited
                      애너테이션이 자손 클래스에 상속되도록 함
                      @Repeatable
                      애너테이션을 반복해서 적용할 수 있게 함
                    • @Retention
                      • 정의) 애너테이션이 유지되는 범위를 지정하는데 사용함
                      • 특징)
                        • 유지 정책 종류
                          • SOURCE
                            소스 파일에만 존재. 클래스 파일에는 존재하지 않음
                            CLASS (default)
                            클래스 파일에 존재. 실행 시에 사용 불가
                            RUNTIME
                            클래스 파일에 존재. 실행 시에 사용 가능
                          • SOURCE → 컴파일러가 사용하는 대부분의 애너테이션의 유지 정책
                          • CLASS → 컴파일러가 애너테이션 정보를 클래스 파일에 저장할 순 있지만, 클래스 파일이 JVM에 로딩될 때 애너테이션 정보가 무시되어 실행 시에 사용 불가함
                          • RUNTIME → Reflection 통해 클래스 파일에 저장된 애너테이션 정보 읽어 처리 가능해짐
                        • 지역 변수에 붙은 애너테이션은 컴파일러만 인식할 수 있어서 RUNTIME 유지정책인 애너테이션 붙여도 실행 시에 인식되지 않음
                    • @Target
                      • 정의) 애너테이션이 적용 가능한 대상을 지정하는데 사용함
                      • 예시) @Traget({TYPE, FILED})
                      • 특징)
                        • 적용 대상의 종류
                          • ANNOTATION_TYPE
                            애너테이션
                            CONSTRUCTOR
                            생성자
                            FIELD
                            필드(멤버변수, enum 상수)
                            LOCAL_VARIABLE
                            지역변수
                            METHOD
                            메서드
                            PACKAGE
                            패키지
                            PARAMETER
                            매개변수
                            TYPE
                            타입(클래스, 인터페이스, enum)
                            TYPE_PARAMETER
                            타입 매개변수
                            TYPE_USE
                            타입이 사용되는 모든 곳
                    • @Documented
                      • 정의) 애너테이션 정보가 javadoc으로 작성된 문서에 포함되게 함
                      • 특징) 자바에서 제공하는 기본 애너테이션 중 @Override@SuppressWarnings를 제외하곤 모두 해당 어노테이션이 붙어 있음
                      •