12.3 ꡬ쑰μ κ΄ν ν¨ν΄
12.3.1 Adapter ν¨ν΄ - μΈν°νμ΄μ€μ `νΈνμ±μ΄ μλ ν΄λμ€`λ€μ μ‘°ν©μν€κΈ°
κΈ°μ‘΄ μμ€ν μ μ¬μ¬μ©νμ¬ μλ‘μ΄ μμ€ν μ μ¬μ©νλ€κ³ κ°μ ν΄λ³΄μ. μ΄λ μλ‘μ΄ μμ€ν μ μ§κΈκΉμ§ μ¬μ©νλ λ©μλμλ λ€λ₯Έ μΈν°νμ΄μ€λ₯Ό κ°μ§κ³ μλ€. μ΄ κ²½μ°μλ κΈ°μ‘΄ μμ€ν μ μμ λμ μμ μ νκ² λλ©΄ μμ²λ λ³νλ₯Ό κ°μνκ² λλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν 'μλ¨'μ΄ Adapter ν¨ν΄μ΄λ€.
μ΄ ν¨ν΄μ 'μΈν°νμ΄μ€'μ νΈνμ±μ΄ μλ ν΄λμ€λ€μ μ‘°ν©μν€λ κ²μ λͺ©μ μΌλ‘ νμ¬ κΈ°μ‘΄ μμ€ν κ³Ό μλ‘μ΄ μμ€ν μ μΈν°νμ΄μ€λ₯Ό ν‘μνλ Adapterλ₯Ό μ 곡νμ¬ 'μ μ λ³κ²½μΌλ‘ κΈ°μ‘΄ μμ€ν μ μλ‘μ΄ μμ€ν μ μ μ©ν μ μλλ‘' νλ€.
Adapter ν¨ν΄μ λ κ°μ§ λ°©λ²μ΄ μλ€.
1. μμμ μ΄μ©νλ λ°©λ²
2. μμμ μ΄μ©νλ λ°©λ²
μμμ μ΄μ©νλ λ°©λ²
OldSystemμ΄λ ν΄λμ€μ κΈ°μ‘΄ λ©μλλ€μ΄ ꡬνλμ΄ μκ³ Target μΈν°νμ΄μ€μλ μλ‘μ΄ λ©μλ μ μκ° μλ€.
μ΄ λ Adapterμ OldSystemμ μμνκ³ (extends) Targetμ ꡬν(Implements)νλ©΄ λλ€.
μ΄λ κ² Adapterλ₯Ό λ§λ€κ³ μ¬μ©ν λ Target μ°Έμ‘° λ³μμ Adapter ꡬν체λ₯Ό μ¬μ©ν μ μλ€.
public class OldSystem {
public void oldProcess() {
// κΈ°μ‘΄ μ²λ¦¬
}
}
public interface Target {
public void process() {
// κΈ°μ‘΄ μ²λ¦¬
}
}
public class Adapter extends OldSystem implements Target {
@Override
public void process() {
oldProcess();
}
}
μ μ½λμ²λΌ Adpaterλ₯Ό ν΅ν΄ Targetμ΄λΌλ μλ‘μ΄ μμ€ν μ λ©μλμ κΈ°μ‘΄ μμ€ν μ λ©μλλ₯Ό μ¬μ©νλλ‘ ν μ μλ€.
public class SampleMain {
public static void main(String[] args) {
Target target = new Adapter();
target.process();
}
}
Adapterν΄λμ€λ κΈ°μ‘΄ ν΄λμ€λ₯Ό μμνκ³ μλ‘μ΄ μμ€ν μ μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€μ΄λ€. μλ‘μ΄ λ©μλμΈ process() νΈμΆ μ κΈ°μ‘΄ λ©μλκ° νΈμΆλκ² κ΅¬νν¨μΌλ‘μ¨ κΈ°μ‘΄ μμ€ν μ κ·Έλλ‘ μ¬μ©ν μ μκ² νλ€.
μμμ μ΄μ©νλ λ°©λ²
μμ²λΌ μλ‘μ΄ μμ€ν μ΄ μΈν°νμ΄μ€κ° μλλΌ μΆμν΄λμ€λ‘ μ μΈλ κ²½μ°λ₯Ό κ°μ ν΄λ³΄μ. μ΄ κ²½μ°μλ κΈ°μ‘΄κ³Ό μλ‘μ΄ ν΄λμ€ λ κ°λ₯Ό λ€μ€ μμν΄μΌλ―λ‘ λΆκ°λ₯νλ€. (λν OldSystemμ΄ finalλ‘ μ μΈλμ΄ μλ κ²½μ°μλ μμμ΄ λΆκ°λ₯ν΄μ§λ€.)
μ΄λ° κ²½μ°μλ μμμ μ¬μ©νλ©΄ ν΄κ²°μ΄ κ°λ₯νλ€.
public class OldSystem {
public void oldProcess() {
// κΈ°μ‘΄ μ²λ¦¬
}
}
public abstract Target {
public abstract void process() {
// κΈ°μ‘΄ μ²λ¦¬
}
}
public class Adapter extends Target {
private OldSystem oldSystem;
public Adpater() {
this.oldSystem = new OldSystem();
}
@Override
public void process() {
this.oldSystem.oldProcess();
}
}
---------------------------------------
Adpater ν¨ν΄μ μ¬μ©νκ³ μ νλ μΈν°νμ΄μ€λ₯Ό κ°μ μ μΌλ‘ λ°κΎΈκ³ μΆμ κ²½μ°μ μ¬μ©ν μ μλ€.
μ΄λ―Έ μ‘΄μ¬νλ ν΄λμ€λ₯Ό λ³κ²½νλ κ²μ΄ μλλΌ λ€λ₯Έ μΈν°νμ΄μ€μμ νΈμΆν λ μ¬μ©ν μ μλ€.
νλ μμν¬λ₯Ό μ΄μ©νκ³ μμ λ 'νλ μμν¬ λ΄λΆμ μ²λ¦¬λ₯Ό λ€λ₯Έ λ°©λ²μΌλ‘ νΈμΆνκ³ μΆμ λ' μ¬μ©ν μ μλ€.
12.3.2 Composite ν¨ν΄ - μ¬κ·μ ꡬ쑰 μ½κ² μ²λ¦¬νκΈ°
νμΌμμ€ν μ μ½κ² νννλ €λ©΄ μ΄λ»κ² νλ©΄ λ κΉ?
μΌλ°μ νμΌμμ€ν μλ νμΌκ³Ό λλ ν λ¦¬κ° μ‘΄μ¬νλλ° μ΄λ₯Ό ꡬλΆνμ§ μκ³ μ²λ¦¬νλ€λ©΄ λμ± νΈν κ²μ΄λ€.
μ΄λ₯Ό ꡬννκΈ° μν μλ¨μ΄ λ°λ‘ 'Compsite' ν¨ν΄μ΄λ€.
public interface Entry {
void add(Entry entry);
void remove();
void rename(String name);
}
public class File implements Entry {
private String name;
public File(String name) {
this.name = name;
}
@Override
public void add(Entry entry) {
throw new UnsupportedOperationException();
}
@Override
public void remove() {
System.out.println(this.name + "λ₯Ό μμ νλ€.");
}
@Override
public void rename(String name) {
this.name = name;
}
}
public class Directory implements Entry {
private String name;
private List<Entry> list;
public Directory(String name) {
this.name = name;
this.list = new ArrayList<>();
}
@Override
public void add(Entry entry) {
list.add(entry);
}
@Override
public void remove() {
Iterator<Entry> itr = list.iterator();
while(itr.hasNext()) {
Entry entry = itr.next();
entry.remove();
}
System.out.println(this.name + "λ₯Ό μμ νλ€.");
}
@Override
public void rename(String name) {
this.name = name;
}
}
μ μ½λλ 'νμΌ'κ³Ό 'λλ ν 리' λͺ¨λ Entry μΈν°νμ΄μ€λ₯Ό ꡬννλλ‘ νλ€. μ΄λ₯Ό ν΅ν΄ λ ν΄λμ€λ₯Ό λμΌμνμ¬ μ²λ¦¬ν μ μκ² νμλ€.
public Class SampleMain {
public static void main(String... args) {
File file1 = new File("file1");
File file2 = new File("file2");
File file3 = new File("file3");
File file4 = new File("file4");
Directory dir1 = new Directory("dir1");
dir1.add(file1);
Directory dir2 = new Directory("dir1");
dir2.add(file2);
dir2.add(file3);
dir1.remove();
}
}
Composite ν¨ν΄μ μ΄μ©ν¨μΌλ‘μ¨ μ¬κ·μ μΈ κ΅¬μ‘°μ κΈ°μ μ΄ μ©μ΄νκ² λκ³ μ μ§λ³΄μμ±λ ν₯μμν¬ μ μλ€.
νμ μ νλ‘κ·Έλ¨μμλ νΈλ¦¬ ꡬ쑰μ λ°μ΄ν°λ₯Ό ννν λ μ¬μ©νλ€.
'πμ½μ μ± μ 리 > μλ° λ§μ€ν°λΆ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ° λ§μ€ν°λΆ] 12μ₯ : λμμΈν¨ν΄ μ¦κΈ°κΈ° - νλ (0) | 2021.10.02 |
---|---|
[μλ° λ§μ€ν°λΆ] 12μ₯ λμμΈν¨ν΄ μ¦κΈ°κΈ° - μμ± (0) | 2021.09.22 |
[μλ° λ§μ€ν°λΆ] 10μ₯ κ°μ²΄μ§ν₯ μ¦κΈ°κΈ° (0) | 2021.09.15 |
[μλ° λ§μ€ν°λΆ] 9μ₯ λ μ§ μ²λ¦¬ 곡λ΅νκΈ° (0) | 2021.09.14 |
[μλ° λ§μ€ν°λΆ] 6μ₯ μμΈ κ³΅λ΅νκΈ° (0) | 2021.09.12 |