1) ์ ๋ค๋ฆญ ํด๋์ค์ ์ ๋ค๋ฆญ ๋ฉ์๋
- ์ด๋ฒ์๋ ์ ๋ค๋ฆญ ํด๋์ค์ ์ ๋ค๋ฆญ ๋ฉ์๋์ ๋ํด ์์๋ณด์!
(1) ์ ๋ค๋ฆญ ํด๋์ค
public class ํด๋์ค๋ช
<T, K, V, ...> { }
public interface ์ธํฐํ์ด์ค๋ช
<T, K, V, ...> { }
- ์ ๋ค๋ฆญ ํด๋์ค๋ ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง๋ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํ๋ค.
- ์ ๋ค๋ฆญ ํด๋์ค๋ ์ ์ธ๋ถ์ “<>” ๊บฝ์ ๊ธฐํธ๊ฐ ๋ถ๊ณ ๊ทธ ์ฌ์ด์ ํ์ ํ๋ผ๋ฏธํฐ๋ค์ด ์์นํ๋ค!
- ํ์ ํ๋ผ๋ฏธํฐ๋ ๋ณ์๋ช ๊ณผ ๋์ผํ ๊ท์น์ ๋ฐ๋ผ ์์ฑํ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋๋ฌธ์ ์ํ๋ฒณ ํ๊ธ์๋ก ํํํ๋ค!
- ๋ํ, ์ธ๋ถ์์ ์ ๋ค๋ฆญ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋์ ํ์ ํ๋ผ๋ฏธํฐ์ ๊ตฌ์ฒด์ ์ธ ํ์ ์ ์ง์ ํด์ผ ํ๋๋ฐ ๋ง์ฝ ์ง์ ํ์ง ์์ผ๋ฉด ์๋ฌต์ ์ผ๋ก Object ํ์ ์ด ์ฌ์ฉ๋๋ค.
- ์ ๋ค๋ฆญ ํด๋์ค๋ ์ด์ ์ ๋ง์ด ๋ค๋ค๊ธฐ์ ์์ธํ ์ฝ๋๋ ์๋ตํ๋ค!
(2) ์ ๋ค๋ฆญ ๋ฉ์๋
public <T, K, V> ๋ฆฌํด ํ์
๋ฉ์๋๋ช
(๋งค๊ฐ ๋ณ์, ...) { }
- ์ ๋ค๋ฆญ ๋ฉ์๋๋ ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ฅผ ์๋ฏธํ๋ค.
- ํ์ ํ๋ผ๋ฏธํฐ๊ฐ ๋ฉ์๋ ์ ์ธ๋ถ์ ์ ์๋๋ค๋ ์ ์์ ์ ๋ค๋ฆญ ํด๋์ค์๋ ์ฐจ์ด๊ฐ ์๋ค.
- ์ ๋ค๋ฆญ ๋ฉ์๋๋ ๋ฆฌํด ํ์ ์์ “<>” ๊บฝ์ ๊ธฐํธ๊ฐ ๋ถ๊ณ ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ํ ๋ค, ๋ฆฌํด ํ์ ๊ณผ ๋งค๊ฐ๋ณ์ ํ์ ์์ ์ฌ์ฉํ๋ค.
- ์ ๋ค๋ฆญ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ฌ๋ฌ ํ์ ์ ๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ํ๊ฒ ๋์ด ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ์ ์ค์ผ ์ ์๋ค๋ ์ฅ์ ์ด ์๋๋ฐ ์ฝ๋๋ก ํ ๋ฒ ๋๊ปด๋ณด๋๋ก ํ์!
- ๋ฌผ๋ก , ๋ฉ์๋๊ฐ ์ด๋ ํ ์์ ์ ์ฒ๋ฆฌํ๋๋์ ๋ฐ๋ผ ์ฅ์ ์ด ์์ด์ง ์๋ ์๋ค.
public static void printIntArray(Integer[] iArray) {
for (Integer i: iArray) {
System.out.print(i + " ");
}
System.out.println();
}
public static void printDoubleArray(Double[] dArray) {
for (Double d : dArray) {
System.out.print(d + " ");
}
System.out.println();
}
public static void printStringArray(String[] sArray) {
for (String s: sArray) {
System.out.print(s + " ");
}
System.out.println();
}
public static <T> void printAnyArray(T[] array) {
for (T t: array) {
System.out.print(t + " ");
}
System.out.println();
}
public static void main(String[] args) {
Integer[] iArray = {1, 2, 3, 4, 5};
Double[] dArray = {1.0, 2.0, 3.0, 4.0, 5.0};
String[] sArray = {"A", "B", "C", "D", "E"};
printIntArray(iArray);
printDoubleArray(dArray);
printStringArray(sArray);
printAnyArray(iArray);
printAnyArray(dArray);
printAnyArray(sArray);
}
- ์ด์ฒ๋ผ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ํ์ ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฉ์๋์์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ ํ ํ์์์ด ์ ๋ค๋ฆญ ๋ฉ์๋ ํ๋๋ง ์ ์ํ์ฌ ์ค๋ณต์ ์ค์ผ ์ ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ ๋ค๋ฆญ ๋ฉ์๋๋ ํด๋์ค๊ฐ ์ ๋ค๋ฆญ ํด๋์ค๊ฐ ์๋ ์ผ๋ฐ ํด๋์ค์ฌ๋ ์ ์ํ ์ ์๋ค.
- ํ๋ง๋๋ก, ์ ๋ค๋ฆญ ๋ฉ์๋๋ ์ ๋ค๋ฆญ ํด๋์ค์๋ ๋ณ๊ฐ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ํ๋ ์ ๋ค๋ฆญ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
- ์์ธํ๊ฒ ์ค๋ช ํ์๋ฉด ์ ๋ค๋ฆญ ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋, ์ด๋ค ํ์ ์ด๋์ ๋ฐ๋ผ ์ปดํ์ผ ๊ณผ์ ์์ ๊ตฌ์ฒด์ ์ธ ํ์ ์ผ๋ก ๋์ฒด๋๋ ๋ฐ๋ฉด ์ ๋ค๋ฆญ ๋ฉ์๋๋ ๋งค๊ฐ๋ณ์ ๊ฐ์ด ์ด๋ค ํ์ ์ด๋์ ๋ฐ๋ผ ์ปดํ์ผ ๊ณผ์ ์์ ๊ตฌ์ฒด์ ์ธ ํ์ ์ผ๋ก ๋์ฒด๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ง์ง๋ง์ผ๋ก ์ ๋ค๋ฆญ ๋ฉ์๋์์ ์ฝ๊ฐ ํท๊ฐ๋ฆด ์ ์๋ ๋ถ๋ถ์ด ํ ๊ฐ์ง ์๋๋ฐ ์ฝ๋๋ก ๋จผ์ ์์๋ณด์!
class Test<T> {
public <T> void print(T data) {
System.out.println(data);
}
public static void main(String[] args) {
Test<String> test = new Test<>();
test.print(10000);
}
}
- ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ ๋ค๋ฆญ ํด๋์ค์ธ Test๋ ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ T๋ก ๊ฐ๊ณ , ์ ๋ค๋ฆญ ๋ฉ์๋์ธ print() ๋ํ ํ์ ํ๋ผ๋ฏธํฐ๊ฐ T๋ก ์๋ก ๊ฐ์ ํ์ ํ๋ผ๋ฏธํฐ ๋ณ์๋ช ์ด ์ค๋ณต๋์ด ์๋ค.
- ๊ทธ๋ฆฌ๊ณ main() ๋ฉ์๋๋ฅผ ๋ณด๋ฉด String ํ์ ์ผ๋ก Test ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ print() ๋ฉ์๋์ ๋งค๊ฐ๋ณ์์ Intํ ๊ฐ์ ๋ฃ์ด์ฃผ๊ฒ ๋๋ ๊ต์ฅํ ํผ๋์ค๋ฌ์ด ์ํฉ์ด๋ค....
- ์ ๋ค๋ฆญ ํด๋์ค์ ์ ๋ค๋ฆญ ๋ฉ์๋์ ํ์ ํ๋ผ๋ฏธํฐ๊ฐ ์ค๋ณต๋๋ ๊ฒฝ์ฐ, Java์์๋ ์ ๋ค๋ฆญ ๋ฉ์๋์ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค.
- ์ฆ, ์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ์ง๋ ์๊ณ print(T data) ๋ฉ์๋์ ํ์ ํ๋ผ๋ฏธํฐ T๋ ์ ๋ค๋ฆญ ํด๋์ค ๊ฒ์ด ์๋ ์ ๋ค๋ฆญ ๋ฉ์๋์ ํ์ ํ๋ผ๋ฏธํฐ๊ฐ ์ฌ์ฉ๋๋ค๋ ๊ฒ์ด๋ค.
[Reference]
- https://www.youtube.com/watch?v=Vv0PGUxOzq0&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC
- https://mangkyu.tistory.com/241
๋ฐ์ํ
'๐ง Programming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ๋ค๋ฆญ (5) - ๊ณต๋ณ์ฑ, ๋ฐ๊ณต๋ณ์ฑ, ๋ฌด๊ณต๋ณ์ฑ (0) | 2023.07.25 |
---|---|
์ ๋ค๋ฆญ (4) - ์ ํ๋ ํ์ ํ๋ผ๋ฏธํฐ (0) | 2023.07.23 |
์ ๋ค๋ฆญ (2) - ์ ๋ค๋ฆญ & ํ์ ํ๋ผ๋ฏธํฐ (0) | 2023.07.22 |
์ ๋ค๋ฆญ (1) - ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ ์ด์ (1) | 2023.07.22 |
์ด๋ ธํ ์ด์ (Annotation) (0) | 2023.07.22 |