728x90
반응형
Generic
제너릭을 사용하면 객체를 정의할 때 타입 매개변수를 선언하여 자유롭게 사용할 수 있다.
예시1)
class Generic<T> {
}
class Generic<T> {
private T t;
public T get() {
return t;
}
public void set(T t) {
this.t = t;
}
}
Generic<String> gc = new Generic<String>();
gc.set("choonsik");
System.out.println(gc.get());
Generic<Integer> gc2 = new Generic<Integer>();
gc.set(0227);
System.out.println(gc.get());
// choonsik
// 0227
위와 같이 generic 클래스를 만들면 객체생성할 때 원하는 타입 매개변수를 넣어 사용할 수 있다.
다이아몬드 연산자<>
위 코드에서 15, 20번 째 줄에 있는 코드를 아래와 같이 사용할 수 있다. (자바 7버전부터 가능)
Generic<String> gc2 = new Generic<>();
Generic<Integer> gc2 = new Generic<>();
와일드 카드 (추후 공부 필요)
제네릭에서 ? 기호를 사용하여 제한을 두지 않는 기호로 의미한다.
<?> //타입 매개변수에 모든 타입 사용
<? extends T> //T 타입과 T타입을 상속받는 하위 클래스 타입만 사용
<? super T> // T 타입과 T타입을 상속받은 상위 클래스 타입만 사용
이 부분은 아직 잘 모르겟으므로.. 추후에 사용하게 된다면 더 공부해봐야 겠다.
제네릭 메서드
제네릭 클래스는 객체를 생성할 때 타입을 지정한다. - 전역변수처럼 사용 됨
제네릭 메서드는 호출되는 시점에 제네릭 타입을 지정한다. - 메서드 안에서 지역변수처럼 사용
public <K, V> void getMethod(K k, V v) {
System.out.println(k + v);
}
}
제네릭 메서드 주의!!
제네릭 메서드는 호출되는 시점에 타입이 지정되기 때문에, 호출되기 이전에는 어떤 타입인지 알 수 없다.
따라서 최상의 클래스인 Object클래스의 메서드만이 사용 가능하다.
제어자 및 타입 | 메서드 | 설명 |
Protected Object | clone() | 객체의 복제본 생성 후 반환 |
boolean | equals(Object obj) | 해당 객체와 전달받은 객체 같은지 확인 |
protected void | finalize() | 참조하지 않는 해당 객체를 가비지 컬렉터가 리소스 정리하기 위해 호출 |
Class <T> | getClass | 해당 객체의 클래스 타입 반환 |
int | hashCode | 해당 객체의 해시 코드값 반환 |
void | notify() | 해당 객체의 대기(wait)하고 있는 하나의 스레드를 다시 실행할 때 호출 |
void | notifyAll() | 해당 객체의 대기(wait)하고 있는 모든 스레드를 다시 실행할 때 호출 |
String | toString() | 해당 객체의 정보를 문자열로 반환함 |
728x90
반응형
'IT 정보 > Java' 카테고리의 다른 글
[Java]컬렉션 프레임워크 Comparator & Comparable (16) | 2022.05.16 |
---|---|
[Java]컬렉션(Collection Framework) (10) | 2022.05.16 |
[Java] 객체지향 프로그래밍 (4) - 추상 클래스, 인터페이스 (24) | 2022.05.13 |
[Java] 객체지향 프로그래밍 (3) - 다형성편 (8) | 2022.05.13 |
[Java] getter 와 setter 메서드 (8) | 2022.05.12 |