래퍼(wrapper)클래스
- 매개변수로 객체를 요구할 때, 기본형(byte, short, int, long, float, double, boolean, char) 값이 아닌 객체로 저장해야할 때, 객체간의 비교가 필요할 때 ... 기본형 값들을 객체로 변환하여 작업할때 사용된다.
- 래퍼 클래스들은 모두 equals()가 오버라이딩되어 있어서 주소값이 아닌 객체가 가지고 있는 값을 비교한다.
- 오토박싱이 된다고 해도 Integer객체에 비교연산자를 사용할 수 없어 compareTo()를 사용한다.
지네릭스(Generics)
- 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능
- 타입 안정성을 제공하고 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.
- 모든 객체에 대해 동일하게 동작해야하는 static멤버에 타입 변수 T를 사용할 수 없다. T는 인스턴스변수로 간주되기 때문이다. static멤버는 인스턴스변수를 참조할 수 없다. static멤버는 타입 변수에 지정된 타입, 즉 대입된 타입의 종류에 관계없이 동일한 것이어야 하기 때문이다.
class 저장소<T> {
T item;
void setItem (T item) {
this.item = item;
}
T getItem() {
return item;
}
}
저장소<String> a = new 저장소<String>();
지네릭 클래스 제한하기
class 과일상자<T extends 과일> {
}
와일드 카드
- 다른 모든 제네릭 타입의 인스턴스를 수용할 수 있는 타입 매개변수
- 메서드의 매개변수로 와일드카드를 사용하면, 해당 메서드는 다양한 타입의 인스턴스를 처리할 수 있으며, 코드의 재사용성과 유연성이 높아진다.
<? extends T> : 와일드 카드의 상한 제한. T와 그 자손들만 가능
<? super T> : 와일드 카드의 하한 제한. T와 그 조상들만 가능
<?> : 제한 없음. 모든 타입이 가능. <? extends Object> 동일
Scanner클래스
boolean : nextBoolean()
byte : nextByte()
short : nextShort()
int : nextInt()
long : nextLong()
double : nextDouble()
float : nextFloat()
String : nextLine()
Scanner sc = new Scanner(System.in);
sc.close(); 마지막에 스캐너를 닫아준다.