Design Pattern | Adapter Pattern (아답터 패턴)
Adapter 패턴이란?
- Adapter라는 영어 단어는, 적합시키는 것이라는 의미가 된다.
- Adapter 패턴은, 이미 제공되고 있는 것을 그대로 사용할 수 없는 것에 대해, 필요한 형태로 변환해 이용하기 위한 방식이다. 즉, 인터페이스의 변경하기 위한 방식이다.
- 어댑터는 볼트 수가 맞지 않을 때 중간에 연결해주는 돼지코를 생각하면 된다.
- 패턴도 양쪽에 서로 맞지 않은 인테페이스가 있다면 이 둘 간에 연결시켜줄 수 있는 Bridge를 만들어 주면 된다.
- 상속을 이용한 방법과 위임을 이용한 방법이 있다.
- 클래스에 의한 Adapter Pattern
- 상속을 이용한 Adapter Pattern이다.
- 인스턴스에 의한 Adapter Pattern
- 위임을 사용한 Adapter Pattern이다.
- 클래스에 의한 Adapter Pattern
- 래퍼 패턴 이라고도 하다. 래퍼는 감싸는 것을 의미하다.
- GoF의 디자인 패턴에서는 구조와 관련된 디자인 패턴으로 분류된다.
Adapter 패턴 예제 프로그램
학생의 이름과 나이를 표시하는 예제 프로그램이다.
1. 클래스 상속을 이용한 방법
Class Diagram
1-1. Human 클래스
원래 제공된 클래스이다.
Human.java
package com.devkuma.designpattern.structural.adapter.ex1;
public class Human {
private String name;
private int age;
public Human(String name, int age) {
this.name = name;
this.age = age;
}
public void printName() {
System.out.println(name);
}
public void printAge() {
System.out.println(age);
}
}
1-2. Student 인터페이스
필요한 인터페이스이다.
Student.java
package com.devkuma.designpattern.structural.adapter.ex1;
public interface Student {
void showName();
void showAge();
}
1-3. HumanAdapter 클래스
Adapter 역할이 되는 클래스이다.
HumanAdapter.java
package com.devkuma.designpattern.structural.adapter.ex1;
public class HumanAdapter extends Human implements Student {
public HumanAdapter(String name, int age) {
super(name, age);
}
public void showName() {
printName();
}
public void showAge() {
printAge();
}
}
1-4. Main 클래스
메인 처리를 실행하는 클래스이다.
Main.java
package com.devkuma.designpattern.structural.adapter.ex1;
public class Main {
public static void main(String[] args) {
Student student = new HumanAdapter("devkuma", 25);
student.showName();
student.showAge();
}
}
1-5. 실행 결과
devkuma
25
2. 위임을 이용한 방법
2-1. Human 클래스
원래 제공된 클래스이다.
Human.java
package com.devkuma.designpattern.structural.adapter.ex2;
public class Human {
private String name;
private int age;
public Human(String name, int age) {
this.name = name;
this.age = age;
}
public void printName() {
System.out.println(name);
}
public void printAge() {
System.out.println(age);
}
}
2-2. Student 인터페이스
필요한 인터페이스이다.
Student.java
package com.devkuma.designpattern.structural.adapter.ex2;
public interface Student {
void showName();
void showAge();
}
2-3. HumanAdapter 클래스
Adapter 역할이 되는 클래스이다.
HumanAdapter.java
package com.devkuma.designpattern.structural.adapter.ex2;
public class HumanAdapter implements Student {
private Human human;
public HumanAdapter(String name, int age) {
this.human = new Human("田中", 25);;
}
public void showName() {
human.printName();
}
public void showAge() {
human.printAge();
}
}
2-4. Main 클래스
메인 처리를 실행하는 클래스이다.
Main.java
package com.devkuma.designpattern.structural.adapter.ex2;
public class Main {
public static void main(String[] args) {
Student student = new HumanAdapter("devkuma", 25);
student.showName();
student.showAge();
}
}
2-5. 실행 결과
devkuma
25
Adapter 패턴의 장점
Adapter 패턴은 기존 클래스에 가죽을 씌우고 필요한 클래스를 만든다. 이 패턴을 사용하면 필요한 메소드 그룹을 신속하게 만들 수 있다.
만약 버그가 검출되었다고 해도, 기존의 클래스가 충분히 테스트되고 있다면, Adapter역의 클래스를 중점적으로 조사하면 좋게 되므로, 프로그램의 체크가 편해진다.
또한 Adapter 패턴을 사용하면 기존 클래스에 손을 추가하지 않고 기능을 구현할 수 있으므로 기존 클래스를 다시 테스트하는 번거로움을 줄일 수 있다.
최종 수정 : 2022-03-16