YOUNGJIN
자바의 정석 12장 ( Generics, 열거형, Annotation ) 본문
Generics: 객체의 타입을 컴파일 시에 체크하게 해주는 기능
class Box<T>{
T item;
void setItem(T item){ this.item=item; };
T getItem(){ return item; }
}
Box<String> b=new Box<>();
모든 객체에 대해 동일하게 동작해야하는 static 멤버에 타입 변수 T를 사용할 수 없다. 또한 Generic 배열 타입의 객체 생성도 불가능.
제한된 Generic 클래스
class FruitBox<T extends Fruit>{
}
와일드카드: 와일드카드란, 제네릭 클래스의 객체를 메소드의 매개변수로 받을 때, 그 객체의 타입 변수를 제한하는 것
<? extends T> : 와일드 카드의 상한 제한. T와 그 자손들만 가능
<? super T> : 와일드 카드의 하한 제한. T와 그 조상들만 가능
<?> : 제한 없음. 모든 타입이 가능. <? extends Object>와 동일
static Juice makeJuice(FruitBox<? extends Fruit> box){
String tmp="";
for(Fruit f:box.getList())
tmp+=f+" ";
return new Juice(tmp);
}
Generic 메서드
static <T> void sort(List<T> list, Comparator<? super T> c){
}
<Fruit>sort(..., ...);
제네릭 클래스에 정의된 타입 매개변수와 제네릭 메서드에 정의된 타입 매개변수는 전혀 별개의 것이다.
열거형
enum Direction {EAST, SOUTH, WEST, NORTH}
dir=Direction.EAST;
모든 열거형의 조상은 java.lang.Enum
사실 열거형 상수 Direction.EAST, Direction.SOUTH, Direction.WEST, Direction.NORTH 하나하나가 Direction객체이다.
예를 들면
class Direction{
static final Direction EAST = new Direction("EAST");
static final Direction SOUTH = new Direction("SOUTH");
static final Direction WEST = new Direction("WEST");
static final Direction NORTH = new Direction("NORTH");
private String name;
private Direction(String name){
this.name=name;
}
}
와 같이 정의되 있을 것이다.
Annotation
소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종이다. 메타 데이터란 애플리케이션이 처리해야할 데이터가 아니라 컴파일 과정과 실행 과정에서 코드를 어떻게 처리해야하는지를 알려주기 위한 추가 정보다.
Annotation을 이용하면 다음을 할 수 있다.- 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보 제공- 소프트웨어 개발 환경이 빌드나 배포시 코드를 자동으로 생성할 수 있도록 정보 제공- 런타임에 특정 기능을 실행하도록 정보를 제공
'Study > Java' 카테고리의 다른 글
자바의 정석 14장 (람다와 스트림) (0) | 2023.01.22 |
---|---|
자바의 정석 13장 ( Thread ) (0) | 2023.01.18 |
자바의 정석 11장 ( Collection ) (0) | 2023.01.15 |
메소드 참조 (0) | 2023.01.13 |
자바의 정석 9장 ( java.lang 패키지와 유용한 클래스 ) (0) | 2023.01.11 |