자바(java) 제네릭(generic)

Yejun Jang·2022년 5월 5일
0

자료 구조를 만들때, 미리 지정된 데이터 타입이 아닌, 그 타이밍에 필요한 특정 데이타 타입을 지정해 주는 것 (외부에서 사용자에 의해 지정)

※ generic(제네릭)의 장점
1. 컴파일 단계에서 잘못된 데이터 타입이 들어오는 것을 방지 가능.
2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 즉, 관리하기가 편하다.
3. 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다.

// 제네릭 클래스
class ClassName {

private E element;	// 제네릭 타입 변수

void set(E element) {	// 제네릭 파라미터 메소드
	this.element = element;
}

E get() {	// 제네릭 타입 반환 메소드
	return element;
}

}

class Main {
public static void main(String[] args) {

	ClassName<String> a = new ClassName<String>();
	ClassName<Integer> b = new ClassName<Integer>();
	
	a.set("10");
	b.set(10);

	System.out.println("a data : " + a.get());
	// 반환된 변수의 타입 출력 
	System.out.println("a E Type : " + a.get().getClass().getName());
	
	System.out.println();
	System.out.println("b data : " + b.get());
	// 반환된 변수의 타입 출력 
	System.out.println("b E Type : " + b.get().getClass().getName());
	
}

}


a객체의 ClassName의 E 제네릭 타입은 String으로 모두 변환.
b객체의 ClassName의 E 제네릭 타입은 Integer로 모두 변환.

출력 결과 :
a data : 10
a E Type : java.lang.String

b data : 10
b E Type : java.lang.Integer


※ generic 2개 사용하는 예제

class People<T,M>{
private T name;
private M age;

People(T name, M age){
    this.name = name;
    this.age = age;
}

public T getName() {
    return name;
}
public void setName(T name) {
    this.name = name;
}
public M getAge() {
    return age;
}
public void setAge(M age) {
    this.age = age;
}

//Generic Mothod
public static<T,V> boolean compare(People<T,V>p1, People<T,V>p2) {
    boolean nameCompare = p1.getName().equals(p2.getName());
    boolean ageCompare =p1.getAge().equals(p2.getAge());
    return nameCompare && ageCompare;
}

}

public class ExGeneric {
public static void main(String []args){
//타입 파라미터 지정
People<String,Integer> p1 = new People<String,Integer>("Jack",20);
//타입 파라미터 추정
People<String,Integer> p2 = new People("Steve",30);
//GenericMothod 호출
boolean result = p1.compare(p1,p2);
System.out.println(result);
}
}

profile
자바 개발자

0개의 댓글