【사내 공부회】Java 어노테이션의 기초(2017/11/02) ~작성중~

9867 단어 공부회자바

0. 소개



내용


  • 주석의 기초.

  • 전제 지식


  • Java의 기본 구문
  • Java 어노테이션 사용


  • 참고도서





    「Effective Java 제2판」마루젠 출판

    목차


  • 주석의 이점
  • 자체 제작 주석
  • JUnit, lombok의 내용보기


  • 1. 어노테이션의 장점



    Java 어노테이션 개요



    어노테이션(annotation)이란, 어느 데이터에 대해서 관련하는 정보(메타데이터)를 주석으로서 부여하는 것.

    주석 - Wikipedia 인용문
  • Java5에서 도입 된 (2004 년 릴리스)


  • 주석 예제 (JUnit4)



    CalculationTest.java
    public class CalculationTest {
        /** テストケース1 */
        @Test
        public void sampleTest1() {
            //...
        }
        /** テストケース2 */
        @Test
        public void sampleTest2() {
            //...
        }    
    }
    
  • 테스트 케이스임을 @Test로 나타낸다
  • JUnit Runner는 @Test가 부여 된 메서드 만 실행합니다.
  • 주석은 JUnit4에서 소개되었습니다


  • JUnit에서 주석을 사용할 수 없다면 (JUnit3)



    CalculationTest.java
    public class CalculationTest extends TestCase{
        /** テストケース1 */
        public void testSample1() {
            //...
        }
        /** テストケース2 */
        public void testSample2() {
            //...
        }    
    }
    
  • 테스트 클래스임을 TestCase의 상속으로 표시
  • 테스트 케이스가되는 메소드 이름은 test로 시작합니다.
    ⇒명명 패턴

  • htp // d. 하테나. 네. jp/s 아직 564/20110501/1304265351 참고

    명명 패턴의 단점



    오자를 깨닫지 못함


  • 메서드가 이름이 tsetSample2인 경우(오자), 실행되지 않는 것만. 오류가 발생하지 않음

  • 매개 변수 값을 연결할 수 없음



    예를 들어, IllegalArgumentException 를 슬로우 하는 것을 기대하는 테스트 메소드를 생각한다.
    /** JUnit4の書き方 */
    @Test(expected = IllegalArgumentException.class)
    public void sample() {
        //...
    }
    
    /** アノテーションが使えない場合の例 */
    public void test_IllegalArgumentException_sample() {
        //...
    }    
    
  • 추악하고 취약한
  • Exception이 존재하는지, 컴파일은 판단 할 수 없다
  • 실행할 때까지 알지 못함


  • ※『Effective Java 제2판』 항목35 참고

    XML과 주석 비교



    Servlet은 어노테이션과 XML 모두에서 설정할 수 있다.
    @WebServlet("/Hello")
    public class HelloServlet extends HttpServlet {
      //...
    }
    

    web.xml
    <!-- アノテーションを使わない場合は、XMLで指定 -->
    <servlet>
      <servlet-name>Hello</servlet-name>
      <servlet-class>jp.co.sample.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>Hello</servlet-name>
      <url-pattern>/Hello</url-pattern>
    </servlet-mapping>
    

    XML과 비교한 주석의 특징
  • 설명이 적음
  • 단일 파일로 완료
  • 클래스 이름이나 메서드 이름을 변경해도 주석을 수정할 필요가 없습니다.

  • ⇒ 소스 변경에 강함

    Annotations vs XML, advantages and disadvantages 참고

    표준 라이브러리 주석



    @Override



    오버라이드 하고 있는 메소드인 것을 나타내는 어노테이션.

    Book.java
    public class Book {
        public Book(String title, String author) {
            this.title = title;
            this.author = author;
        }
        String title;
        String author;
    
        @Override //Compile Error. 正しくは equals(Object obj)
        public boolean equals(Book obj) {
            //nullチェックは省略
            return title.equals(obj.title) && author.equals(obj.author);
        }
    
    }
    

    컴파일시에, 오버라이드(override) 되어 있지 않은 (오버 로드하고 있다) 것을 깨닫는다.

    ※『Effective Java 제2판』 항목36 참고
    【Effective Java】 항목36:항상 Override 어노테이션을 이용한다 참고

    @Deprecated



    Java9에서 @Deprecated(since="9", forRemoval=true)라는 글을 작성할 수 있습니다.
  • 폐지 예정인가? (forRemoval)
  • 언제 폐지할까? (since)

  • What’s New for Core Libraries in JDK 참고

    @SuppressWarnings



    IDE가 경고 메시지를 억제합니다.
    @SuppressWarnings( "unchecked" ) //型のチェックに関する警告を除外
    @SuppressWarnings( "javadoc" ) //JavaDoc警告の除外
    public class Book {
        //..
    }
    

    ぉ tp : // / pm - 네와 rk. 이 m/? ㈜ゔぁー%え3%82%あ2%え3%83%8え%え3%83%86%え3%83%BC%え3%82%B7%え3%83% 오7%에3%83%B3 참조

    value 속성



    부록



    표준 주석



    참고 사이트



    h tp // w w. 오 c. 이 m / ぇ b ふぉ l에서 r / ch ch와 rk / jp / 그럼 마가 지네 / 그럼 ぁ 14- 아르 치 ct-Ty ぺ あんどん s. pdf
    h tp // w w. 오 c. 이 m / ぇb ふぉl에서 r / ch 네와 rk / jp / 그럼 마가 지네 / 그럼 16- 안녕하세요. pdf

    좋은 웹페이지 즐겨찾기