0. Java μμ ν΄λμ€
- μΆμ ν΄λμ€(Abstract Class): ν΄λμ€ λ΄λΆμ μΆμ λ©μλκ° νλ μ΄μ ν¬ν¨λκ±°λ abstract λ‘ μ μλ κ²½μ°
- μΈν°νμ΄μ€(Interface): λͺ¨λ λ©μλκ° μΆμ λ©μλμΈ κ²½μ°(Java 8 μ΄νλΆν°λ default ν€μλλ₯Ό μ¬μ©νμ¬ μΌλ° λ©μλ ꡬνμ΄ κ°λ₯)
1. μΆμ ν΄λμ€
- μΆμ ν΄λμ€λ₯Ό μμλ°μ 곡ν΅λ κΈ°λ₯μ μ΄μ©νκ±°λ νμ₯νλ€.
- μμ ν΄λμ€μμ μΆμ ν΄λμ€μ μΆμ λ©μλλ₯Ό λ°λμ μ¬μ μ(override) ν΄μΌνλ€.
- μΆμ ν΄λμ€λ λμμ΄ μ μλμ§ μλ λ©μλλ₯Ό ν¬ν¨νκ³ μμ΄ μΈμ€ν΄μ€ μμ±μ΄ λΆκ°νλ€.
- μΆμ λ©μλλ₯Ό ν¬ν¨νλ μ μ΄μΈμλ μΌλ° ν΄λμ€μ λͺ¨λ λμΌνλ€.
μΆμν΄λμ€μμ default μ κ·Όμ μ΄μ
public abstract class AbstractClass {
public void method1() {
// μΆμν΄λμ€μμ μΌλ° λ©μλλ₯Ό μ μΈ κ°λ₯
}
public abstract void method2();
public default void defaultMethod() {
// μΆμν΄λμ€μμ default λ©μλλ₯Ό μ μΈ κ°λ₯
}
}
λ§μ½, μΆμν΄λμ€μ ꡬνν΄λμ€ λͺ¨λμμ λμΌν λ©μλ μκ·Έλμ²λ₯Ό κ°μ§ default λ©μλλ₯Ό μ μΈνλ©΄, ꡬν ν΄λμ€μμ λ°λμ! ν΄λΉ λ©μλλ₯Ό μ¬μ μν΄μΌ νλ€. κ·Έλ μ§ μλλ€λ©΄, μ»΄νμΌ μ€λ₯κ° λ°μνλ€.
2. μΈν°νμ΄μ€
- ν΄λμ€μ ν΄λμ€ μ¬μ΄μ μνΈμμ©μ μ μνκΈ° μν΄ μΆμνν κ°λ
- μΈν°νμ΄μ€λ₯Ό ν΅ν΄μ λ€μ€ μμμ΄ κ°λ₯νλ€.
- μΆμ ν΄λμ€μ λ¬λ¦¬ μ€λ‘μ§ μΆμ λ©μλ, μμλ§μ ν¬ν¨ν μ μλ€.
- μΈν°νμ΄μ€μ λͺ¨λ νλλ public static final μ΄μ΄μΌ νλ€.
- μΈν°νμ΄μ€μμλ λ³μλ₯Ό μμλ‘ μ¬μ©νκΈ° λλ¬Έμ΄λ€.
- μΈν°νμ΄μ€μ λͺ¨λ λ©μλλ public abstract μ΄μ΄μΌ νλ€.
- μ μ΄μλ€μ μλ΅ν μ μμΌλ©° μλ΅λ μ μ΄μλ Java μ»΄νμΌλ¬κ° μλμΌλ‘ μΆκ°ν΄μ€λ€.
μ κ·Όμ μ΄μ interface μΈν°νμ΄μ€λͺ
{
public static final νμ
μμλͺ
= κ°;
...
public abstract λ©μλλͺ
(λ§€κ°λ³μλͺ©λ‘);
}
- μΈν°νμ΄μ€λ μΈν°νμ΄μ€λ‘λΆν°λ§ μμ λ°μ μ μλ€. μ¬λ¬ μΈν°νμ΄μ€ λ€μ€ μμμ΄ κ°λ₯νλ€.
μΈν°νμ΄μ€μ ꡬν
class ν΄λμ€λͺ
implements μΈν°νμ΄μ€λͺ
{...}
μΈν°νμ΄μ€μμ default μ κ·Όμ μ΄μ
μμ μ€λͺ μμ μΈν°νμ΄μ€μ λͺ¨λ λ©μλλ public μ΄μ΄μΌ νλ€κ³ νμΌλ, μ€μ λ‘ Map μΈν°νμ΄μ€λ₯Ό μ΄ν΄λ³΄λ©΄ public μ΄μΈμλ default μ κ·Όμ μ΄μκ° μ€μ λ λ©μλλ₯Ό λ³Ό μ μλ€.
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key))
? v
: defaultValue;
}
default void forEach(BiConsumer<? super K, ? super V> action) {
Objects.requireNonNull(action);
for (Map.Entry<K, V> entry : entrySet()) {
K k;
V v;
try {
k = entry.getKey();
v = entry.getValue();
} catch (IllegalStateException ise) {
// this usually means the entry is no longer in the map.
throw new ConcurrentModificationException(ise);
}
action.accept(k, v);
}
}
...
default μ κ·Όμ μ΄μλ₯Ό μ΄ λ©μλλ λ©μλμ μκ·Έλμ² μΈμλ ꡬνλΆκ° μλ κ²μ νμΈν μ μλ€.
μΈν°νμ΄μ€μμ default μ κ·Όμ μ΄μλ₯Ό μ¬μ©νλ μ΄μ λ λκΉ?
→ ν΄λΉ λ©μλλ₯Ό μ¬μ μνμ§ μμλ κΈ°λ³Έ ꡬνμ μ 곡νκ³ μΆμ΄μ
→ μλ‘μ΄ λ©μλλ₯Ό μΆκ°νλλΌλ ꡬν ν΄λμ€μμ μ¬μ μνκ³ μΆμ§ μμμ
λ‘ μ 리ν μ μλ€.
λ§μ½ ν΄λμ€κ° 2κ°μ μΈν°νμ΄μ€λ₯Ό implements ν λ, λμΌν λ©μλ μκ·Έλμ²λ‘ λν΄νΈ λ©μλκ° κ΅¬νλμ΄ μλ€λ©΄?
→ μ»΄νμΌ μλ¬ λ°μ(2κ°μ λ©μλ μ€ μ΄λ€ κ²μ ꡬνν΄μΌ ν μ§ λͺ¨λ₯΄λ μν)
→ ν΄λμ€μμ ν΄λΉ λ©μλ μ¬μ μ νμ
3. μΆμν΄λμ€ vs μΈν°νμ΄μ€
λ§μ§λ§μΌλ‘ μΆμν΄λμ€μ μΈν°νμ΄μ€μ μ°¨μ΄μ λν΄ μ 리νκ³ κ°μ.
μΆμν΄λμ€ | μΈν°νμ΄μ€ |
κ°μ²΄λ‘ μμ±ν μ μμ, extends νμ | κ°μ²΄λ‘ μμ±ν μ μμ, implements νμ |
public, protected, private λ©μλ νμ©(+ default) | public νμ©(+ default) |
λ©€λ²λ³μ(μΈμ€ν΄μ€ λ³μ) μ μΈ κ°λ₯ | public static λ³μλ§ μ μΈ κ°λ₯ |
λ¨μΌ μμλ§ κ°λ₯ | λ€μ€μμ κ°λ₯ |
μμ±μ κ°μ§ μ μμ | μμ±μ κ°μ§ μ μμ |
'κ°λ° > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] Collection Framework - Listμ ꡬν체(κΈ°λ³Έ) (0) | 2023.04.29 |
---|---|
[Java] Collection Framework - Setμ ꡬν체(κΈ°λ³Έ) (0) | 2023.04.25 |
[Java] Collection Framework - Mapμ ꡬν체(μ¬ν) (0) | 2023.04.21 |
[Java] Collection Framework - Mapμ ꡬν체(κΈ°λ³Έ) (2) | 2023.04.21 |