# 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
โ ๊ฐ์ฒด์งํฅ์ ๊ฐ๋ Java Scanner โ