λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Java/Java 이둠

μ–΄λŒ‘ν„° νŒ¨ν„΄ (Adapter Pattern)

μ–΄λŒ‘ν„° νŒ¨ν„΄

μžλ°”μ˜ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œκ³Ό 같이, μ‚¬μš©μžκ°€ ꡬ체적인 λ‚΄λΆ€ ꡬ쑰λ₯Ό λͺ°λΌλ„ κ³΅ν†΅μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 μ‘°μž‘ν•  수 μžˆλŠ” 것듀이 μžˆλ‹€.

μ΄λŸ¬ν•œ 것듀을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 것이 μ‹±κΈ€ν„΄ νŒ¨ν„΄(Singleton pattern) 인데, λ³€ν™˜κΈ°λΌλŠ” λœ»μ„ 가진 μ–΄λŒ‘ν„°μ˜ λœ»μ— 맞게, ν˜ΈμΆœν•˜λŠ” μͺ½μ— 맞게 쀑간에 λ³€ν™˜μ„ ν•΄μ£ΌλŠ” νŒ¨ν„΄μ΄λ‹€.

μ˜ˆμ‹œ

νŒ¨ν„΄μ΄ 적용 μ•ˆλœ 클래슀

μ•„λž˜μ˜ 두 ν΄λΌμŠ€κ°€ μžˆλ‹€κ³ ν•˜μž.

public class ClassA {
    void runClassA() {
        System.out.println("ClassA의 λ©”μ„œλ“œκ°€ μ‹€ν–‰");
    }
}
public class ClassB {
    void runClassB() {
        System.out.println("ClassB의 λ©”μ„œλ“œκ°€ μ‹€ν–‰");
    }
}

μ‚¬μš©μžμ˜ μž…μž₯에선 classA와 classB의 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„ , 일일이 λ‹€λ₯Έ λ©”μ„œλ“œλͺ…μœΌλ‘œ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.

public class ClassTest {

    public static void main(String[] args) {
        ClassA classA = new ClassA();
        ClassB classB = new ClassB();

        classA.runClassA();
        classB.runClassB();
    }

}

μ‹€ν–‰κ²°κ³Ό

ClassA의 λ©”μ„œλ“œκ°€ μ‹€ν–‰
ClassB의 λ©”μ„œλ“œκ°€ μ‹€ν–‰

μ΄λ ‡κ²Œ ν•˜λ©΄ μ›ν•˜λŠ” μ‹€ν–‰ κ²°κ³Όκ°€ λ‚˜μ˜€μ§€λ§Œ 더 λ³΅μž‘ν•΄μ§€λŠ” μ‹€μ œ κ°œλ°œμ—μ„œ,

일일이 runClassA, runClassB, ... κ°€ μ•„λ‹ˆλΌ runClass둜 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것을 ν†΅μΌν•˜κ³  싢을 땐, μ–΄λŒ‘ν„° νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ λœλ‹€.

νŒ¨ν„΄μ΄ 적용 된 클래슀

public class ClassA {
    void runClassA() {
        System.out.println("ClassA의 λ©”μ„œλ“œκ°€ μ‹€ν–‰");
    }
}

class AdapterClassA{
    ClassA classA = new ClassA();
    void runClass() {
        classA.runClassA();
    }
}
public class ClassB {
    void runClassB() {
        System.out.println("ClassB의 λ©”μ„œλ“œκ°€ μ‹€ν–‰");
    }
}

class AdapterClassB{
    ClassB classB = new ClassB();
    void runClass() {
        classB.runClassB();
    }
}

ν•΄λ‹Ή 클래슀 밑에, μ–΄λŒ‘ν„° 클래슀λ₯Ό λ§Œλ“€μ–΄ 쀬닀.

public class ClassTest {

    public static void main(String[] args) {
        AdapterClassA adapterClassA = new AdapterClassA();
        AdapterClassB adapterClassB = new AdapterClassB();

        adapterClassA.runClass();
        adapterClassB.runClass();
    }

}

μ‹€ν–‰κ²°κ³Ό

ClassA의 λ©”μ„œλ“œκ°€ μ‹€ν–‰
ClassB의 λ©”μ„œλ“œκ°€ μ‹€ν–‰

λ©”μ„œλ“œ λͺ…이 runClass둜 ν†΅μΌλ˜μ—ˆκ³ , μ‹€ν–‰ κ²°κ³ΌλŠ” λ™μΌν•˜λ‹€.

이와 같이 ν˜ΈμΆœν•˜λŠ” μͺ½μ˜ ν˜•μ‹μ— 맞게 μ€‘κ°„μ—μ„œ λ³€ν™˜κΈ°λ₯Ό μ œκ³΅ν•˜λŠ” 것이 μ–΄λŒ‘ν„° νŒ¨ν„΄μ΄λ‹€.