레퍼 클래스
기본 타입의 데이터를 객체로 변환할 때 사용
변수의 종류는 크게 기본형과 참조형으로 나뉨
제네릭 등으로 기본 변수를 전달하고 싶지만 기본 타입의 변수를 사용하지 못하는 경우 레퍼를 사용
기본 타입 | 레퍼 |
byte | Byte |
short | Short |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
int | Integer |
박싱 & 언박싱
박싱 : 기본 타입 데이터 -> 레퍼 클래스 인스턴스
언박싱 : 레퍼 클래스 인스턴스 -> 기본 타입 데이터
레퍼 클래스 인스턴스는 값을 변경할 수 없기 때문에 언박싱 작업이 필요함
-> 사용자가 언박싱을 해주지 않더라도 오토언박싱 기능을 통해서 연산 작업이 이루어짐
Integer num1 = new Integer(8); // 박싱 (deprecated)
Integer num2 = 2; // 오토 박싱
int int1 = num1.intValue(); // 언박싱
int int2 = num2.intValue();
Integer result1 = num1 + num2; // 오토 언박싱
System.out.println(result1);
박싱은 현재 권장하지 않는 방식이며, 오토 박싱을 통해서 레퍼 클래스 인스턴스를 만들 것을 권장하고 있음
제네릭
데이터 타입을 일반화하는 것
클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시 지정
-> 데이터 타입을 미지 지정하지 않고, 필요에 의해서 지정할 수 있음
-> 데이터의 형식에 의존하지 않고, 하나의 값이 다른 데이터 타입을 가질 수 있음
제네릭 선언 및 생성
제네릭은 클래스와 파라미터 메소드, 변수 등에 선언이 가능함
제네릭 타입은 여러 개를 둘 수 있음
class AngelPlayer<I, S> { // 제네릭 클래스
public I var1; // I 타입 변수
public S var2; // S 타입 변수
}
public class Prog {
public static void main(String[] args) {
AngelPlayer<Integer, String> a = new AngelPlayer<>();
a.var1 = 88;
a.var2 = "Hola";
System.out.println(a.var1 + ":" + a.var2);
}
}
제네릭 타입 제한
extends 키워드를 사용하여 특정 타입만 사용가능하도록 제안할 수 있음
-> 인터페이스를 구현 할 때도 implements가 아닌 extends 키워드를 사용함
interface School { public abstract void sName(); }
class Shin<T extends AngelPlayer> { } // 타입 변수 제한
class Shin2<T extends AngelPlayer & School> { } // 클래스와 인터페이스 상속
제네릭 메소드
[사용법] 접근제어자 <제네릭타입> 반환타입 메소드명(제네릭타입 파라미터) { }
반환 타입 이전에 <제네릭타입>을 선언
메소드에 한정한 제네릭
-> 파라미터의 타입에 따라서 제네릭 타입이 결정됨
-> 제네릭 클래스와 별도로 독립적인 제네릭
class AngelPlayer<T> { // 제네릭 클래스
public T var; // 타입 변수
<T> T genericMethod(T mVar) { // 제네릭 메소드
return mVar;
}
}
public class Prog {
public static void main(String[] args) {
AngelPlayer<Integer> a = new AngelPlayer<>();
a.var = 10;
System.out.println(a.var); // 10 | Integer
System.out.println(a.genericMethod("Hola")); // Hola | String
}
}
와일드카드
매개변수 타입을 와일드 카드를 통해서 제한 가능
(조금 더 정리가 필요..?)
<?> // 모든 타입을 사용
<? extends T> // T 타입과 T 타입을 상속받는 자손 클래스 타입만을 사용
<? super T> // T 타입과 T 타입이 상속받은 조상 클래스 타입만을 사용
[Java] Java 주요 개념 요약 정리 (예외 처리, 스레드) (0) | 2022.11.01 |
---|---|
[Java] Java 주요 개념 요약 정리 (컬렉션) (0) | 2022.10.31 |
[Java] Java 주요 개념 요약 정리 (다형성) (0) | 2022.10.20 |
[Java] Java 주요 개념 요약 정리 (클래스) (0) | 2022.10.19 |
[Java] Java 주요 개념 요약 정리 (개요, 자료형, 조건문, 배열) (0) | 2022.10.18 |