μ λλ¦( generics)μ΄λ?
λ€μν νμ μ κ°μ²΄λ₯Ό λ€λ£¨λ ν΄λμ€λ μΈν°νμ΄μ€μμ μ¬μ©ν λ°μ΄ν° νμ μ μΈμ€ν΄μ€λ₯Ό μμ±ν λ κ²°μ νλ κ²μΌλ‘ JDK 5.0λΆν° μ§μ
λ°μ΄ν° νμ λν λ³λμ λ©μλλ λ©€λ² λ³μλ₯Ό ꡬνν νμ μμ΄ λ―Έλ¦¬ μ μλ λ©μλ λλ λ©€λ² λ³μμ μλ‘ λ€λ₯Έ μλ£νμΌλ‘ μ²λ¦¬ν μ μλ€.
κ°μ²΄μ νμ μ μ»΄νμΌ ν λ 체ν¬νλ―λ‘ κ°μ²΄ νμ μ μμ μ±μ λμ΄κ³ λΆνμν ν λ³νμ μ€μΌ μ μλ€.
βΆμ₯μ
- μ±λ₯ μ νλ₯Ό μ λ°νλ κ°μ μΊμ€ν μ μ€μΌ μ μλ€.
- μ»΄νμΌ ν λ νμ μ€λ₯λ₯Ό 체ν¬νλ―λ‘ κ°μ²΄ νμ μ μμ μ±μ λμΈλ€.
- λ°λ³΅μ μΈ μ½λλ₯Ό μ€μΌμ μμΌλ©°, μ¬μ¬μ©μ± μ¦κ°λ‘ μ μ§λ³΄μκ° νΈλ¦¬νλ€.
μ λλ¦ ν΄λμ€ λ° μ λλ¦ μΈν°νμ΄μ€
νμ νλΌλ―Έν°λ₯Ό νλ μ΄μ κ°λ μ λλ¦ νμ μ ν΄λμ€ λλ μΈν°νμ΄μ€
ν΄λμ€λ μΈν°νμ΄μ€λ₯Ό μ μΈν λ νμ μ μ§μ νμ§ μκ³ μΈμ€ν΄μ€λ₯Ό μμ±ν λ μ¬μ©ν νμ μ νλΌλ―Έν°λ‘ μ§μ
ν΄λμ€λ μΈν°νμ΄μ€λ₯Ό μ μΈν λ ν΄λμ€ λλ μΈν°νμ΄μ€ μ΄λ¦ λ€μ <> λΆνΈλ₯Ό λΆμ΄λ©°, <> λΆνΈ μ¬μ΄μ νμ νλΌλ―Έν°λ₯Ό μ§μ
μ λλ¦ νμ μ λκ° μ΄μμ νμ νλΌλ―Έν°λ₯Ό κ°μ§ μ μμΌλ©°, κ° νμ μ μ½€λ§(,)λ‘ κ΅¬λΆνλ€.
νμ νλΌλ―Έν°
μΌλ°μ μΌλ‘ λλ¬Έμ μνλ²³ ν λ¬Έμλ₯Ό μ¬μ©
μ λλ¦ λ©μλ
- νμ νλΌλ―Έν°λ₯Ό νλ μ΄μ κ°λ λ©μλ
- λ©μλλ₯Ό μ μΈν λ νμ μ μ§μ νμ§ μκ³ λ©μλλ₯Ό νΈμΆ ν λ λͺ μμ μΌλ‘ νμ μ μ§μ νκ±°λ λ©μλμ λ§€κ°λ³μ κ°μ νμ μΌλ‘ μ§μ
- μ μ λ°©λ²μ λ¦¬ν΄ νμ μμ <> κΈ°νΈλ₯Ό μΆκ°νκ³ <> κΈ°νΈ μμ νμ νλΌλ―Έν°λ₯Ό κΈ°μ ν ν λ¦¬ν΄ νμ κ³Ό λ§€κ° λ³μ νμ μμ νμ νλΌλ―Έν°λ₯Ό μ¬μ©
- βΆ λ©μλ νΈμΆ νμ
- λͺ μμ μΌλ‘ νμ νλΌλ―Έν° μ§μ : 리ν΄νμ λ³μ = κ°μ²΄λͺ .<λͺ μμ μΈνμ >λ©μλλͺ (λ§€κ°λ³μκ°);
- λ©μλμ λ§€κ°λ³μκ° νμ μΌλ‘ νμ νλΌλ―Έν° μ§μ 리ν΄νμ λ³μ = κ°μ²΄λͺ .λ©μλλͺ (λ§€κ°λ³μκ°);
μ λλ¦μ μμΌλ μΉ΄λ(wildcard)
- μ λλ¦μ μ»΄νμΌ λ¨κ³μμ νμ μμ μ± μν΄ μ§μνλ―λ‘ κΈ°λ³Έμ μΌλ‘ λ€νμ±(Polymorphism)μ κ°μ§ μλλ€. λ°λΌμ μ λλ¦(Gereric)μ λ€νμ±μ κ°λλ‘ λ§λ€κΈ° μν΄ μμΌλ μΉ΄λλ₯Ό μ¬μ©νλ€.
- μ λλ¦ νμ μ λ§€κ°κ°μ΄λ λ¦¬ν΄ νμ μΌλ‘ μ¬μ©ν λ ꡬ체μ μΈ νμ λμ μμΌλ μΉ΄λ(?)λ₯Ό μ¬μ©ν μ μλ€. μ¦, μ λλ¦ νμ μ ν΄λμ€λ₯Ό νλΌλ―Έν°λ‘ μ¬μ©ν λ ꡬ체μ μΈ νμ μ΄ μ ν΄μ§μ§ μλ κ²½μ°μ μ¬μ©νλ€.
package ch10.unit01;
public class Ex03 {
public static void main(String[] args) {
Test3<String> t1 = new Test3<String>();
t1.set("μμΈ");
//t1.set(100); μ»΄μ€λ₯
String s = t1.get();
System.out.println(s);
Test3<Integer> t2 = new Test3<>(); // new Test3<>();μμ <>μ Integer
t2.set(100);
//t2.set("seoul"); μ»΄μ€λ₯
int n = t2.get();
System.out.println(n);
/* κ°λ₯νμ§λ§ κ²½κ³ , μ΄κ²½μ° μ λλ¦μ Objectλ‘ μ²λ¦¬
Test3 t3 = new Test3();
t3.set("μμΈ");
t3.set(50);
*/
}
}
//Generic - νλμ νμ
νλΌλ―Έν°
class Test3<T>{
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
System.out.println(t.getClass());
return t;
}
}
package ch10.unit01;
public class Ex04 {
public static void main(String[] args) {
Test4 <String, Integer> obj = new Test4<>();
obj.set("μλ°", 95);
obj.disp();
}
}
// λκ°μ νμ
νλΌλ―Έν°
class Test4<T,U> {
private T t;
private U u;
public void set(T t, U u) {
this.t = t;
this.u = u;
}
public void disp() {
System.out.println("T:"+t.getClass().getName()+","+t);
System.out.println("U:"+t.getClass().getName()+","+u);
}
}
package ch10.unit01;
//μ λλ¦ μΈν°νμ΄μ€
public class Ex05 {
public static void main(String[] args) {
Test5<Integer> t = new TestImp15<>();
t.disp(100);
}
}
//μ λλ¦ μΈν°νμ΄μ€
interface Test5<T>{
public void disp(T t);
}
//ꡬν ν΄λμ€ - 1
class TestImp15<T> implements Test5<T>{
public void disp(T t) {
System.out.println(t);
}
}
class DemoImp15<T> implements Test5<String>{
public void disp(String t) {
System.out.println(t);
}
}
package ch10.unit01;
public class Ex06 {
public static void main(String[] args) {
Test6 t = new Test6();
t.disp("μλ°");
t.disp(100);
t.write(100);
//t.wriet("μλ°"); μ»΄μ€λ₯
}
}
//generic method
class Test6{
public <U> void disp(U u) {
System.out.println(u.getClass().getName()+","+u);
}
// Number
public <U extends Number> void write(U u) {
System.out.println(u.getClass().getName()+","+u);
}
}
package ch10.unit01;
public class Ex07 {
public static void main(String[] args) {
Test1<Integer> t = new Test1<Integer>();
t.set(100);
System.out.println(t.get());
/*Integer a = 10;
Number b = a; κ°λ₯, up casting
*/
//Test1<Number> t2 = t; // μ»΄μ€λ₯ λΆκ° μ λλ¦μ μμ κ΄κ³κ° μλ
// Test1<Integer>μ΄ Test1<Number>μ μμ κ΄κ³κ° λ μμμ
}
}
class Test1<T> {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
package ch10.unit02;
public class Ex02 {
public static void main(String[] args) {
Test2<String>t = new Test2<>();
t.set("μλ°");
write(t);
Test2<Integer> t2 = new Test2<>();
t2.set(100);
write(t2);
}
/*
* μ λλ¦ μμΌλ μΉ΄λ - ?
: λͺ¨λ ν΄λμ€λ μΈν°νμ΄μ€κ° κ°λ₯
: μ λλ¦ νμ
μ μμ‘΄μ μ΄μ§ μλ λ©μλλ±μ νΈμΆν λ μ¬μ©
: μ½κΈ°λ§ κ°λ₯. λ³κ²½μ λΆκ°
*/
public static void write(Test2<?>obj) {
obj.disp();
// obj.set(30); // μ»΄μ€λ₯, μλ£ν κ²°μ λμ§ μμ
System.out.println("------------\n");
}
}
class Test2<T>{
private T t;
public T get() {
return t;
}
public void set(T t) {
this.t = t;
}
public void disp() {
System.out.println(t);
}
}
'π» > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] 16μΌμ°¨ : 컬λ μ (Collection) - 2 (0) | 2024.03.11 |
---|---|
[Java] 16μΌμ°¨ : 컬λ μ (Collection) (0) | 2024.03.11 |
[Java] 15μΌμ°¨ : μμΈ(Exception)μ²λ¦¬ 2 (2) | 2024.03.06 |
[Java] 14μΌμ°¨ : μμΈ(Exception)μ²λ¦¬ (3) | 2024.03.05 |
[Java] 14μΌμ°¨ : μ€μ²©ν΄λμ€, μ΄κ±°ν, μ΄λ Έν μ΄μ , λ μ½λ (0) | 2024.03.05 |