어댑터 패턴이란 서로 다른 두 인터페이스에 통신이 가능하도록 하는 것이다.
다른 이름을 가진 여러 메서드를 동일한 이름으로 사용할 수 있게 변환해주는 것이다. 따라서 어댑터 패턴은 여러 메서드를 👉 단일하게, 일관되게 사용하게 만들어준다.
클래스 A와 B가 서로 다른 이름의 메서드명을 가질 때 동일한 이름의 메서드에서 해당 메서드를 실행하는 클래스를 통해 동일한 이름으로 사용가능하게 해준다. 어댑터역할을 하는 클래스는 해당 객체를 속성으로 가진다. (합성)
기존의 코드를 건드리지 않고도 어댑터 패턴을 이용해 기존시스템을 이용할 수 잇다.
외부 라이브러리나 외부 시스템은 사용하는 시스템과 규격이 다를 수 있다. 규격을 맞추기 위해 어댑터 패턴을 이용해 사용할 수 있다.
🤔 어댑터 패턴의 예시 : JDBC
JDBP는 다양한 데이터 베이스 시스템을 단일한 인터페이스로 사용할 수 있게 해준다. 즉, 어댑터 패턴을 이용한다.
서로 다른 클래스를 동일하게 사용할 수 있도록 했다.
변환기 클래스에서 메서드 명을 동일하게 바꿨다.
변환기의 인터페이스를 만들었다.
실제 서비스 클래스
package OOP06.adapterPattern;
public class MelonMusic {
void playMusic(){
System.out.println("🍈 음악 시작");
}
void stopMusic() {
System.out.println("🍈 음악 멈춤");
}
}
package OOP06.adapterPattern;
public class YoutubeMusic {
void redButton(){
System.out.println("음악 재생 🎶");
}
void blueButton(){
System.out.println("음악 멈춤");
}
}
어댑터의 인터페이스
package OOP06.adapterPattern;
public interface MusicPlayer {
void playMusic();
void stopMusic();
}
어댑터
package OOP06.adapterPattern;
public class MelonAdapter implements MusicPlayer{
MelonMusic melonMusic = new MelonMusic();
@Override
public void playMusic() {
melonMusic.playMusic();
}
@Override
public void stopMusic() {
melonMusic.playMusic();
}
}
package OOP06.adapterPattern;
public class YoutubeAdapter implements MusicPlayer{
YoutubeMusic youtubeMusic = new YoutubeMusic();
@Override
public void playMusic() {
youtubeMusic.redButton();
}
@Override
public void stopMusic() {
youtubeMusic.blueButton();
}
}
실행 코드
package OOP06.adapterPattern;
public class Driver {
public static void main(String[] args) {
// 어댑터 없이
MelonMusic melonMusic = new MelonMusic();
melonMusic.playMusic();
melonMusic.stopMusic();
YoutubeMusic youtubeMusic = new YoutubeMusic();
youtubeMusic.redButton();
youtubeMusic.blueButton();
// 어댑터 사용
MusicPlayer musicPlayer01 = new YoutubeAdapter();
MusicPlayer musicPlayer02 = new MelonAdapter();
musicPlayer01.playMusic();
musicPlayer02.playMusic();
}
}
===========================
🍈 음악 시작
🍈 음악 멈춤
음악 재생 🎶
음악 멈춤
========어댑터 사용 부분=========
음악 재생 🎶
🍈 음악 시작
기존 실제 서비스 구현 객체 코드를 변경하지 않아도 가능했다~!