βπ» μ λ€λ¦ Generic
- λ°μ΄ν° νμμ μμ‘΄νμ§ μκ³ νλμ κ°μ΄ μ¬λ¬ νμ μ κ°μ§ μ μλλ‘ νλ λ°©λ²
- ν΄λμ€ λ΄λΆμμ μ§μ νλ κ²μ΄ μλ μΈλΆμμ μ¬μ©μμ μν΄ μ§μ λλ κ²
- ν΄λμ€, λ©μλμμ μ¬μ©ν λ°μ΄ν° νμ μ λμ€μ νμ νλ κΈ°λ²
→ νμ μ μΈμ€ν΄μ€λ₯Ό μμ±ν λλ λ©μλλ₯Ό νΈμΆν λ μ ν¨
- ν΄λμ€λ₯Ό μ μΈνμ¬ κ°μ²΄λ₯Ό μμ±ν λ ꡬ체μ μΈ νμ κΈ°μ¬ = μ¦, main μμ κ°μ²΄ λ§λ€λ !!
- νμ μ μ΄λ€ ν΄λμ€ μ’ λ₯μ λ§€κ°λ³μλ‘ λ³΄λ κ²
μ΄λ€ μλ£κ΅¬μ‘°λ₯Ό λ§λ€μ΄ λ°°ν¬νκ³ μ ν λ String νμ
λ, Integer νμ
λ μ§μνκ³ μΆλ€λ©΄
κ° κ° ν΄λμ€λ§λ€ νλμ© νμ
μ λ§λ€μ§ μκ³ μ λ€λ¦μ μ¬μ©νλ κ² !!
public class ν΄λμ€λͺ
<νμ
λ§€κ°λ³μ> { ... }
public interface μΈν°νμ΄μ€λͺ
<νμ
λ§€κ°λ³μ> { ... }
νμ μΈμ | <T> | <E> | <K> | <N> | <V> | <R> |
μ€λͺ | Type | Element | Key | Number | Value | Result |
- νμ νλΌλ―Έν°λ‘ λͺ μν μ μλ κ²μ μ°Έμ‘° νμ λ°μ λΆκ°
→ μ¦, int, char λ± μΌλ° νμ μ x
π μ λ€λ¦μ μ₯μ
- κ°μ²΄μ νμ μ μ»΄νμΌ νμμ 체ν¬ν μ μμ΄μ νμ μμ μ±μ λμ
- νλ³νμ λ²κ±°λ‘μμ΄ μ€μ΄λ€μ΄ μ½λκ° κ°κ²°
π‘ νμ μμ μ± type safety
- μλνμ§ μμ νμ μ κ°μ²΄κ° μ μ₯λλ κ²μ λ§μ
- μ μ₯λ κ°μ²΄λ₯Ό κΊΌλ΄μ¬ λ λ€λ₯Έ νμ μΌλ‘ μλͺ» νλ³ννμ¬ λ°μν μ μλ μ€λ₯λ₯Ό μ€μ
ππ» μ λ€λ¦ ν΄λμ€
- μ¬λ¬ μ°Έμ‘° μλ£νμ μ¬μ©ν΄μΌνλ κ²½μ°μλ νλμ λ¬Έμλ‘ νν
- ν΄λμ€λͺ μ°μΈ‘μ <>λ₯Ό μ¬μ©ν΄μ μ μΈ
- μ½€λ§λ‘ ꡬλΆν΄μ μ¬λ¬ κ° μ μΈλ κ°λ₯
1οΈβ£ μ λ€λ¦ ν΄λμ€ μ μ
- ν νλ¦Ώ ννμ μ λ€λ¦ ν΄λμ€λ₯Ό μ μνλ©° νμ μ€μ
μ κ·Όμ μ΄μ class ν΄λμ€λͺ
<T> {}
public class Happy<T> {}
μ κ·Όμ μ΄μ class ν΄λμ€λͺ
<T, K> {}
public class Happy<T, K> {}
2οΈβ£ μ λ€λ¦ ν΄λμ€μ μμ±κ³Ό λ©μλ μ μ
- νλμ λ©μλ λ¦¬ν΄ κ°μ hλ‘ μμ±
public class Happy<T> {
private T h;
public T get() { return h; }
public void set( T h ) { this.h = h; }
}
3οΈβ£ μ λ€λ΄ κ°μ²΄ μμ±
- Happy κ°μ²΄λ₯Ό μμ±ν λ μ΄λ€ νμ μ κ°μ λ£μ κ²μΈμ§ μ§μ
βͺοΈ μ λ€λ΄ μ¬μ©
public class Main {
public static void main(String[] args) {
Happy<String> happy1 = new Happy<String>(); //String νμ
λ§ μ μ₯
happy1.set("String")
String str = happy1.get();
Happy<Integer> happy2 = new Happy<Integer>(); //Integer νμ
λ§ μ μ₯
happy2.set(1);
int value = happy2.get();
}
}
βͺοΈ μ λ€λ΄ λ―Έμ¬μ©
//happy <String>()
public class Happy{
private String h;
public String get() { return h; }
public void set(String h) { this.h = h; }
}
//happy <Integer>();
public class Happy{
private Integer h;
public Integer get() { return h; }
public void set(String h) {this.h= h;}
}
4οΈβ£ κ°μ²΄ μμ±ν λ νμ μ μ§μ ν΄μ£Όλ©΄ Happy ν΄λμ€λ μ»΄νμΌμ λ§μΉ ν λμν¨
π μ λ€λ¦ ν΄λμ€μ μΌλ° ν΄λμ€ μ°¨μ΄
(1) ν΄λμ€ μ μ
βͺοΈ μΌλ° ν΄λμ€
class ClassTest {}
βͺοΈ μ λ€λ¦ ν΄λμ€
class ClassTest<T> {}
(2) μμ± / λ©μλ μ μ
βͺοΈ μΌλ° ν΄λμ€
private string str;
public get() {return str;}
public set(String str) { this.str = str ; }
βͺοΈ μ λ€λ¦ ν΄λμ€
private T t;
public T get() {return t; }
public T set( T t ) { this.t=t; }
(3) κ°μ²΄ μμ±
βͺοΈ μΌλ° ν΄λμ€
ClassTest ct = new ClassTest();
βͺοΈ μ λ€λ¦ ν΄λμ€
ClassTest<String> ct = new ClassTest<String>;
(4) κ°μ²΄ μ¬μ©
βͺοΈ μ λ€λ¦ ν΄λμ€
ct.set("Hong")
System.out.println(ct.get());
βπ» νμ λ§€κ°λ³μ
- νμ λ³μ or νμ λ§€κ°λ³μ : μ λ€λ¦ ν΄λμ€ <> μμ μλ λ³μλͺ
- λ³μ μ΄λ¦κ³Ό νμ μ μ΄λ¦μ ꡬλΆνκΈ° μν΄ νλμ 'λλ¬Έμ'λ‘ μμ±
- μ λ€λ¦ ν΄λμ€λ μ¬λ¬ κ°μ νμ λ§€κ°λ³μλ₯Ό κ°μ§ μ μμ
π λ€μ΄μλͺ¬νΈ μ°μ°μ : < >
- μ λ€λ¦ ν΄λμ€λ₯Ό μμ±ν λ μμ±μμ μλ£νμ λͺ μνμ§ μμ μ μμ
- μμ±μμ νμ λ§€κ°λ³μλ₯Ό μ»΄νμΌλ¬κ° λ¬Έλ§₯μ ν΅ν΄ μΆλ‘ ν¨
Computer<String> pc = new Computer<>();
π μμΌλ μΉ΄λ
- μ νμ λμ§ μλ κΈ°νΈ
- '?' κΈ°νΈλ₯Ό μ¬μ©νμ¬ μμΌλ μΉ΄λ μ¬μ©
- extendsλ μμ κ³Ό μμ μ νμλ§ κ°λ₯
- superμ μμ κ³Ό μμ μ μ‘°μλ§ κ°λ₯
<?> //νμ
λ§€κ°λ³μμ λͺ¨λ νμ
μ¬μ© == <? extends Object>
<? extends T> //Tμ κ·Έ μμ νμ
λ§ μ¬μ© - upper bound
<? super T> //Tμ κ·Έ μ‘°μ νμ
λ§ μ¬μ© - lower bound
π€π» μ λ€λ¦ λ©μλ
- ν΄λμ€ λ΄λΆμ νΉμ λ©μλλ§ μ λ€λ¦μΌλ‘ μ μΈν μ μμ
- μ λ€λ¦ ν΄λμ€λ κ°μ²΄λ₯Ό μμ±νλ μμ μ μ€μ νμ μ μ§μ ( μ μ λ³μμ²λΌ μ¬μ© )
- μ λ€λ¦ λ©μλλ νΈμΆλλ μμ μ μ€μ νμ μ§μ ( μ§μ λ³μμ²λΌ μ¬μ©)
- μ λ€λ¦ λ©μλλ₯Ό μ μν μμ μμλ μ€μ μ΄λ€ νμ μ΄ μ λ ₯λλμ§ μ μ μμ
- but, Object ν΄λμ€μ λ©μλλ μ¬μ© κ°λ₯
package tt;
public class GenericTest<E> {
private E element; //μ λ€λ¦ νμ
λ³μ
void set(E element){ //μ λ€λ¦ νλΌλ―Έν° λ©μλ
this.element = element;
}
E get() {
return element;
}
<T> T genericMethod(T t) {
return t;
}
}
→ μΌλ° ν΄λμ€ λ΄λΆμ μ λ€λ¦ λ©μλ μ μΈ
package tt;
public class Main {
public static void main(String[] args) {
GenericTest<String> a = new GenericTest<String>();
GenericTest<Integer> b = new GenericTest<Integer>();
a.set("10");
b.set(10);
System.out.println(a.get());
System.out.println(b.get());
System.out.println(a.genericMethod("ABCD"));
System.out.println(b.genericMethod(3));
System.out.println(a.genericMethod(3)); //String κ°μ²΄λΌλ νλΌλ―Έν° νμ
μ λ°λΌ Integerλ‘ νμ
λ³ν
System.out.println(b.genericMethod("abc"));
}
}
π± java.lang.Object ν΄λμ€μ λ©μλ
μ μ΄μ λ° νμ | λ©μλ | μ€λͺ |
protected Object | clone() | ν΄λΉ κ°μ²΄μ 볡μ λ³Έμ μμ±νμ¬ λ°νν¨ |
boolean | equals(Object obj) | ν΄λΉ κ°μ²΄μ μ λ¬λ°μ κ°μ²΄κ° κ°μμ§ μ¬λΆλ₯Ό λ°νν¨ |
protected void | finalize() | ν΄λΉ κ°μ²΄λ₯Ό λμ΄μ μ°Έμ‘°νμ§ μμ GCκ° κ°μ²΄ 리μμ€ μ 리νκΈ° μ΄ν΄ νΈμΆν¨ |
Class <T> | getClass() | ν΄λΉ κ°μ²΄μ ν΄λμ€ νμ λ°ν |
int | hashCode() | ν΄λΉ κ°μ²΄μ ν΄μ μ½λ κ°μ λ°ν |
void | notify() | ν΄λΉ κ°μ²΄μ λκΈ° νκ³ μλ νλμ μ€λ λλ₯Ό λ€μ μ€νν λ νΈμΆν¨ |
void | notifyAll() | ν΄λΉ κ°μ²΄μ λκΈ°νκ³ μλ λͺ¨λ μ€λ λλ₯Ό λ€μ μ€νν λ νΈμΆν¨ |
String | toString() | ν΄λΉ κ°μ²΄μ μ 보λ₯Ό λ¬Έμμ΄λ‘ λ°ν |
void | wait() | ν΄λΉ κ°μ²΄μ λ€λ₯Έ μ€λ λκ° notify()λ notifyAll()λ₯Ό μ€νν λ κΉμ§ νμ¬ μ€λ λλ₯Ό μΌμμ μΌλ‘ λκΈ° |
void | wait(long timeout) | ν΄λΉ κ°μ²΄μ λ€λ₯Έ μ€λ λκ° notify()λ notifyAll()λ₯Ό μ€ννκ±°λ μ λ¬λ°μ μκ°μ΄ μ§λ λκΉμ§ νμ μ€λ λ μΌμ λκΈ° |
void | wait(long timeout, int nanos) | ν΄λΉ κ°μ²΄μ λ€λ₯Έ μ€λ λκ° notify()λ notifyAll()μ μ€ννκ±°λ μ λ¬λ°μ μκ°μ΄ μ§λκ±°λ λ€λ₯Έ μ€λ λκ° νμ¬ μ€λ λλ₯Ό μΈν°λ½νΈ ν λ |
'Study > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[TIL] λ€νμ± (0) | 2022.05.15 |
---|---|
[TIL] μΆμν (0) | 2022.05.15 |
[TIL] μ°Έμ‘°λ³μμ μ°Έμ‘°νμ (0) | 2022.05.14 |
[TIL] μμ (0) | 2022.05.12 |
[TIL] μΊ‘μν (0) | 2022.05.12 |