학습 노트:제2 0 장(주해)

디 렉 터 리 자바 프로 그래 밍 사상(1)1~4 장:자바 프로 그래 밍 사상 개술(2)5 장:자바 프로 그래 밍 사상 초기 화 및 정리(3)6 장:접근 권한 자바 프로 그래 밍 사상(4)7 장:재 활용 류 자바 프로 그래 밍 사상(5)8 장:다 중 자바 프로 그래 밍 사상(6)9 장:인터페이스 자바 프로 그래 밍 사상(7)10 장:내부 류 자바 프로 그래 밍 사상(8)11 장:소지 대상 자바 프로 그래 밍 사상(9)제1 2 장:이상 자바 프로 그래 밍 사상(10)제1 3 장:문자열 자바 프로 그래 밍 사상(11)제1 4 장:유형 정보 자바 프로 그래 밍 사상(12)제1 5 장:범 형 자바 프로 그래 밍 사상(13)제1 6 장:수조 자바 프로 그래 밍 사상(14)제1 7 장:용기 자바 프로 그래 밍 사상(15)제1 8 장 깊이 연구/O 시스템 자바 프로 그래 밍 사상(16)제1 9 장:자바 프로 그래 밍 사상(17)제2 0 장:자바 프로 그래 밍 사상(18)제2 1 장 주석:병발
제2 0 장 주해
목차
1.기본 문법
1.1 정의 주해
1.2 원 주해
2.주석 처리 기 작성
2.1 주석 요소
2.2 기본 값 제한
2.3 외부 파일 생 성
2.4 주해 상속 불가
3.apt 로 주 해 를 처리 합 니 다.
4.관찰자 모드 를 apt 에 사용
5.주석 기반 유닛 테스트
머리말
  • 주석 Annotation:메타 데이터 라 고도 부 르 는데 JDK 5 가 도입 한 일반적인 형식 으로 프로그램 에 설정 정 보 를 제공 하 는 방식 입 니 다

  • 4.567917.주석 Annotation 을 사용 하면 메타 데 이 터 를 프로그램 소스 코드 에 쓸 수 있 고 코드 를 간결 하 게 보일 수 있 으 며 컴 파일 러 도 주석 Annotation 의 유형 검 사 를 제공 하여 컴 파일 기간 에 문법 오 류 를 제거 할 수 있 습 니 다
    4.567917.주 해 를 통 해 우 리 는 컴 파일 러 가 테스트 하고 검증 하 는 형식 으로 관련 프로그램의 추가 정 보 를 저장 할 수 있 습 니 다
    4.567917.주 해 는 설명자 파일 을 만 들 고 심지어 새로운 종류의 정 의 를 만 들 수 있 으 며'모델'코드 를 작성 하 는 부담 을 줄 이 는 데 도움 이 된다
    JDK 내 장 된 3 중 Annotation
    JDK 5 에는 일반적인 목적 의 주석 3 개가 내장 되 어 있 습 니 다.이 세 개의 내 장 된 주석 은 자바.lang 패키지 에 있 습 니 다.
    4.567917.@Override:이 주 해 는 계승 류 나 인 터 페 이 스 를 실현 하 는 하위 클래스 방법 에 자주 사용 된다.표면 에 이 방법 은 하위 클래스 가 부모 클래스 를 덮어 쓰 는 방법 이다.이 방법의 서명 은 덮어 쓰 는 방법의 원칙 에 따라 야 한다.즉,방문 제어 권한 은 부모 클래스 보다 더욱 엄격 해 야 하 며 부모 클래스 보다 더 많은 이상 을 던 져 서 는 안 된다
  • @Deprecated:이 주 해 는 컴 파 일 러 에 게 이 요 소 는 시대 에 뒤떨어 졌 다 는 것 을 알려 줍 니 다.즉,현재 JDK 버 전에 서 이 요 소 를 대체 하 는 새로운 요소 가 있 습 니 다
  • @Suppress Warnings:이 주 해 는 컴 파일 러 의 부적 절 한 경 고 를 닫 습 니 다.즉,컴 파일 러 의 경고 알림 을 강제로 누 르 는 것 입 니 다

  •  
    1.기본 문법
    1.1 정의 주해
  • 태그 주석(marker annotation):요소 의 주석 이 없습니다.예 를 들 어@Test void test(){}
  • 4.567917.원 주해(meta-annotation):주 해 를 설명 할 때@Target,@Retention 등 주 해 를 사용 해 야 합 니 다.이런 주 해 는 주해 의 주해(메타 데이터 주해)라 고 부 릅 니 다.즉,주석 자 체 를 처리 하 는 데 사 용 됩 니 다
    @Target(ElementType.METHOD)
    
    @Retention(RetentionPolicy.RUNTIME)
    
    public @interface Test{}

    1.2 원 주해
    자바 에는 세 개의 표준 주해 만 내 장 됩 니 다(위 에서 말 한 바 와 같이).다음 네 개의 원 주해 와 함께:
    @Target 주석
    주 해 를 표시 하 는 대상 프로그램의 요소 종 류 를 표시 합 니 다.이 주 해 는 항상 Element Type 매 거 진 형식 과 함께 사용 합 니 다.Element Type 매 거 진 은 자바 프로그램 에서 설명 하 는 요소 종 류 를 다음 과 같이 제공 합 니 다.
  • ANNOTATION_TYPE:주석 형식 설명..
  • CONSTRUCTOR:구조 방법 성명.
  • FIELD:필드 성명(매 거 진 상수 포함)
  • LOCAL_VARIABLE:부분 변수 설명..
  • METHOD:방법 설명..

  • 패키지 성명
  • PARAMETER:매개 변수 설명..
  • TYPE:클래스,인터페이스 또는 매 거 진 성명

  • @Retention 주석
    이 주 해 는 프로그램 성명 주기 에 정 의 된 주석 형식 을 표시 하 는 데 사 용 됩 니 다.이 주 해 는 항상 RetentionPolicy 와 공동으로 사 용 됩 니 다.RetentionPolicy 매 거 진 상수 가 코드 에 주석 을 달 고 있 는 보존 정책 을 정의 합 니 다.
  • CLASS:컴 파일 러 는 주 해 를 클래스 파일 에 기록 하지만 실행 할 때 JVM 은 주 해 를 보류 할 필요 가 없습니다
  • 런 타임:컴 파일 러 는 주 해 를 클래스 파일 에 기록 하고 실행 할 때 JVM 은 주 해 를 유지 하기 때문에 반사 체 제 를 통 해 주 해 를 읽 을 수 있 습 니 다
  • SOURCE:원본 코드 에 만 유지 하고 컴 파일 러 는 컴 파일 할 때 이 주 해 를 버 려 야 합 니 다

  • @Documented
    이 주 해 를 자바 doc 에 포함 합 니 다.
    @Inherited
    하위 클래스 가 부모 클래스 의 주 해 를 계승 하도록 허용 합 니 다.
     
    2.주석 처리 기 작성
    주 해 를 사용 할 때 중요 한 부분 은 주 해 를 만 들 고 사용 하 는 것 입 니 다.자바 는 주 해 를 가 진 자바 소스 패 키 지 를 분석 하 는 외부 도구 apt 를 제공 합 니 다.
    주 해 를 정상적으로 사용 할 때 주해 에서 요 소 를 정의 해 야 합 니 다.프로그램 설정 의 값 을 받 을 때 주 해 를 정상적으로 정의 하 는 예 는 다음 과 같 습 니 다.
    @Target(ElementType.METHOD)
    
    @Retention(RetentionPolicy.RUNTIME)
    
    public @interface UseCase{
    
        public int id();
    
        public String description() default “no description”; //         
    
    }

    주석 Annotation 을 정상적으로 정의 하 는 방식 은 정의 인터페이스 와 유사 합 니 다.id 와 description 은 주석 UseCase 의 속성 이지 방법 이 아 닙 니 다.주석 에서 방법 을 정의 할 수 없고 속성 만 정의 할 수 있 습 니 다.그 중에서 description 속성 은 기본 값 인'no description'이 있 습 니 다.즉,사용 할 때 description 의 값 이 지정 되 지 않 으 면 프로그램 은 기본 값 을 사용 합 니 다.
     
    위의 UseCase 주 해 는 추적 방법 에 사용 되 는 테스트 사례 설명 입 니 다.위의 주 해 를 사용 한 예 는 다음 과 같 습 니 다.
    public class PasswordUtils{
    
        @UseCase(id = 47, description = “Passwords must contain at least one numeric”)
    
        public Boolean validatePassword(String password){
    
            return (password.mathes(“\\w*\\d\\w*”));
    
        }
    
        @UseCase(id = 48)
    
        public String encryptPassword(Srring password){
    
            return new StringBuilder(password).reverse().toString();
    
        }
    
        @UseCase(id = 49, description = “New passwords can’t equal previously used ones”)
    
        public Boolean checkForNewPassword(List prevPasswords, String password){
    
            return !prevPasswords.contains(password);
    
        }
    
    }

    JDK 5 에 서 는 Annotation 관련 API 를 제공 합 니 다.자바 의 반사 체 제 를 사용 하면 사용자 정의 Annotation 주석 처리 기(JDK 에서 도 APT,Annotationprocess tool 방식 으로 주석 을 처리 하고 나중에 설명 합 니 다)를 제공 합 니 다.상기 Annotation 을 처리 하 는 예 는 다음 과 같 습 니 다.
    public class UseCaseTracker{
    public static void traceUseCases(List useCases, Class> clazz){
    //지정 한 클래스 의 모든 성명 을 가 져 오 는 방법
    for(Method m : clazz.getDeclaredMethods()){
    //가 져 오 는 방법 에 지 정 된 형식의 주석
    public class UseCaseTracker{  
        public static void traceUseCases(List useCases, Class> clazz){  
            //               
            for(Method m : clazz.getDeclaredMethods()){  
                //              
                UseCase uc = m.getAnnotation(UseCase.class);  
                if(uc != null){  
                    System.out.println(“Found Use Case:” + uc.id() + “ ” + uc.description());  
                    useCases.remove(new Integer(uc.id()));  
                }  
            }  
            for(int i : useCases){  
                System.out.println(“Warning: Missing use case-” + i);  
            }  
        }  
        public static void main(String[] args){  
            List useCases = new ArrayLis();  
            Collections.addAll(useCases, 47, 48, 49, 50);  
            trackUseCases(useCases, PasswordUtils.class);  
        }  
    }  

    이 프로그램 은 getDeclared Methods()와 m.getAnnotation(UseCase.class)두 가지 반사 방법 을 사 용 했 습 니 다.
  • getDeclared Methods()클래스 성명 을 되 돌려 주 는 방법
  • m.getAnnotation(UseCase.class)은 지정 한 형식의 주석 대상 을 되 돌려 줍 니 다.주 해 된 방법 에 이 유형의 주해 가 없 으 면 null 값 을 되 돌려 줍 니 다

  • 2.1 주석 요소
    Annotation 주석 에 있 는 요 소 는 아래 의 데이터 형식 만 사용 할 수 있 습 니 다.
  • 모든 기본 유형(int,float,boolean 등):자바 의 8 가지 기본 유형,예 를 들 어 int,boolean 등 이 자동 으로 상 자 를 포장 하고 뜯 을 수 있다 면 해당 하 는 대상 포장 유형 을 사용 할 수 있 습 니 다
  • String
  • Class
  • enum
  • Annotation

  • 4.567917.위 유형의 배열위의 이러한 유형 을 제외 하고 주석 에서 다른 유형의 데 이 터 를 정의 하면 컴 파일 러 가 잘못 보고 할 것 입 니 다.
     
    2.2 기본 값 제한
    메모:주석 에 있 는 요 소 는 기본 값 을 지정 하거나 사용 하 는 클래스 에서 할당 합 니 다.기본 값 이 없 으 면 사용 클래스 에 할당 되 지 않 으 면 주석 요 소 는 일반 구성원 변수 처럼 기본 값 을 지정 하지 않 습 니 다.즉,지정 한 기본 값 을 할당 하거나 표시 해 야 합 니 다.기본 값 예 는 다음 과 같 습 니 다.
    @Target(ElementType.METHOD)  
    @Retention(RetentionPolicy.RUNTIME)  
    public @interface DefaultValue{  
        public int id() default -1;  
        public String description() default “”;  
    }  

    2.3 외부 파일 생 성
    Enterprise JavaBean 과 같은 기술 은 모든 Bean 이 대량의 인터페이스 와 배 치 를 통 해 파일 을 설명 해 야 하 는데 이것 은 모두 모델 파일 에 속한다.그러나 주 해 를 사용 하면 모든 정 보 를 자바 빈 의 원본 파일 에 저장 할 수 있 습 니 다.이 를 위해 서 는 빈 과 연 결 된 데이터베이스 시트 의 이름과 빈 속성 관리 열 이름과 SQL 형식 을 정의 하 는 새로운 주석 이 필요 합 니 다.
    @Target(ElementType.TYPE)//            
    @Retention(RetentionPolicy.RUNTIME)  
    public @interface DBTable{//         
        public String name() default “”;  
    }  
      
    @Target(ElementType.FIELD)  
    @Retention(RetentionPolicy.RUNTIME)  
    public @interface Constraints{//       
        boolean primaryKey() default false;  
        boolean allowNull() default true;  
        boolean unique() default false;  
    }  
      
    @Target(ElementType.FIELD)  
    @Retention(RetentionPolicy.RUNTIME)  
    public @interface SQLString{//String      
        int value() default 0;  
        String name() default “”;  
        Constraints constraints() default @Constraints;//             
    }  
      
    @Target(ElementType.FIELD)  
    @Retention(RetentionPolicy.RUNTIME)  
    public @interface SQLInteger{//int      
        String name() default “”;  
        Constraints constraints() default @Constraints;   
    }  

    2.4 주해 상속 불가
    키워드 extends 를 사용 하여@interface 를 계승 할 수 없습니다.
    3.apt 로 주 해 를 처리 합 니 다.
  • apt:주해 처리 도 구 는 Sun 이 주해 의 처리 과정 을 돕 기 위해 제공 하 는 도구 입 니 다
  • 자바 c 와 마찬가지 로 apt 는 컴 파일 된 클래스 가 아 닌 자바 소스 파일 을 조작 하 는 것 으로 설계 되 었 습 니 다
  • apt 를 사용 하여 주해 처리 기 를 생 성 할 때 우 리 는 자바 의 반사 체 제 를 사용 할 수 없습니다.왜냐하면 우 리 는 원본 코드 를 작 동 하기 때 문 입 니 다.어 는 컴 파일 된 파일 이 아 닙 니 다

  • 4.관찰자 모드 를 apt 에 사용
    5.주석 기반 유닛 테스트
    4.567917.단원 테스트:유형 중의 모든 방법 에 대해 하나 또는 여러 개의 테스트 를 제공 하 는 실천 으로 한 가지 방법 이 정확 한 행 위 를 가지 고 있 는 지 규칙 적 으로 테스트 하기 위해 서 이다
    4.567917.유닛 테스트 도구:자바 에서 가장 유명한 유닛 테스트 도구 JUnit
    5.1@Unit 을 범용 으로 사용
    5.2"세트"필요 없 음
    5.3 실현@Unit
    5.4 테스트 코드 제거
    @Test 주 해 를 추가 하고 자바 ssist 도구 라 이브 러 리 를 사용 하여 바이트 코드 프로젝트 를 모든@Test 주 해 를 삭제 합 니 다.(?)
     

    좋은 웹페이지 즐겨찾기