아 이게 뭐임!

Generic이 뭐임!! [JAVA]

마로가마따 2021. 7. 28. 08:32

Contents

-       Generic 등장 배경

-       Generic 

 

 

 

왜 Generic이란 기술이 생겼을까요.

 

제네릭(generic)이란 클래스가 사용할 데이터의 타입을 외부에서 가져오는 것을 의미합니다.

 

기술이 사장되지 않고 사용되고있다는 것은 앞서간  사람들이 어떤 문제에 도달했고 그  문제의 해결방안으로써 해당 기술이 제안되었을 것입니다.

 

generic 또한 마찬가지입니다.

 

말이 어려우니 간단한 예시를 보여드리겠습니다.

 

이클립스에서 간단한 java  project를 만들어 봅시다.

public class Main {

	public static void main(String[] args) {
		
		
	}
}

 

 

이제 새로운 클래스를 하나 만듭니다.

 

저는 클래스 이름을 MyInteger로 하겠습니다.

 

public class MyInteger {
	Integer i;
	
	MyInteger(Integer i){
		this.i = i;
	}
	
	void printStuff() {
		System.out.println(i);
	}
}

 

위에있는 클래스는 MyInteger로 Integer를 인자로 받아 객체를 생성하는 클래스입니다. 

(콘솔에 찍어 보여주는 기능도 있습니다...!)

 

이번에는 Integer가 아닌 Double을 받아오는 클래스를 만들어 보겠습니다.

 

public class MyDouble {
	Double i;
	
	MyDouble(Double i){
		this.i = i;
	}
	
	void printStuff() {
		System.out.println(i);
	}
}

 

이렇게 Integer와 Double을 다루는 두개의 클래스를 만들었습니다.

 

그런데 만들고 보니 MyInteger와 MyDouble은 타입이 Integer에서 Double이 된것 말고는 다른 점이 하나도 없습니다.

 

이러한 상황이 Generic이 탄생하게 된 배경입니다.

 

 

이번엔 MyGeneric이라는 이름으로 새로운 클래스를 만들어 보겠습니다.

 

public class MyGeneric<T> {
	T object;

	MyGeneric(T object){ 
    	this.object= object; 
    }
    
	void showType() { 
		System.out.println(object.getClass().getName()); 
	} 
}

 

제네릭을 만들때 클래스 이름 바로 뒤에 <> 표시 후에 안에 이름을 하나 정해줍니다. (몇개 빼면 암거나 가능)

 

이제 결과를 출력해보록 하겠습니다.

 

Main문

public class Main {

	public static void main(String[] args) {
		MyGeneric<Integer> obj = new MyGeneric<>(10);
		MyGeneric<Double> obj2 = new MyGeneric<>(11.29);
		
		obj.showType();
		obj2.showType();
	}
    
}

 

실행시켜보면 잘 출력되는 것을 알 수 있습니다.

 

generic 출력1

 

* 주의

참고로 

 

빨간 원 안에 흔히 사용하는 int double float 같은 기본 타입은 불가능합니다. 언제나 object타입이 와야 됩니다.

 

 

 


 

 

제네릭이 등장하게 된 배경 예시를 들어 설명했는데요.

 

다음 포스팅에서는 이러한 제네릭을 활용하여 하나 이상의 변수를 다루고 제네릭에 들어올 수 있는 타입을 제한하거나 검사하는 방법에 대해 포스팅하도록 하겠습니다.

 

 

 

 

방문해주셔서 감사합니다.

 

 

 

 

반응형