Back-End/JAVA

[Java] Generic(제네릭)

챌링킴 2021. 5. 31. 20:39
반응형

1) Generic(제네릭)

클래스를 선언할 때 자료형을 정하지 않는 기법(사용할 때 지정=객체를 만들 때 지정)

 

<키워드>

   키워드는 보통 대문자로 시작한다.

   E : Element

   N : Number

   T : Type

   K : Key

   V : Value

 

2) 제네릭 클래스

   클래스 내부에서 사용될 자료형을 지정한다.

   class 클래스명<키워드>{

          //내부에서 키워드를 타입으로 사용 가능

          키워드 변수;

   }

   객체를 만들 때 키워드 대신에 사용될 자료형을 지정해준다.

public class GClassTest<Web> {
	Web data;
}
public class GenericMain {
	public static void main(String[] args) {
		GClassTest<String> obj = new GClassTest<>();
		obj.data = "Hello";
		GClassTest<Integer> obj2 = new GClassTest<>();
		// Integer = 10
		obj2.data = 10;
	}
}

3) 제네릭 메소드

   메소드 내부에서 사용될 자료형을 지정한다.

   <키워드>리턴타입 메소드명( ){

              //내부에서 키워드를 타입으로 사용 가능

   }

   리턴타입과 매개변수도 키워드로 작성 가능하다.

public class GMethodTest {
	<T> T f(T data) {
		if (data instanceof Integer) {
			System.out.println("정수로 호출");
		} else if (data instanceof String) {
			System.out.println("문자열로 호출");
		}
		return data;
	}
}
public class GenericMain {
	public static void main(String[] args) {
GMethodTest m = new GMethodTest();
		m.<Integer>f(10);
		m.<String>f("h");
		// 제네릭 메소드는 묵시적으로 타입을 알 수 있는 경우가 대부분이다.
		// 보통 <자료형>을 작성해주지 않아도 호출이 가능하다.
		m.f("h");
		m.f(10);
	}
}

4) 제네릭 인터페이스

   인터페이스 내부에서 사용될 자료형을 지정한다.

   interface 인터페이스명<키워드>{

           //내부에서 키워드를 타입으로 사용 가능

   }

public interface GInterfaceTest<N1, N2> {
	N1 add(N1 num1, N1 num2);

	N2 div(N2 num1, N2 num2);
}
public class GenericMain {
	public static void main(String[] args) {
		GInterfaceTest<Integer, Double> obj = new GInterfaceTest<Integer, Double>() {

			@Override
			public Double div(Double num1, Double num2) {
				// TODO Auto-generated method stub
				return num1/num2;
			}

			@Override
			public Integer add(Integer num1, Integer num2) {
				// TODO Auto-generated method stub
				return num1+num2;
			}
		};
		System.out.println(obj.add(10, 2));
	}
}
반응형

'Back-End > JAVA' 카테고리의 다른 글

[Java] ArrayList  (0) 2021.06.01
[Java] 컬렉션 프레임워크(Collection Framework)  (0) 2021.05.31
[Java] Wrapper Class  (0) 2021.05.31
[Java] Object 클래스  (0) 2021.05.31
[Java] 예외 처리  (0) 2021.05.28