베어_
TechBear
베어_
전체 방문자
오늘
어제
  • 분류 전체보기 (336)
    • Spring (33)
      • 개념 (13)
      • Security (5)
      • 실습 (1)
      • 토비 스프링 (11)
    • JPA (6)
    • 프로젝트 기록 (24)
    • DB (13)
    • JAVA (18)
    • 알고리즘 (50)
      • 유형정리 (8)
      • Baekjoon (21)
      • LeetCode (18)
    • 디자인패턴 (0)
    • 개발서적 (79)
      • Effective Java (78)
      • 객체지향의 사실과 오해 (1)
    • 독후감 (4)
    • 보안 (2)
    • 운영체제(OS) (53)
      • 공룡책 (53)
    • 컴퓨터 네트워크 (28)
      • 컴퓨터 네트워크 하향식 접근 (23)
    • 자료구조 (1)
    • DevOps (2)
    • 앱 개발 (20)
      • 안드로이드 스튜디오 (20)

블로그 메뉴

    공지사항

    인기 글

    태그

    • leetcode
    • 자바
    • 이펙티브자바
    • 백준
    • 함수형인터페이스
    • 스프링
    • BFS
    • 운영체제
    • java
    • Spring
    • dfs
    • 데이터베이스
    • 자바8
    • 코드업
    • 스프링시큐리티
    • 스레드
    • jpa
    • C++
    • 알고리즘
    • 토비스프링

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    [Effective Java] 명명 패턴보다 애너테이션을 사용하라
    개발서적/Effective Java

    [Effective Java] 명명 패턴보다 애너테이션을 사용하라

    2023. 5. 31. 06:56

    명명 패턴

    특별히 다뤄야 할 프로그램 요소에는 구분되는 명명패턴을 이용했다. 예를 들어 JUnit은 테스트 메서드 이름이 test로 시작하게끔 했었다.
    이런 명명 패턴은 다음과 같은 문제가 있다.

    1. 타입 세이프 하지 않다. tsetSaftey라고 적으면 JUnit은 이를 인지하지 못한다.
    2. 올바른 프로그램 요소에서만 사용된다는 보장이 없다.
      -> 클래스의 이름에 test를 붙여도 클래스에는 적용되지 않는다.
    3. 프로그램 요소를 매개변수로 전달할 방법이 없다.
      -> 예외 테스트가 힘들다.

    애너테이션

    @Retention가 @Target이라는 메타 어노테이션을 이용해 애너테이션의 라이프사이클을 지정하고 사용자가 올바른 프로그램 요소에 사용할 수 있도록 도와준다.

    이러한 마커 애너테이션은 잘못 사용하면 컴파일 타임에 에러를 잡아준다. 다음과 같은 test 어노테이션을 정의해주고 클래스 레벨에 애노테이션을 사용하면 컴파일 에러가 난다.

    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface Test {
    }

    애너테이션 에러

    이렇게 애너테이션을 정의하고 사용함으로써 명명 패턴의 1번, 2번 문제가 해결된다.

    예외 처리

    public @interface ExceptionTest {
        Class<? extends Throwable> value();
    }

    다음과 같이 예외처리가 쉬워진다.

    public class Example2 {
        @ExceptionTest(ArithmeticException.class)
        public static void m1() {
            int i = 0;
            i = i / i;
        }
    }

    정리

    다른 프로그래머가 소스코드에 추가 정보를 제공할 수 있는 도구를 만들어야 한다면 적당한 애너테이션 타입도 함께 정의해 제공하자.
    자바 프로그래머라면 예외 없이 자바가 제공하는 애너테이션 타입들은 사용해야 한다.

    저작자표시 비영리 변경금지 (새창열림)
      '개발서적/Effective Java' 카테고리의 다른 글
      • [Effective Java] 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라
      • [Effective Java] @Override 애너테이션을 일관되게 사용하라
      • [Effective Java] 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라
      • [Effective Java] ordinal 인덱싱 대신 EnumMap을 사용하라
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바