반응형
제네릭(generic)
데이터의 타입을 일반화한다는 의미
클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 지정하는 방법
제네릭을 이용하면 instanceof 비료 및 다운 캐스팅을 하지 않아도 됨.
1 . 제네릭 설정
- 다이아몬드 연산자 <> 이용
- 관례상 대문자로 작성
- <타입변수라함>
- 타입 변수를 자료형 대신 사용, 가상으로 존재
- 여러 개의 타입 변수를 작성도 가능
- 컴파일 시점에서 타입 결정됨.
public class GenericTest<T> {
private T value;
getter, setter 작성 시에도 구체적인 타입 대신 T 사용 가능
public void setValue(T value) {
this.value = value;
}
public T getValue() {
return value;
}
2 . 제네릭 사용
(1) <Integer>로 인스턴스 생성 후 출력
GenericTest<Integer> gt1 = new GenericTest<Integer>();
gt1.setValue(10);
System.out.println(gt1.getValue());
(2)<String>으로 인스턴스 생성 후 출력
GenericTest<String> gt2 = new GenericTest<String>();
gt2.setValue("홍길동");
System.out.println(gt2.getValue());
(3) <Double>으로 인스턴스 생성 후 출력
GenericTest<Double> gt3 = new GenericTest<>(); <-생성자 쪽의 타입 생략 가능
gt3.setValue(0.5);
System.out.println(gt3.getValue());
--실행 결과
10
홍길동
0.5
=>반환 값이 명시한 타입과 같다는 걸 확인할 수 있음
반응형
3 . 상속시 사용 가능
- 제네릭 클래스에 extends 키워드를 사용해 타입 제한 가능
- 인터페이스 상속시 implements가 아닌 extends로 표현해야 함.
4 . 와일드 카드
- 제네릭 클래스 타입의 객체를 메소드의 매개변수로 받을 때 그 객체의 타입을 제한 할 수 있음
토끼 농장에 있는 토끼가 어떤 토끼던 상관 없음
public void anyType(RabbitFarm<?> farm) {
farm.getAnimal().cry();
}
토끼 농장의 토끼는 Bunny 이거나
그 후손 타입으로 만들어진 토끼 농장만 매개변수로 사용
public void extendsType(RabbitFarm<? extends Bunny> farm) {
farm.getAnimal().cry();
}
토끼 농장의 토끼는 Bunny이거나
그 부모 타입으로 만들어진 토끼 농장만 매개변수로 사용
public void superType(RabbitFarm<? super Bunny> farm) {
farm.getAnimal().cry();
}
반응형
'프로그래밍 > java' 카테고리의 다른 글
[자바/ JAVA] 컬렉션(Collection)이란? (0) | 2022.09.04 |
---|---|
[자바/JAVA] 예외처리(try-catch , thows, finally블럭, RuntimeException) (0) | 2022.09.03 |
[자바 / Java] Wrapper 클래스(Auto Boxing과 Auto UnBoxing) (0) | 2022.09.03 |
[자바 / Java] StringBuilder의 자주 사용되는 메소드 (0) | 2022.09.03 |
[자바 / Java] 이스케이프 문자 사용 (0) | 2022.09.03 |