Adapter 패턴이란?
서로 다른 두 interface를 연결하는 패턴
wrapper 패턴
adapter 패턴의 구현방법 2
1. 상속(inheritance): class
이미 존재하는 클래스 A, 필요 메소드를 선언한 interface B
->interface B에 선언된 메소드를 이용해서 class A를 상속받아 class A가 가지고 있는 메소드를 이용(adapter)
== class A 상속 + interface B 구현
=> Main 을 수정하지 않고도, class A 의 구현을 변경할 수 있음
+ java는 다중상속 불가능, 다중구현은 ok
ex)

여기서 PrintBanner가 adapter 이다.
Banner class를 상속받고, Print의 추상 메소드를 Banner class의 메소드를 사용해 구현한다.
+PrintBanner의 생성자에서 상위 클래스의 생성자를 명시적으로 호출해줘야한다.
(-> 이로인해 하위클래스 메모리가 상위클래스보다 커짐)
상위 클래스인 Banner의 생성자에는 파라미터가 존재하므로, super(string)을 명시적으로 작성하지않으면,
컴파일러가 자동으로 super()을 실행하므로 매개변수가 없어 에러가 난다.
// 상위 클래스
public Banner(String string) {
this.string = string;
}
// 하위 클래스
public PrintBanner(String string) {
super(string); // 상위클래스 생성자 명시적 호출
}
+변수 타입 할당
PrintBanner를 상위클래스인 Print 에 넣은 이유는 추상화때문이다.
java의 런타임환경에서는 Print 가 아닌 PrintBanner의 메소드를 실행한다.
(c++은 반대로 Print의 메소드를 실행한다고... 아오 헷갈료)
Print p = new PrintBanner("Hello");
2. 위임(delegation): instance
만약 Print 가 interface가 아니라 abstact class라면?
PrintBanner 클래스에 Banner type 멤버변수를 생성한다.
Print를 상속받아, Banner 인스턴스가 메소드를 실행하도록 하여 추상메소드를 구현한다.
이때, 인스턴스가 동작을 실행시키므로 == 동작이 인스턴스에 위임됨!

Adapter 패턴은
기존 class를 수정하지않고도, 필요한 클래스를 만들때 사용함
메소드의 프로토타입만 알면 어댑터 패턴을 적용할 수 있음
(프로토타입:이름,인자개수,인자형,반환형 등)
구버전,신버전 구분할때도 사용 (ver1.0<->2.0 adapter)
상속 vs 위임
위임은 인스턴스에 역할을 맡김.
상속은 상위클래스 내부 동작을 자세히 모르면 효과적으로 사용하기 어렵
'복습 > 소프트웨어디자인패턴' 카테고리의 다른 글
| Singleton 패턴 (0) | 2026.04.17 |
|---|---|
| Factory Method 패턴 (1) | 2026.04.17 |
| Template Method 패턴 (0) | 2026.04.17 |
| Iterator 패턴 (0) | 2026.04.17 |
| 디자인패턴 (기초,uml) (0) | 2026.04.17 |