β 1. μ λ€λ¦μ΄λ?
public class Box<T> {
private T item;
public void set(T item) {
this.item = item;
}
public T get() {
return item;
}
}
public class Main {
Box<String> box = new Box<>();
box.set("String"); // <String> μ λ€λ¦ μ΄κΈ° λλ¬Έμ νμ
μ String
}
- ν΄λμ€ λ΄λΆμμ μ¬μ©ν λ°μ΄ν° νμ μ μΈλΆμμ μ§μ νλ κΈ°λ²μ μλ―Ένλ€.
- μ¦, ν΄λμ€, μΈν°νμ΄μ€, λ©μλλ₯Ό μ μν λ νμ λ§€κ°λ³μλ₯Ό μ μΈνκ³ μλ£νμ μ νμ λ μΌλ‘μ¨ νμ μμ μ±μ κ°μ§λ€.
- μ λ€λ¦μ μ¬μ©νλ©΄, μλ° νλ‘κ·Έλ¨μ μ¬μ¬μ©μ±μ λμ΄κ³ μ€λ₯λ₯Ό μ€μΌ μ μκ² λλ€.
- λ€μν ννλ₯Ό λ°μ μ μλ ν΄λμ€λ₯Ό λ§λ€ λ μ¬μ©μ νλ©°, νλ³νμ μ¬μ©νμ§ μμ μ μλ€. ( 보ν΅μ ObjectμΈλ° μ¬μ©x )
(1) μ°Έκ³ μ¬ν
- μ λ€λ¦μ μ¬μ©ν ν΄λμ€λ₯Ό μμ± ν λλ νμ νλΌλ―Έν°λ₯Ό λͺ μν΄λλκ³ μν΄λ λλ€. νμ§λ§, νλκ² μΌλ°μ μ.
- νμ νλΌλ―Έν°λ κΈ°λ³Έμλ£νμ μ¬μ©μ΄ λΆκ°λ₯νλ©°, μ°Έμ‘°μλ£νλ§ μ¬μ©μ΄ κ°λ₯νλ€.
- νμ νλΌλ―Έν°λ νλμ μλ£ν, λ©μλ λ°νν, μΈμμ μλ£νμΌλ‘ μ¬μ©μ΄ κ°λ₯νλ€.
- μλ£ν λ§€κ°λ³μ μ¦, νμ λ§€κ°λ³μλ₯Ό κ°μ§λ ν΄λμ€μ μΈν°νμ΄μ€λ₯Ό μ λ€λ¦ νμ μ΄λΌκ³ νλ€.
- νμ νλΌλ―Έν°λ νλκ° μλ μ¬λ¬κ°λ κ°λ₯νλ€. <T1, T2 ...>
- νμ νλΌλ―Έν°μ μ΄λ¦μ κ΄λ‘μ μΌλ‘ E, K, V, N, T ... μ μ¬μ© νλ€.
β 2. μ λ€λ¦ νμ κ°μ²΄ μμ± λ°©λ²
public class Main {
Data<String> data = new Data<>(); // β
νμ
λͺ
μ + λ€μ΄μλͺ¬λ μ°μ°μ μ¬μ©
Data data = new Data(); // β
raw type μ¬μ© (λΉμΆμ²)
Data<String> data = new Data<String>(); // β
νμ
μ 체 λͺ
μ
}
(1) Data<String> data = new Data<>(); - κΆμ₯ λλ λ°©μ
- μ λ€λ¦ νμ μ λͺ μνκ³ , μ°μΈ‘μ λ€μ΄μλͺ¬λ μ°μ°μ<>λ₯Ό μ¬μ©ν΄ νμ μΆλ‘ μ λ§‘κΈ°λ λ°©μμ΄λ€.
(2) Data data = new Data(); - λΉκΆμ₯ λ°©μ
- μ λ€λ¦ νμ μ λͺ μνμ§ μμμ μ»΄νμΌλ¬κ° νμ μ μΆλ‘ νμ§ λͺ»νλ€. μ¦, Objectλ‘ κ°μ£Όλμ΄μ λ€μ΄κ°κ² λλ€.
- μ½κ²λ§ν΄, Data<Object> data = new Data<>(); νμμΌλ‘ λ€μ΄κ°λ€λ μλ―Έμ΄λ€.
(3) Data<String> data = new Data<String>();
- μμͺ½ λͺ¨λ νμ μ λͺ μν μ ν΅μ μΈ μ λ€λ¦ μ¬μ© λ°©μμΌλ‘, μ½λκ° κΈΈκ³ μ€λ³΅μ΄ λλ€λ λ¨μ μ΄ μλ€.
β 3. μ λ€λ¦ μΈν°νμ΄μ€
// μ λ€λ¦ μΈν°νμ΄μ€ μ μ
interface Printer<T> {
void print(T item);
}
// μ λ€λ¦ μΈν°νμ΄μ€ ꡬν - String νμ
μ μ©
class StringPrinter implements Printer<String> {
public void print(String item) {
System.out.println("λ¬Έμμ΄ μΆλ ₯: " + item);
}
}
// μ λ€λ¦ μΈν°νμ΄μ€ ꡬν - Integer νμ
μ μ©
class IntegerPrinter<T> implements Printer<Integer> {
public void print(Integer item) {
System.out.println("μ μ μΆλ ₯: " + item);
}
}
// λ©μΈ ν΄λμ€
public class Main {
public static void main(String[] args) {
Printer<String> stringPrinter = new StringPrinter();
stringPrinter.print("μλ
νμΈμ");
Printer<Integer> intPrinter = new IntegerPrinter<>();
intPrinter.print(123);
}
}
- μ λ€λ¦ μΈν°νμ΄μ€λ₯Ό λ§λ€κ²λκ³ , ꡬν ν΄λμ€λ μΈν°νμ΄μ€ ν΄λμ€ μ λ€λ¦ νμ μ λͺ μν΄μ€μΌ νλ€. λͺ μλ₯Ό νκ² λλ©΄, ꡬννλ μΆμλ©μλμ νμ μ λͺ μν νμ μΌλ‘ μ μλ₯Ό ν΄μΌ λλ€. μκ·Έλ¬λ©΄ μ€λ₯κ° λλ€.
β 4. μ λ€λ¦ λ©μλ
(1) μΈμ€ν΄μ€ μ λ€λ¦ λ©μλ
public class Printer {
public <T> void print(T data) {
System.out.println(data);
}
}
// νμ
μΆλ‘ λ©μλ νΈμΆ
public class Main {
public static void main(String[] args) {
Printer p = new Printer();
p.print("Hello"); // λ¬Έμμ΄
p.print(1); // μ μ
}
}
// νμ
λ§€κ°λ³μ λͺ
μ λ©μλ νΈμΆ
public class Main {
public static void main(String[] args) {
Printer p = new Printer();
p.<String>print("Hello");
p.<String>print(1); // μ€λ₯ : λ§€κ°λ³μ κ° String νμ
μ΄ μλ.
}
}
- λ§€κ°λ³μλ λ°νκ°μ νμ μ λ©μλ νΈμΆ μμ μ μ§μ ν μ μλλ‘ λ§λ λ©μλλ₯Ό μλ―Ένλ€.
- μ½κ²λ§ν΄, νΈμΆ λΉνλ μͺ½ λ©μλμ <> μ λ€λ¦μ λΆμ¬ν¨μΌλ‘μ¨, λ§€κ°λ³μ λ° λ°νκ°μ νμ μ λ§μΆ°μ£Όλ λ°©μμ΄λ€.
- νλμ λ©μλ μ μλ‘ μ¬λ¬ μ νμ λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ μ μ©νλ€.
- λ©μλλ₯Ό νΈμΆν λ νμ λ§€κ°λ³μλ₯Ό μλ΅ν΄λ λ§€κ°λ³μ νμ μΌλ‘ μΆλ‘ ν΄μ λ£μ΄μ€λ€.
- νμ§λ§, νμ λ§€κ°λ³μλ₯Ό λ£μ μλ μλ ννμ΄λ€.
(1) ν΄λμ€ μ λ€λ¦ λ©μλ ( statck μ λ€λ¦ λ©μλ)
public class Printer {
public static <T> void print(T data) {
System.out.println(data);
}
}
// νμ
μΆλ‘ λ©μλ νΈμΆ
public class Main {
public static void main(String[] args) {
Printer.print("Hello"); // λ¬Έμμ΄
Printer.print(1); // μ μ
}
}
// νμ
λ§€κ°λ³μ λͺ
μ λ©μλ νΈμΆ
public class Main {
public static void main(String[] args) {
Printer.<String>print("Hello");
Printer.<String>print(1); // μ€λ₯ : λ§€κ°λ³μ κ° String νμ
μ΄ μλ.
}
}
- μμ μΈμ€ν΄μ€ μ λ€λ¦ λ©μλμ λμΌνκ² νμ λ§€κ°λ³μλ₯Ό λ£κ±°λ μλ΅ν μ μλ€.
- μΌλ° static λ©μλμμ μ λ€λ¦μ΄ λ€μ΄κ° ννμ΄λ€.
β 5. μ λ€λ¦ νμ μ ν
public class Data<T extends Number> {
public void print(T data) {
System.out.println(data); // T μλ£νμ λ§λ λ³μκ° μΆλ ₯
}
}
public class Main {
public static void main(String[] args) {
Data<Integer> data = new Data<>();
data.print(123);
Data<String> data = new Data<>(); // μ»΄νμΌ μλ¬: Stringμ Numberμ νμ ν΄λμ€κ° μλ.
}
}
- μ λ€λ¦ ν΄λμ€, μ λ€λ¦ μΈν°νμ΄μ€, μ λ€λ¦ λ©μλλ₯Ό μ μν λ μ μ©κ°λ₯ν μλ£νμ μ νμ λλ κ²μ μλ―Ένλ€.
- μ λ€λ¦ λ§€κ°λ³μλ‘ μλ£ν νμ μ μ νμ λλ κ²μ΄λ©°, μλΈ ν΄λμ€μΈ κ²½μ°μλ§ κ°λ₯νκ² μ νμ λ μ μλ€.
'βJava > πJava Programming' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] java.lang ν¨ν€μ§ μ 리: Object, String, Math ν΄λμ€ μ΄μ 리 (0) | 2025.05.26 |
---|---|
[Java] μλ° ν¨μν μΈν°νμ΄μ€μ λλ€μ(Lambda Expression) μ½κ² λ°°μ°κΈ° (1) | 2025.05.23 |
[Java] μ΅λͺ ν΄λμ€(Anonymous Class) (1) | 2025.05.22 |
[Java] λ€νμ±(polymorphism) (1) | 2025.05.22 |
[Java] μΆμν - μΆμν΄λμ€, μΆμλ©μλ, μΈν°νμ΄μ€ (0) | 2025.05.20 |