본문 바로가기

개발/JAVA

4. 라이브러리 활용 (6) 제네릭, 어노테이션

1. 제너릭(Generic)    개념1, 개념2, 개념3, 개념4

   1) 제너릭이란?

     -  클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법 

        (변수 타입을 '구현할 때 결정'하는 것이 아니라 클래스 외부에서 '실행할 때' 동적으로 결정한다)

     - 변수 타입을 동적으로 사용하기 위해 선언 되는 <E>, <T>를 타입 파라미터라고 한다

     - '자바5'부터 도입되었으며, C++의 템플릿 클래스와 유사한 개념이다. (장점 : 타입 안정성, 간결해지는 코드)


   2) 선언 및 사용법  예제1, 예제2

     - 클래스 정의: 클래스 이름 <T>

     - 변수 정의: T 변수 이름 

     - 제네릭이 정의된 클래스 생성: 클래스 이름<데이터 타입>

   3) 조건 지정  개념1

     - 특정 클래스를 상속하는 타입만 조건으로 지정: 클래스 이름 <T extends 상속 클래스 이름> 

   4) 와일드 카드 개념1, 개념2, 예제1, 예제2

     - <?> : 어떤 형태의 타입이든지 허용하겠다는 의미

     - <? extends 상속 클래스 이름> : 상속 클래스의 모든 하위 클래스 타입을 허용하겠다는 의미

종족이라는 하나의 제네릭 타입과 그 종족들을 구성하는 동물

   5) 멀티 타입 파라미터   개념1, 개념2, 예제1

     - 제네릭 타입은 두 개 이상의 멀티 타입 파라미터를 사용할 수 있는데, 이 경우 각 타입 파라미터를 콤마로 구분한다 
     - <T, N> 형태로 여러개의 타입 파라미터 지정이 가능하다

   6) 제너릭 클래스와 메소드 개념1, 개념2, 개념3, 예제1

     - 제네릭은 클래스와 메소드에서 사용할 수 있으며, 제네릭 타입을 선언한 클래스를 제네릭 클래스라 한다  개념

     - 제너릭 메소드 : 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드를 말한다

     - 제네릭 메소드 호출 방법: 
        a. 코드에서 타입 파라미터의 구체적인 타입을 명시적으로 지정
        b. 컴파일러가 매개값의 타입을 보고 구체적인 타입을 추정

   7) 가변인수(varargs)  개념1, 개념2, 예제1

     - 가변인수(가변길이인수)로 선언된 메소드는 동적인 인자의 개수를 전달 받을 수 있다

     - 가변인수와 제너릭은 함께 사용하기 위해서는 주의가 필요하다
        *주의: varargs 매개변수 배열에 아무것도 저장하지 않는다. / 그 배열(혹은 복제본)을 신뢰할 수 없는 코드에 노출하지 않는다. 

     - 가변인수의 매개변수는 1개만 가능하며, 맨 마지막에 위치해야한다

실체화 불가 타입으로 varargs 매개변수를 선언하면 컴파일러가 경고를 보낸다.

   8) 제너릭 상속  개념1, 개념2, 예제1예제2 

     - 제너릭으로 선언된 클래스 상속 시 상위 클래스에서 선언된 타입 파라미터가 선언되어야 한다

     - 하위 클래스에서 추가적으로 타입 파라미터를 선언 할 수 없다 

     

 

2. 열거형(enum)   개념1, 개념2, 개념3, 예제1, 예제2, 예제3

   1) 선언 및 사용법  개념1, 예제1

     - 요일, 계절 등 제한적인 데이터를 선언하여 재사용할 수 있도록 한다

source : 50대 아줌마의 개발자 도전기

   2) 열거형 메소드 개념1, 개념2, 예제1

     - 열거형을 선언 하면 자동적으로 열거형 메소드를 사용할 수 있다

     - 열거형 메소드는 열거형의 값, 위치 등을 추출하는 기능을 지원한다

 

3. 어노테이션(Annotation)  개념1, 개념2, 종류, 예제1 

  1) 어노테이션이란?  개념1, 개념2
     - 코드 사이에 주석처럼 쓰이면서 특별한 기능을 수행하도록 하는 기술로 프로그램에게 추가적인 정보를 제공해주는 메타 데이터이다

     - 컴파일러에게 코드 문법 에러를 체크하도록 정보를 제공한다

     - 소프트웨어 개발 툴이 빌드나 배치에서 코드를 자동으로 생성할 수 있도록 정보를 제공한다

     - 실행시 특정 기능을 실행하도록 한다 

  2) 표준 어노테이션  개념1, 예제1

    - @SuppressWarnings : 컴파일러가 일반적으로 경고하는 내용 중 이 내용은 제외시킬 때 사용
    - @Override : 오버라이딩된 메소드 

  3) 사용자 정의 어노테이션    예제1, 예제2

    - 사용자가 정의하여 사용 할 수 있다
    - 사용 방법 : public @interface 어노테이션 이름 { } 

    - @Target : 어디에 어노테이션을 넣을 수 있는지 대상을 지정 

    - @Retention : 어떻게 저장할 것인지 유효한 범위를 지정