μ λ€λ¦(Generic)
ν΄λμ€λ λ©μλλ₯Ό μμ±ν λ, νμ μ ꡬ체μ μΌλ‘ μ§μ νλ κ²μ΄ μλκ³ , μΆνμ μ§μ νλλ‘ μΌλ°νμν€λ κ²μ λ§νλ€. (C++μ ν νλ¦Ώκ³Ό λμΌν λλμ΄λ€!)
μ λ€λ¦μ΄ μ¬μ©λ ν΄λμ€λ₯Ό μ λ€λ¦ ν΄λμ€λΌκ³ νλ©° νΉμ λ©μλλ§ μ λ€λ¦μΌλ‘ μ μΈν κ²½μ° μ λ€λ¦ λ©μλλΌκ³ λΆλ₯Έλ€.
class GenericEx<T> {
private T item;
public GenericEx(T item) {
this.item = item;
}
public T getItem() {
return item;
}
public void setItem(T item) {
this.item = item;
}
}
μμ μ½λμμ ν΄λμ€ μ μΈλΆμ <>
λ΄λΆμ μμ±ν T
λ₯Ό νμ
맀κ°λ³μλΌκ³ νλ€.
ν΄λμ€ μ΄λ¦ μμ ν΄λμ€ λ΄λΆμμ μ¬μ©ν νμ λ§€κ° λ³μλ₯Ό μ μΈν΄μ£Όκ³ λ°λμμλ Tλ₯Ό μμμ νμ μΌλ‘ μ¬μ©νλ©΄ λλ€.
λ§μ½ μ¬λ¬ κ°μ νμ
맀κ°λ³μκ° νμνλ©΄ <K, V>
μ΄λ° μμΌλ‘ μ μΈνλ©΄ λλ€.
μ λ€λ¦ ν΄λμ€λ₯Ό μ μν λ μ£Όμν μ μ ν΄λμ€ λ³μ(νλ λ³μ μ€ static
μ μ΄μκ° λΆμ κ²)μλ νμ
맀κ°λ³μλ₯Ό μ¬μ©ν μ μλ€λ κ²μ΄λ€.
μ΄μ λ κ°λ¨νλ€!
ν΄λμ€ λ³μλ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ νλ μ±μ§μ΄ μκΈ° λλ¬Έμ΄λ€. λ°λΌμ ν΄λμ€ λ³μμ νμ μ΄ μΈμ€ν΄μ€ λ³λ‘ λ¬λΌμ§ μ μκΈ° λλ¬Έμ κ²°κ΅ ν΄λμ€ λ³μλ₯Ό ν΅ν΄ κ°μ λ³μλ₯Ό 곡μ νλ κ²μ΄ μλκ² λλ€.
μ νλ μ λ€λ¦ ν΄λμ€
μ λ€λ¦ ν΄λμ€μμ μΈμ€ν΄μ€ν ν λ μ΄λ€ νμ λ μ μΈ κ°λ₯νμ§λ§
μμλ°λ μμ ν΄λμ€κ° μκΈ°λ©΄ μμλ°μ ν΄λμ€λ§ νμ μΌλ‘ μ§μ ν μ μκ² λλ€.
λ§μ°¬κ°μ§λ‘ extends
ν€μλλ₯Ό ν΅ν΄ μμ±ν μ μλ€.
class Drink { ... }
class Beer extends Drink { ... }
class Pasta { ... }
// μ λ€λ¦ ν΄λμ€ μ μ
//class Table<T extends Drink>
class Table<T> {
private T item;
public T getItem() {
return item;
}
public void setItem(T item) {
this.item = item;
}
}
public static void main(String[] args) {
Table<Beer> stella = new Table<>();
Table<Pasta> rosePasta = new Table<>();//μ½λ μμ νλ©΄ μλ¬
}
μμ μ½λμμ νμ
λ³μ T
κ° Drink
λ₯Ό μμλ°λλ‘ μμ νλ©΄ Pasta
νμ
μ μΈμ€ν΄μ€ λ³μλ μ μΈν μ μλ€.
μ λ€λ¦ λ©μλ
μ λ€λ¦ λ©μλμμ νμ 맀κ°λ³μλ λ°ν νμ μμμ μ μΈν΄μ£Όλ©° ν΄λΉ λ©μλ μμμλ§ νμ 맀κ°λ³μλ₯Ό μ¬μ©ν μ μλ€.
public <T> void add(T element)
λν, μ λ€λ¦ ν΄λμ€μ νμ 맀κ°λ³μμ μ λ€λ¦ λ©μλμ νμ 맀κ°λ³μλ κ°μ μ΄λ¦μ μ¬μ©νλλΌλ μλ‘ λ€λ₯Έ νμ 맀κ°λ³μλ‘ μΈμλλ€.
λ μ λ€λ¦ ν΄λμ€μλ λ€λ₯΄κ² λ©μλ νμ
맀κ°λ³μλ static
λ©μλμμλ μ μΈν μ μλ€.
class Table {
...
static <T> int setPrice(T element) {
...
}
}
μλ¬
μ»΄νμΌ μλ¬(Compile Time Error)
μ΄λ¦ κ·Έλλ‘ μ»΄νμΌν λ λ°μνλ μλ¬λ‘ νν IDEμμ λΉ¨κ° μ€μ΄ μκΈ°λ μ€ν, μΈλ―Έμ½λ‘ μλ΅, μλͺ»λ μλ£νμ΄λ ν¬λ§·μ μ λ ₯νμ λ λ°μνλ€. λ°λΌμ μμ£Ό μ½κ² μλ¬λ₯Ό λ°κ²¬ν μ μλ€.
λ°νμ μλ¬(Run Time Error)
νλ‘κ·Έλ¨μ΄ μ€νλ λ λ°μνλ μλ¬μ΄λ€. κ²μΌλ‘ 보기μλ μλ¬΄λ° λ¬Έμ κ° μμ΄ λ³΄μ΄κΈ° λλ¬Έμ λ°κ²¬νκΈ°κ° μ΄λ ΅λ€. λ°νμ μλ¬λ μ£Όλ‘ μ»΄ν¨ν°κ° μνν μ μλ μμ μ μμ²ν λ λ°μνλ©° JVMμ μν΄ κ°μ§λλ€.
μμΈ
μμΈλ μλͺ»λ μ½λ©μΌλ‘ μΈν΄ λ°μνλ λ―Έμ½ν μμ€μ μ€λ₯μ΄κΈ° λλ¬Έμ μ½λλ₯Ό μμ ν¨μΌλ‘μ¨ μμ΅μ΄ κ°λ₯νλ€.
μλ°μμλ μμΈκ° λ°μνλ©΄ μμΈ ν΄λμ€λ‘λΆν° κ°μ²΄λ₯Ό μμ±νμ¬ μ΄λ₯Ό ν΅ν΄ μμΈμ²λ¦¬λ₯Ό νλ€.
μμΈ ν΄λμ€λ ν¬κ² μΌλ° μμΈ ν΄λμ€μ μ€ν μμΈ ν΄λμ€λ‘ λλλ€.
μΌλ° μμΈ ν΄λμ€ (Exception)
RuntimeException
ν΄λμ€μ κ·Έ νμ ν΄λμ€λ₯Ό μ μΈν λͺ¨λ Exception
ν΄λμ€μ νμ ν΄λμ€λ€μ κ°λ¦¬ν¨λ€. ClassNotFoundException(μλͺ»λ ν΄λμ€λͺ
)μ΄λ DataFormatException(μλͺ»λ λ°μ΄ν° νμ) λ±μ μ€μλ‘ λ°μνλ€.
μ€ν μμΈ ν΄λμ€ (Runtime Exception)
RuntimeException
ν΄λμ€μ κ·Έ νμ ν΄λμ€λ€μ κ°λ¦¬ν¨λ€. μ£Όλ‘ κ°λ°μμ μ€μλ‘ λ°μνλ κ²½μ°κ° λ§μΌλ©° λ¬Έλ² μμμ κ΄λ ¨μ΄ μλ€. μλ₯Ό λ€μ΄ ClassCastException(ν λ³ν μ€λ₯), ArrayIndexOutOfBoundsException(λ²μ λ²μ΄λ¨), NullPointerException(nullκ° μ°Έμ‘°) λ±μ΄ μλ€.
μ²λ¦¬ λ°©λ²
try-catch
λ€μκ³Ό κ°μ΄ try-catchλ¬ΈμΌλ‘ μμΈ μ²λ¦¬κ° κ°λ₯νλ€.
try {
// μμΈκ° λ°μν κ°λ₯μ±μ΄ μλ μ½λλ₯Ό μ½μ
}
catch (ExceptionType1 e1) {
// ExceptionType1 μ νμ μμΈ λ°μ μ μ€νν μ½λ
}
catch (ExceptionType2 e2) {
// ExceptionType2 μ νμ μμΈ λ°μ μ μ€νν μ½λ
}
finally {
// finally λΈλμ μ΅μ
λ(κΌ ν¬ν¨λμ§ μμλ λ¨)
// μμΈ λ°μ μ¬λΆμ μκ΄μμ΄ νμ μ€ν
}
μμΈ μ κ°
μμΈλ₯Ό νΈμΆν κ³³μΌλ‘ λ€μ λ λκΈ°λ λ°©λ²μ΄λ€.
λ©μλμ μ μΈλΆ λμ throws
ν€μλμ λ°μν μ μλ μμΈλ€μ μΌνλ‘ λμ΄ν΄μ£Όλ©΄ λλ€.
λ°ννμ
λ©μλλͺ
(맀κ°λ³μ, ...) throws μμΈν΄λμ€1, μμΈν΄λμ€2, ... {
...μλ΅...
}
throws
μ μ μ¬ν throw
ν€μλλ₯Ό μ¬μ©νλ©΄ μλμ μΌλ‘ μμΈλ₯Ό λ°μμν¬ μλ μλ€.
public class ExceptionEx {
public static void main(String[] args) {
try {
Exception intendedException = new Exception("μλλ μμΈ");
throw intendedException;
} catch (Exception e) {
System.out.println("μμΈ λ°μμν€κΈ° μ±κ³΅");
}
}
}
//OutPut
μμΈ λ°μμν€κΈ° μ±κ³΅
'π Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] λλ€μκ³Ό ν¨μν μΈν°νμ΄μ€ (0) | 2022.09.17 |
---|---|
[Java] 컬λ μ (Collection) (3) | 2022.09.17 |
[Java] μΆμν(Abstraction) (1) | 2022.09.07 |
[Java] λ€νμ±(Polymorphism) (0) | 2022.09.07 |
[Java] μΊ‘μν π (0) | 2022.09.06 |