[Java] Generic Class
by youngjun._.Generic이란?
Generic이란 Class 내부에서 사용할 데이터의 타입을 외부에서 지정하는 기법

Java에서 Collection은 List<T>
, Set<T>
, Map<T,T>
등의 방식으로 활용하였다. <>
를 사용해서 안에 들어가야할 T
는 Type
을 의미한다.
간단한 예시를 살펴보자.
class Generic_Test<T> { var Generic_Data : T? = null }
// main class TestCode { @Test fun Test1(){ var test1 = Generic_Test<String>() test1.Generic_Data = "testdata" println(test1.Generic_Data) var test2 = Generic_Test<Int>() test2.Generic_Data = 1234 println(test2.Generic_Data.toString()) } }
// 결과 testdata 1234 Process finished with exit code 0
위 Code를 보면 Generic_Test
클래스의 타입은 로 설정되어있다.
그러므로 Generic_Test
를 사용할때는 외부에서 Type을 지정해주고 사용해야 한다!
변수 Generic_Data
는 Type
를 외부로부터 지정받아 사용하게 된다. 그렇기 때문에 test1
에서는 String을 지정받아 사용하였고test2
는 Int를 지정받아 사용하였다.
현재는 Type
을 1개를 지정해서 사용하였는데. 2개를 지정해서 사용하고 싶을 때에는 <T, T>
를 사용하면 된다.
Java의 Collection 에서는 Map<T, T>
이 2개의 타입을 지정해서 사용하는 경우이다.
class Generic_Test2<T1, T2> { var Data_1 : T1? = null var Data_2 : T2? = null }
class TestCode { @Test fun Test2(){ val test3 = Generic_Test2<String, Int>() test3.Data_1 = "Testdata2" test3.Data_2 = 12345 println("${test3.Data_1}, ${test3.Data_2}") } }
// 결과 Testdata2, 12345 Process finished with exit code 0
위 Code 의 경우를 보면 T1
과 T2
를 사용하였다.
풀어서 설명하면 Type
를 2개를 사용하였고 T1
에는 String
을 T2
에는 Int
를 사용한 경우이다.
Generic
은 Method
에서도 사용할수 있다.
class TestCode{ @Test fun Test3(){ println(Test3_Method("ABCD", 1234)) } fun <T1, T2> Test3_Method(INPUT1 : T1, INPUT2 : T2) : Int = ( INPUT1.toString().length + INPUT2.toString().length ) }
// 결과 8 Process finished with exit code 0
위 Code를 보면 Test3_Method
라는 Method
를 사용할때 받아오는 Type
을 지정해주지 않았다. 그리고 Method
명을 선언하기 전에 <T1, T2>
라는 Generic
을 사용하였고 INPUT1
과 INPUT2
는 해당 Type
을 사용하게 된다.
Test_Method
는 어떠한 값이던 데이터의 Length
를 반환하게 된다.
"ABCD"
와 1234
의 Length
값은 각각 4
이므로 결과값은 8
이다.
E - Element K - Key N - Number T - Type V - Value R - ReturnType
위 내용은 Generic
의 Parameter
이다.
위 내용을 따라서 Type
은 T
를 쓰지 않으면 에러가 발생하지는 않지만 이전의 라이브러리 등의 호환성이나 가독성을 위해서라면 따르는 것이 좋겠다.
Reference
블로그의 정보
개발하는만두
youngjun._.