ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 구조패턴 > 어댑터 *
    기타/디자인패턴 2021. 2. 11. 10:09

    다른 인터페이스로 변환, 호환성 

    한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환한다.

    어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 사용할 수 있다.

     

    * mp3 (MediaPlayer)는 play 를, 새로 나온 mp4(MediaPackage)는 playFile 메서드를 각각 가지고 있는데 

    mp4가 mp3 의 play 를 사용할 수 있도록 하려면?

     

    mp3 를 상속하는 adapter 객체를 만들고 adapter 가 mp4를 구성요소로 가지게 한다.

    adapter 의 play 를 호출할 때 mp4의 playfile 이 호출되도록 한다.

    이전에 사용하던 play에 변화를 주지 않고 새로 나온 mp4의 기능을 호출할 수 있다.

    public class Main {
    
    	public static void main(String[] args) {
        
        	//MP4를 생성하는데, 어댑터의 타깃은 MediaPlayer(MP3)
        	MediaPlayer player = new FormatAdapter(new MP4());
            
            //MP3 의 play 를 호출하는데 내부적으로 mp4의 playfile 을 호출
    		player.play("file.mp4"); 
    		
    	}
    
    }

    MediaPlayer - MP3

    public interface MediaPlayer {
    	public void play(String filename);
    }
    
    public class MP3 implements MediaPlayer{
    
    	@Override
    	public void play(String filename) {
    		System.out.println("playing MP3 file " + filename);
    	}
    }
     

    MediaPackage - MP4

    public interface MediaPackage {
    	void playFile(String filename);
    }
    
    public class MP4 implements MediaPackage{
    
    	@Override
    	public void playFile(String filename) {
    		System.out.println("playing MP4 file " + filename);
    	}
    }

    Adapter

    MediaPlayer(MP3) 의 play 내에서 MediaPackage(MP4) 의 playfile 을 호출 

    public class FormatAdapter implements MediaPlayer{
    	private MediaPackage media;
    	
    	public FormatAdapter(MediaPackage media) {
    		this.media = media;
    	}
    
    	@Override
    	public void play(String filename) {
    		System.out.println("using Adapter" + filename);
    		media.playFile(filename);
    	}
    }
    

     

    * 데코레이터와 어댑터

    데코레이터 : 기존 객체를 감싸면서 기존 코드의 수정없이 클래스에 새로운 행동을 추가할 수 있다. 

    어댑터 : 객체를 감싸 인터페이스를 변환한다. 기존 코드를 코드의 수정없이 새로운 라이브러리를 쓸 수 있다. 

     

    반응형

    '기타 > 디자인패턴' 카테고리의 다른 글

    행위패턴 > 이터레이터 *  (0) 2021.02.11
    행위패턴 > 커맨드 *  (0) 2021.02.11
    구조패턴 > 퍼싸드 *  (0) 2021.02.11
    구조패턴 > 데코레이터 *  (0) 2021.02.11
    구조패턴 > 컴포지트 *  (0) 2021.02.11
Designed by Tistory.