CS

[λ””μžμΈ νŒ¨ν„΄] 01. μ–΄λŒ‘ν„° νŒ¨ν„΄ (adapter pattern)

sun_young 2025. 1. 29. 22:08
πŸ”Žμ–΄λŒ‘ν„° νŒ¨ν„΄
클래슀λ₯Ό λ°”λ‘œ μ‚¬μš©ν•  수 μ—†λŠ” κ²½μš°κ°€ μžˆλŠ”λ° μ€‘κ°„μ—μ„œ λ³€ν™˜ 역할을 ν•΄μ£ΌλŠ” 클래슀λ₯Ό μ–΄λŒ‘ν„° νŒ¨ν„΄μ΄λΌκ³  ν•œλ‹€.

 

EX)

C νƒ€μž…λ§Œ μ§€μ›ν•˜λŠ” λ§₯뢁에 USB 포트λ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•œλ‹€λ©΄ USB와 Cνƒ€μž…μ„ ν˜Έν™˜ν•  수 μžˆλŠ” μ–΄λŒ‘ν„°κ°€ ν•„μš”ν•˜λ‹€. 

μ–΄λŒ‘ν„°λ₯Ό 톡해 μ–΄λ– ν•œ USB 포트λ₯Ό 가져와도 Cνƒ€μž…μ˜ λ§₯λΆμ—μ„œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. 

이처럼 μ€‘κ°„μ—μ„œ ν•„μš”λ‘œ ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œ λ³€ν™˜ν•΄μ£Όμ–΄ ν•¨κ»˜ λ™μž‘ν•  수 μ—†λŠ” ν΄λž˜μŠ€λ“€μ΄ ν•¨κ»˜ λ™μž‘ν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” νŒ¨ν„΄μ΄λ‹€.

 

μ½”λ“œλ‘œ μ–΄λŒ‘ν„° νŒ¨ν„΄ μ΄ν•΄ν•˜κΈ°

public interface Duck {
    public void quack();
    public void fly();
}
public interface Turkey {
    public void gobble();
    public void fly();
}
public class WildTurkey implements Turkey {
    @Override
    public void gobble() {
    	System.out.println("gobble");
    }
    
    @Override
    public void fly() {
    	System.out.println("fly");
    }
}
public class TurkeyAdapter implements Duck {
    Turkey turkey;
    
    public TurkeyAdapter(Turkey turkey) {
    	this.turkey = turkey;
    }
    
    @Override
    public void quack() {
    	turkey.gobble();
    }
    
    @Override
    public void fly() {
    	turkey.fly();
    }
}
  • Duck λŒ€μ‹  Turkey 객체λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•  λ•Œ μΈν„°νŽ˜μ΄μŠ€κ°€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— Turkey 객체λ₯Ό λ°”λ‘œ μ‚¬μš©ν•  수 μ—†λ‹€. λ”°λΌμ„œ μ–΄λŒ‘ν„°λ₯Ό μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•˜λ„λ‘ ν•œλ‹€.
WildTurkey turkey = new WildTurkey();
Duck turkeyAdapter = new TurkeyAdapter(turkey);

testDuck(turkeyAdapter);

public static void testDuck(Duck duck) {
    duck.quack();
    duck.fly();
}
  • testDuck ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ turkey 객체 κ·ΈλŒ€λ‘œ ν˜ΈμΆœν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€. turkey 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ testDuck ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•΄ 쀑간에 TurkeyAdapterλ₯Ό μ‚¬μš©ν•˜μ˜€λ‹€.

마무리

μ–΄λŒ‘ν„° νŒ¨ν„΄μ€ μ½”λ“œ 변경이 μ–΄λ €μš΄ 클래슀λ₯Ό μ›ν•˜λŠ” ν˜•νƒœλ‘œ μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ μ μš©ν•  수 μžˆλ‹€.

 

클래슀의 μ½”λ“œλ₯Ό λ³€κ²½ν•˜κΈ° μ–΄λ €μš΄ 경우

  1. 이미 λ§Žμ€ ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©λ˜λŠ” 곡용 μ½”λ“œμ˜ 경우
  2. μ–΄λ–€ ν΄λž˜μŠ€κ°€ 버전 μ—… 된 경우 ν•˜μœ„ λ²„μ „μ˜ ν΄λž˜μŠ€μ—λ„ 지원해야 ν•˜λŠ” 경우

 

더보기