자바와 객체 지향 그리고 스프링] 06. 어댑터 패턴

코린이서현이·2024년 1월 12일
0

📌 어댑터 패턴 (Adapter Pattern)

어댑터 패턴이란 서로 다른 두 인터페이스에 통신이 가능하도록 하는 것이다.

어댑터 패턴을 사용 시

다른 이름을 가진 여러 메서드를 동일한 이름으로 사용할 수 있게 변환해주는 것이다. 따라서 어댑터 패턴은 여러 메서드를 👉 단일하게, 일관되게 사용하게 만들어준다.

어댑터 패턴을 만드는 방법

클래스 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();
  }
}
===========================
🍈 음악 시작
🍈 음악 멈춤
음악 재생 🎶
음악 멈춤
========어댑터 사용 부분=========
음악 재생 🎶
🍈 음악 시작

기존 실제 서비스 구현 객체 코드를 변경하지 않아도 가능했다~!

profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글