[Java] Default Method
π Default Methodλ?
1
2
3
4
5
6
7
interface MyInterface {
void normalMethod();
default void printHello() {
System.out.println("Hello World");
}
}
default
λ©μλλ Java 8λΆν° λμ
λ κΈ°λ₯μΌλ‘, κΈ°μ‘΄μλ μΈν°νμ΄μ€μ μΆμ λ©μλλ§ μμ±ν μ μμμΌλ default λ©μλμ λ±μ₯μΌλ‘ λ‘μ§μ΄ ν¬ν¨λ λ©μλλ₯Ό μμ±ν μ μκ² λμλ€.
μ λ±μ₯νμμκΉ? μΈν°νμ΄μ€λ₯Ό ꡬνν Nκ°μ ν΄λμ€κ° μλ€κ³ νμ. μΈν°νμ΄μ€μ μλ‘μ΄ μΆμ λ©μλκ° μΆκ°λμκ³ , λͺ¨λ ν΄λμ€κ° ν΄λΉ λ©μλλ₯Ό νμλ‘ κ΅¬νν΄μΌ νλ€κ³ νμ. κ·Έλ λ€λ©΄ Nκ°μ ν΄λμ€κ° μΌμΌν μΆμ λ©μλλ₯Ό ꡬνν΄μΌ νλ€. μ΄λ λ§€μ° λΆνΈνκΈ°μ, μΆμ λ©μλμ κΈ°λ³Έμ μΈ κ΅¬νμ μ 곡νλ default λ©μλκ° λ±μ₯ν κ²μ΄λ€. νμν κ²½μ° μ€λ²λΌμ΄λ©νμ¬ κ΅¬νμ μ¬μ μν μ μλ€.
π μ΄μ
- νμ νΈνμ±μ΄ μ’λ€. μ΄μ μ μΈκΈν λ΄μ©μ΄μ§λ§, κΈ°μ‘΄μ ꡬνλ ν΄λμ€λ€μ λ³κ²½νμ§ μκ³ μλ‘μ΄ λ©μλλ₯Ό μΆκ°νλ κ²λ§μΌλ‘ ν΄λΉ λ©μλλ₯Ό μ¬μ©ν μ μκ² νλ€.
- μΈν°νμ΄μ€κ° λ¨μν λ©μλλ₯Ό μ μΈνλ κ²μ λμ΄ κΈ°λ³Έ ꡬνμ κ°μ§ μ μκ² λλ©΄μ μΈν°νμ΄μ€μ μν μ΄ μ μ°ν΄μ§λ€.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
interface Loggable {
default void log(String message) {
System.out.println("[LOG] " + message);
}
}
interface Notifiable {
default void notify(String event) {
System.out.println("[NOTIFICATION] " + event);
}
}
class ServiceProcessor implements Loggable, Notifiable {
public void processData(String data) {
log("λ°μ΄ν° μ²λ¦¬ μμ: " + data);
System.out.println("λ°μ΄ν° " + data + " μ²λ¦¬ μ€...");
notify("λ°μ΄ν° μ²λ¦¬ μλ£: " + data);
}
}
- μλ°λ κΈ°λ³Έμ μΌλ‘ λ€μ€ μμμ μ§μνμ§ μλλ€. λμ λ€μ€ μμκ³Ό μ μ¬ν ν¨κ³Όλ₯Ό μ»κΈ° μν΄
implementes
ν€μλλ₯Ό ν΅ν΄ μ¬λ¬ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μλ€. μ¬κΈ°μ default λ©μλ κ°λ μ μΆκ°νλ©΄ νλμ ν΄λμ€κ° μ¬λ¬ μΈν°νμ΄μ€μ default λ©μλκ° μ 곡νλ λ€μν λ‘μ§λ€μ μ‘°ν©νμ¬ κ°μ§ μ μλ€.
π μ£Όμ
ν΄λμ€μ λ€μ€ μμμμ λ°μνλ Diamond Problem
μ΄ λμΌνκ² λ°μν μ μλ€. μ¬λ¬ μΈν°νμ΄μ€λ₯Ό implements
ν μν©μμ λ§μ½ λμΌν μ΄λ¦μ (default) λ©μλκ° μ‘΄μ¬νλ κ²½μ° μ΄λ€ (default) λ©μλλ₯Ό μ·¨ν΄μΌ ν μ§ λͺ¨νΈν΄μ§λ€.
μλ°λ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ°μ μμ κ·μΉμ μ 곡νλ€.
- ꡬννλ ν΄λμ€ λλ μμ ν΄λμ€κ° λμΌν μκ·Έλμ²μ λ©μλλ₯Ό κ°μ§κ³ μλ€λ©΄ ν΄λμ€μ μ μλ λ©μλλ μΈν°νμ΄μ€μ default λ©μλλ³΄λ€ νμ μ°μ κΆμ κ°μ§λ€.
- μΈν°νμ΄μ€ κ° μμ κ³μΈ΅ κ΅¬μ‘°κ° μλ κ²½μ° κ°μ₯ νμ μΈν°νμ΄μ€μ μ μλ default λ©μλκ° μ°μ κΆμ κ°μ§λ€.
- λμΌν λ 벨μ μ¬λ¬ μΈν°νμ΄μ€μμ λμΌν μκ·ΈλμΉμ default λ©μλκ° μΆ©λνλ κ²½μ° μ»΄νμΌ μλ¬κ° λ°μνλ€. μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€μμ μΆ©λνλ default λ©μλλ₯Ό μ€λ²λΌμ΄λ©νμ¬ μ¬μ©ν΄μΌ νλ€.
π default λ©μλλ₯Ό μ¬μ©ν μΈν°νμ΄μ€ vs. μΆμ ν΄λμ€
ν κ°μ§ μλ¬Έμ΄ λ€μ΄μΌ νλ€. default λ©μλμ μΆμ ν΄λμ€ λͺ¨λ βμΆμνβλ₯Ό μ 곡νκ³ , ꡬνμ λΆλΆμ μΌλ‘ ν¬ν¨ν μ μλλ° μ΄λ€ μ°¨μ΄κ° μμκΉ?
κ°μ₯ ν° μ°¨μ΄μ μ ν΄λμ€λ μ¬λ¬ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μμΌλ, μΆμ ν΄λμ€λ λ¨ νλλ§ μμν μ μλ€λ μ μ΄λ€. μ¦, μ΄μ μ μΈκΈν λ°μ κ°μ΄ νΉμ λμμ λ€μ€ μμνλ ν¨κ³Όλ₯Ό κ°μ Έμ¬ μ μλ€.
π μ°Έκ³
https://whybk.tistory.com/155