1. μ λ€λ¦μ΄λ?
ν΄λμ€λ 맀μλμ λ°μ΄ν° νμ μ λμ€μ νμ νλ κΈ°λ²μ΄λ€.
*μ λ€λ¦μ μ리?
μ½λλ₯Ό μμ±νμ¬ μ€ννκΈ° κΉμ§ ν¬κ² 3κ°μ§μ λ¨κ³λ‘ λλλ€.
ν¬κ² κ°λ°μμ μμ€μ½λ μμ± μμ , μ»΄νμΌ νμ, λ° νμμ΄ μλλ°, λ³΄ν΅ λ³μ, 맀μλ, ν΄λμ€μ λ°μ΄ν° νμ μ μμ€μ½λ μμ± μ λ°λ‘ λ°λ‘ 체ν¬νλ€. νμ§λ§ μ λ€λ¦μ μ¬μ©νλ©΄ λ°μ΄ν° νμ μ²΄ν¬ μκ°μ μ»΄νμΌ νμμΌλ‘ λ―Έλ£° μ μλ€.
2. μ λ€λ¦μ΄ νμν μμ .
κ°μ κΈ°λ₯μ 맀μλλ ν΄λμ€ μ΄λλΌλ, μΈμλ‘ λ°κ³ λ°ννλ κ°μ μλ£νμ΄ λ€λ₯΄λ©΄, μ λΆ λ°λ‘ λ°λ‘ μ μ ν΄μ€μΌ νλ€.
맀μλμ κ²½μ° μ λ² ν¬μ€ν μ μμμ κ°μ΄, Int λ°°μ΄ μ 체 μννλ©° μμλ₯Ό νλ¦°νΈ νλ 맀μλλ₯Ό String λ°°μ΄μ κ΄ν΄ μΈ μ μλ€. λ°λΌμ μ λΆ λ€ λ°λ‘ μ μ ν΄μ€μΌ νλ€.
ν΄λΉ μμμ λν μ€λͺ .
[JAVA] Generics :: μ μ κ³Ό μκ°μ λ°© (tistory.com)
λκ°μ΄ ν΄λμ€μμλ, μΈμλ‘ λ€μ΄μ€λ κ°μ μλ£νμ λ°λΌ μμ±μμ μΈμ€ν΄μ€ λ³μλ₯Ό λλ €μ€μΌ νκ±°λ, μλλ©΄ μλ£νμ λ°λΌ κ°μ κΈ°λ₯μ΄λλΌλ μλ‘μ΄ ν΄λμ€λ₯Ό λ§λ€μ΄ μ€μΌ νλ€.
μμλ λ€μκ³Ό κ°λ€.
μ€νλ² μ€μμλ κ³ κ°μ΄ μ€νλ² μ€ μ±μΌλ‘ λλ€μμ μ€μ νμ¬ λμΌλ©΄, μ»€νΌ μ€λΉκ° μλ£λ¨μ μ릴 λ, λλ€μμ λΆλ¬μ μλ΄νλ€. λλ€μ μ€μ μ μ ν΄λμΌλ©΄, λκΈ° λ²νΈλ₯Ό λΆλ¬μ μλ΄νλ€.
λλ€μμ String μλ£νμ΄κ³ , λκΈ° λ²νΈλ int μλ£νμ΄λ―λ‘, μλμ λΆλ₯Έλ€λ κΈ°λ₯μ κ°μ§λ§, κ°κ° λ€λ₯Έ ν΄λμ€λ₯Ό λ§λ€μ΄ κ΄λ¦¬ ν΄μΌνλ€.
public class _02_GenericClass {
public static void main(String[] args) {
CoffeeByNumber c1 = new CoffeeByNumber(33);
c1.ready();
CoffeeByNickname c2 = new CoffeeByNickname("μ μ¬μ");
c2.ready();
}
}
//----------------------------------------------- λ°μ λ°λ‘ μ μλ ν΄λμ€λ€--------------
public class CoffeeByNickname {
public String nickname;
public CoffeeByNickname(String nickname) {
this.nickname = nickname;
}
public void ready(){
System.out.println("μ»€νΌ μ€λΉ μλ£ : " + nickname );
}
}
//------------------------------------------------------------------
public class CoffeeByNumber {
public int waitingNumber;
public CoffeeByNumber(int waitingNumber) {
this.waitingNumber = waitingNumber;
}
public void ready() {
System.out.println("μ»€νΌ μ€λΉ μλ£ : " + waitingNumber);
}
}
(1) μ λ€λ¦μ μ°μ§ μλ ν΄κ²° λ°©λ²
κ·Έλ λ€λ©΄ μ λ€λ¦μ μ°μ§ μκ³ ν΄λΉ μ½λ μ€λ³΅μ μμ¨ λ°©λκ° μμκΉ?
μλ€. Object ν΄λμ€λ₯Ό μ¬μ©νλ©΄ λλ€. Object ν΄λμ€λ λͺ¨λ ν΄λμ€μ μ‘°μμ΄ λλ ν΄λμ€ μ΄λ―λ‘, λ€νμ±μ μ΄μ©ν΄ ν΄λμ€ λ΄ μΈμ€ν΄μ€ λ³μλ₯Ό μ μΈνλ©΄, μ΄λ€ μμ±μμμ μ΄λ€ μλ£νμ κ°λ λ°μ μ μλ€.
**μ°Έκ³ **
λ€νμ±μ΄λ νλμ κ°μ²΄κ° μ¬λ¬κ°μ§ νμ μ κ°μ§ μ μλ κ²μ λ§νκ³ , Javaμμλ λΆλͺ¨ ν΄λμ€μ μ°Έμ‘°λ³μκ° μμ ν΄λμ€μ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλ κ²μΌλ‘ ꡬν ν΄λμλ€.
λ°λΌμ Object ν΄λμ€μ μ°Έμ‘°λ³μλ μ΄λ ν κ°μ΄λ μ°Έμ‘°ν μ μλ€.
μ΄λ₯Ό μ΄μ©ν΄ μλ‘μ΄ ν΄λμ€λ₯Ό μ§λ³΄μ.
//object ν΄λμ€ μ΄μ©
public class CoffeeByName {
// Objectλ₯Ό μλ£νμΌλ‘ λ³μ μ μΈ
//ν΄λΉ κ°μ μΈμλ‘λ Integer, Double, String, μμ μ λ§λ BlackBox ν΄λμ€λ μ λΆ κ°λ₯
public Object name;
public CoffeeByName(Object name) {
this.name = name;
}
public void ready(){
System.out.println("μ»€νΌ μ€λΉ μλ£ : " + name);
}
}
//main 맀μλ μ
// objectλ‘ μ μλ nameμ΄λΌλ λ³μμμλ int κ°λ, String κ°λ λͺ¨λ λ£μ μ μλ€.
CoffeeByName c3 = new CoffeeByName(34);
c3.ready();
CoffeeByName c4 = new CoffeeByName("λ°λͺ
μ");
c4.ready();
(2) λ¬Έμ μ
νμ§λ§ Object ν΄λμ€λ₯Ό μ΄μ©ν΄λ 무μ μ΄ μλλ€. λ€νμ±μ μμμμ λΆλͺ¨ ν΄λμ€μ μ°Έμ‘°λ³μκ° μμ ν΄λμ€μ κ°μ²΄λ₯Ό μ°Έμ‘° ν μ μλ€κ³ νμ§, κ·Έ λ°λλ μλλ€.
λ°λΌμ μ΄λ―Έ Object μλ£νμΌλ‘ μ μ₯λ 34 λ "λ°λͺ μ"λΌλ κ°μ λ€μ λΆλ¬μ int λ³μμ String λ³μλ‘ λ£μ μ μλ€!
λ°λΌμ objectλ‘ μ μ₯λ κ°μ λ€μ μλμ μλ£νμ λ³μμ λ£μ λλ ν λ³νμ΄ νμνλ€.
int c3Name = (int)c3.name;
System.out.println("μ£Όλ¬Έ κ³ κ° λ²νΈ : " + c3Name);
String c4Name = (String) c4.name;
System.out.println("μ£Όλ¬Έ κ³ κ° μ΄λ¦ : " + c4Name);
λν μ λ€λ¦κ³Ό λ€λ₯΄κ², ν λ³νμ ν΄λΉ λ³νμ΄ λ§λ λ³νμΈμ§ μλμ§ μ»΄νμΌ μκ°μ μ²΄ν¬ ν΄μ£Όμ§ μλλ€. λ°λΌμ λ§μ½ νλ¦° ν λ³νμ νλ€λ©΄ run νμ μ μλ¬κ° λλ€.
//μ€νν μ μλ λ¬Έμ₯μμλ μ€λ₯λ₯Ό μ μλ €μ€μ μ½λ μ€ν μ κΉμ§ μ€λ₯μΈμ§ μ μ μλ€.
// int κ°μ StringμΌλ‘ λ³ννλ€. νμ§λ§ int κ°μ StringμΌλ‘ λ³νν μ μλ€.
//c4Name = (String) c3.name;
3. μ λ€λ¦ ν΄λμ€
μμ λ¬Έμ λ€μ μ λΆ ν΄κ²°ν μ μλ κ²μ΄ μ λ€λ¦ ν΄λμ€λ 맀μλμ΄λ€. μ λ€λ¦μ 맀μλλ ν΄λμ€μ λ°μ΄ν° νμ μ μ»΄νμΌ μκ°μ 체ν¬νμ¬ νμ νκΈ° λλ¬Έμ, μμ κ°μ μλ¬κ° λ¨μ§ μλλ€.
(1) μ λ€λ¦ ν΄λμ€ μ μΈ
ν΄λμ€ μ΄λ¦ μμ κΊ½μλ‘ μ°λ κ² λ§κ³ λ λͺ¨λ μλ μλ£νμ΄ μ νμΌ νλ μμΉμ μ°λ©΄ λλ€.
μ κ·Ό μ μ΄μ class ν΄λμ€ μ΄λ¦ <T> {
μ κ·Όμ μ΄μ T λ³μ;
// μμ±μ
μ κ·Ό μ μ΄μ ν΄λμ€ μ΄λ¦ (T μΈμμ΄λ¦){
this.λ³μμ΄λ¦ = μΈμμ΄λ¦;
}
}
μμ)
public class Coffee <T>{
//μ΄λ€ νμ
μΈμ§ λͺ¨λ₯΄λκΉ T νμ
μΌλ‘ λ°μ.
public T name;
public Coffee(T name) {
this.name = name;
}
public void ready() {
System.out.println("μ»€νΌ μ€λΉ μλ£ : " + name);
}
}
(2) μ λ€λ¦ ν΄λμ€ κ°μ²΄ μμ±
ν΄λμ€μ΄λ¦<νμ μν¬ μλ£ν> κ°μ²΄ μ΄λ¦ = new ν΄λμ€μ΄λ¦<>(μμ±μ μΈμ νμνλ©΄ μΈμ κ° λ£κΈ°);
Coffee<Integer> c5 = new Coffee<>(35);
Coffee<String> c6 = new Coffee<>("μ‘°μΈνΈ");
ν΄λΉ ν΄λμ€μ μλ£νλ€μ μ»΄νμΌ μκ°μ κ° κ° intμ StringμΌλ‘ νμ μ΄ λλ―λ‘, μ΄ν λ¬Έμ₯λ€μμ ν΄λΉ κ°λ€μ λ€λ₯Έ λ³μμ λμ ν λ ν λ³νμ νμ μλ€.
//κ°κ° c5, c6 κ°μ²΄μ μΈμ€ν΄μ€ λ³μ
int c5Name = c5.name;
String c6Name = c6.name;
4. μ κ²
(1)μ λ€λ¦μ΄λ? (μ½λ μμ±λΆν° μ€νκΉμ§ 3λ¨κ³ λλ μ μ€λͺ )
(2)μ λ€λ¦μ μ¨μΌ νλ μν©
(3)μ λ€λ¦μ μ°μ§ μκ³ λ¬Έμ ν΄κ²°λ², νμλ λ¬Έμ μ
(4)μ λ€λ¦ ν΄λμ€μ μ μΈκ³Ό κ°μ²΄ μμ±