μ΄λν°(Adapter)λ μννΈμ¨μ΄ λμμΈ ν¨ν΄ μ€ νλλ‘, μλ‘ νΈνλμ§ μλ μΈν°νμ΄μ€λ₯Ό κ°μ§ ν΄λμ€λ€μ΄ ν¨κ» λμν μ μλλ‘ λ³νν΄μ£Όλ μν μ ν©λλ€. μ¦, κΈ°μ‘΄ ν΄λμ€μ μΈν°νμ΄μ€λ₯Ό ν΄λΌμ΄μΈνΈκ° μνλ λ€λ₯Έ μΈν°νμ΄μ€λ‘ λ³νν΄μ£Όλ μν μ ν©λλ€.
μ΄ ν¨ν΄μ νΈνλμ§ μλ μΈν°νμ΄μ€λ₯Ό κ°μ§ ν΄λμ€λ€μ΄ ν¨κ» μ¬μ©ν μ μλλ‘ μ€κ°μμ λ³ν μμ μ μ²λ¦¬ν΄μ£Όλ μΌμ’ μ "λ³νκΈ°" μν μ νλ κ²μ λλ€. μλ°μμλ νΉν 컬λ μ , μ€νΈλ¦Ό, λ°°μ΄ λ±μ λ³νν λ μ΄λν° ν¨ν΄μ μμ£Ό μ¬μ©ν©λλ€.
- νΈνλμ§ μλ μΈν°νμ΄μ€λ₯Ό μ°κ²°νμ¬ κΈ°μ‘΄ μ½λλ₯Ό λ³κ²½νμ§ μκ³ λ μλ‘μ΄ λ°©μμΌλ‘ μ¬μ©ν μ μκ² ν©λλ€.
- μ¬μ¬μ©μ±μ λμ΄κΈ° μν΄, κΈ°μ‘΄ ν΄λμ€λ₯Ό μμ νμ§ μκ³ λ€λ₯Έ λ°©μμΌλ‘ νμ©ν μ μλλ‘ λμμ€λλ€.
static List<Integer> intArrayAsList(int[] a) {
return new AbstractList<>() {
@Override
public Integer get(int i) {
return a[i]; // int λ°°μ΄μ κ°μ Integerλ‘ λ³ννμ¬ μ 곡
}
@Override
public Integer set(int i, Integer val) {
int oldVal = a[i];
a[i] = val; // Integer κ°μ int λ°°μ΄μ μ μ₯
return oldVal;
}
@Override
public int size() {
return a.length; // λ°°μ΄μ ν¬κΈ°λ₯Ό 리μ€νΈμ ν¬κΈ°λ‘ λ°ν
}
};
}μ΄ μ½λλ int[] λ°°μ΄μ λ°μ List<Integer>λ‘ λ³νν΄μ€λλ€. μ¦, λ°°μ΄μ 리μ€νΈμ²λΌ λ€λ£° μ μλλ‘ λ³ννλ μ΄λν° μν μ ν©λλ€.
int[]λ°°μ΄μ κΈ°λ³Έ μλ£νμ μ¬μ©νκ³ , 리μ€νΈ(List)λ μ λ€λ¦ νμ μ μ¬μ©ν©λλ€.- μ΄ λ κ°μ§λ νΈνλμ§ μλ μλ£κ΅¬μ‘°μ΄λ―λ‘, μ΄λν° ν¨ν΄μ ν΅ν΄ λ°°μ΄μ 리μ€νΈλ‘ λ³ννμ¬ μλ‘ λ€λ₯Έ λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μκ² λ§λ€μ΄ μ€λλ€.
- ν΄λΌμ΄μΈνΈ(Client): κΈ°μ‘΄ ν΄λμ€μ κΈ°λ₯μ μ¬μ©νλ €λ μ½λμ λλ€.
- μ΄λν°(Adaptee): κΈ°μ‘΄ ν΄λμ€, μ¦ λ³νν΄μΌ νλ λμμ λλ€.
- μ΄λν°(Adapter): μ΄λν°μ μΈν°νμ΄μ€λ₯Ό ν΄λΌμ΄μΈνΈκ° μνλ μΈν°νμ΄μ€λ‘ λ³ννλ ν΄λμ€μ λλ€.
// κΈ°μ‘΄ ν΄λμ€
class OldSystem {
public void oldMethod() {
System.out.println("Old method is called");
}
}
// μ΄λν° μΈν°νμ΄μ€
interface NewSystem {
void newMethod();
}
// μ΄λν° ν΄λμ€
class Adapter implements NewSystem {
private OldSystem oldSystem;
public Adapter(OldSystem oldSystem) {
this.oldSystem = oldSystem;
}
@Override
public void newMethod() {
oldSystem.oldMethod(); // κΈ°μ‘΄ λ©μλλ₯Ό μλ‘μ΄ λ©μλλ‘ λ³ν
}
}
// ν΄λΌμ΄μΈνΈ μ½λ
public class Main {
public static void main(String[] args) {
OldSystem oldSystem = new OldSystem();
NewSystem adapter = new Adapter(oldSystem);
adapter.newMethod(); // μ΄λν°λ₯Ό ν΅ν΄ oldMethod()λ₯Ό νΈμΆ
}
}μ μμμμ, OldSystemμ κΈ°μ‘΄ μμ€ν
μ νννκ³ Adapterλ μ΄λ₯Ό NewSystem μΈν°νμ΄μ€μ λ§κ² λ³νν΄μ€λλ€. μ΄λ κ² νλ©΄ OldSystemμ μ½λλ₯Ό λ³κ²½νμ§ μκ³ λ μλ‘μ΄ λ°©μμΌλ‘ μ¬μ©ν μ μκ² λ©λλ€.