728x90
반응형
SMALL

제네릭이란?

public class Box{
	public Object content;
}
Box box = new Box();
box.content = 모든 객체;

String content = (String)box.content;

필드에 다양한 타입으로 받아오고 싶을 때 Object로 선언하게 되면 내용물을 얻을 때 마다 강제 타입 변환을 거쳐야 한다.

=> 제네릭 : 결정되지 않은 타입을 파라미터로 처리하고 실제 사용할 때 파라미터를 구체적인 타입으로 대체시키는 기능

public class Box<T>{
	public T content;
}
Box<String> box1 = new Box();
box1.content ="안녕하세요";
String content = box.content;

Box<Integer> box2 = new Box();
box2.content = 20;
int content = box.content;

=> 강제 타입 변환이 필요없다.

 

제네릭 타입

* 제네릭 타입 : 결정되지 않은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다. 선언부에 <>가 붙고 그 사이에 타입 파라미터들이 위치한다.

public class 클래스명<A, B, ...> { ... }
public interface 인터페이스명<A, B, ...>{ ... }
public class Product<K,M>{
 	private K kind;
    	private M model;
}
public interface Rentable<P>{
	P rent(); //타입 파라미터 P를 리턴타입으로도 사용
}

 

제네릭 메소드

* 제네릭 메소드 : 타입 파라미터를 갖고 있는 메소드를 말한다.

타입 파라미터가 메소드 선언부에서 정의된다

리턴 타입 앞에 <> 를 추가하고 타입 파라미터를  정의한 뒤, 리턴 타입과 매개변수 타입에서 사용한다.

public <A, B, ...> 리턴타입 메소드명(매개변수,...) { ... }
public <T> Box<T> boxing(T t) { ... }

 

 

제한된 타입 파라미터

경우에 따라 타입 파라미터를 대체하는 구체적인 타입을 제한할 필요가 있다.

ex) 숫자를 연산하는 제네릭 메소드는 대체로 Number또는 그의 자식클래스로 제한할 필요가 있다.

*제한된 타입 파라미터 : 모든 타입으로 대체할 수 없고,특정 타입과 자식 또는 구현 관계에 있는 타입만 대체할 수 있는 타입 파라미터

public <T extends 상위타입> 리턴타입 메소드명(매개변수, ...) { ... }

 

와일드카드 타입 파라미터

리턴타입 메소드명(제네릭타입<? extends Student> 변수) { ... }
//Student와 그 자식클래스만 타입으로 가능함.
리턴타입 메소드명(제네릭타입<? super Worker> 변수){ ... }
//Worker와 그 부모클래스만 매개변수 타입으로 가능함.
리턴타입 메소드명(제네릭타입<?> 변수) { ... }
728x90
반응형
LIST

'IT > JAVA' 카테고리의 다른 글

[JAVA] #15 컬렉션 자료구조  (0) 2023.04.27
[JAVA] #14 멀티 스레드  (0) 2023.04.26
[JAVA] #12 java.base 모듈  (0) 2023.04.20
[JAVA] #11 예외 처리  (0) 2023.04.19
[JAVA] #10 라이브러리 모듈  (0) 2023.04.18

+ Recent posts