JAVA-기초/Design Pattern

[Design Pattern] - Adapter 패턴

공부하고 기억하는 공간 2023. 9. 3. 12:10
728x90
반응형
SMALL

 

아래 글은 제가 노션에서 작성한 글을 가져온것입니다. 아래 게시물을 참고하여 게시물을 작성할 경우 댓글 부탁드려요.

 

Adapter

📌이미 제공된 코드를 그대로 사용할 수 없을 때, 필요한 형태로 변환후 이용하는 것

📌 이미 제공된 것과 필요한 것 사이의 차이를 메우는 디자인

📌Wrapper 패턴이라고 불리기도 한다.

📌두 종류가 잇다. 클래스에 의한 Adpater패턴(상속을 사용한 패턴 📌인스턴스에 의한 Adapter패턴(위임을 사용한 패턴)

⏬만들어 볼 클래스

📌Hello라는 주어진 문자열을 다음과 같이 표시하는 프로그램 (Hello), >>>Hello<<<

📌Banner (이미 제공된 클래스)

  1. showWithParen(괄호로 묶는 메서드)
  2. showWithAster(*로 묶는 메서드)

📌Print인터페이스(필요한 것)

printWeak메서드(괄호로 묶는 메서드)

printStong메서드(*로 강조하는 메서드)

📌필요한 것 PrintBanner클래스 = Banner와 Print인터페이스를 충족하는 클래스만들기

🟰상속을 통한 Adapter 패턴

✅Banner(이미 만들어진 것)

package adapter_inherit;

/**
 * 미리제공되는 클래스
 * @author Sunro
 *
 */
public class Banner {
	private String string;
	
	public Banner(String string) {
		this.string = string;
	}
	
	public void showWithParen() {
		System.out.println("("+string+")");
	}
	public void showWithAster() {
		System.out.println("*"+string+"*");
	}
}

✅Print인터페이스(필요한 것)

package adapter_inherit;

public interface Print {
	void printWeak();
	void printStrong();
}

✅PrintBanner(어댑터 역할)

package adapter_inherit;

/**
 * 준비된 Banner클래스를 확장하여 showWithParen메서드와 showWithAster
 * 메서드를 상속받으며, 필요한 Print인터페이스를 구현하여 printWeak메서드와 
 * printStrong메서드를 구현합니다.
 * @author Sunro
 *
 */
public class PrintBanner extends Banner implements Print{
	public PrintBanner(String string) {
		super(string);
	}
	
	@Override
	public void printWeak() {
		showWithParen();
	}
	
	@Override
	public void printStrong() {
		showWithAster();
	}
}

✅Main에서 호출

package adapter_inherit;

/**
 * Main클래스는 어디까지나 Print인터페이스를 사용해서 프로그래밍하고 있다.
 * Banner클래스나 Banner내부의 메서드는 Main클래스의 코드에서는 완전히 숨겨져 있다.
 * PrintBanner클래스가 어떻게 구현되었는지 Main클래스는 모른다. 따라서 
 * Main클래스를 전혀 변경하지 않아도 PrintBanner클래스의 구현을 바꿀 수 있다.
 * @author Sunro
 *
 */
public class Main {
public static void main(String[] args) {
	Print p = new PrintBanner("Hello");
	p.printWeak();
	p.printStrong();
}
}

🟰 위임을 사용한 Adapter 패턴

✅Print 클래스

package adapor_mandate;

public abstract class Print {
	public abstract void printWeak();
	public abstract void printStrong();
}

✅PrintBanner클래스

package adapor_mandate;

import adapter_inherit.Banner;

public class PrintBanner extends Print{
	private Banner banner;
	
	public PrintBanner(String string) {
		this.banner = new Banner(string);
	}

	@Override
	public void printWeak() {
		banner.showWithParen();
	}

	@Override
	public void printStrong() {
		banner.showWithAster();
	}
	
	
}

✅Main 클래스

package adapor_mandate;

public class Main {
public Main() {

	PrintBanner pb = new PrintBanner("hello");
	
	pb.printStrong();
	pb.printWeak();
}
}

🟰Adapter 패턴의 등장인물

  • [ ] Target(대상)노트북을 작동시키는 직류 12볼트에 해당
  • 예제 프로그램의 Print인터페이스, Print클래스가 이 역할이다.
  • 필요한 메서드를 결정
  • [ ] Client(의뢰자)역직류 12볼트로 작동하는 노트북
  • 예제의 Main클래스가 이 역할이다.
  • Target의 메서드를 사용하여 일한다.
  • [ ] Adaptee(적응 대상자)역교류 100볼트인 AC전원
  • Banner 클래스가 이 역할
  • 이미 준비된 메서드를 가지는 역할
  • [ ] Adapter(적응자)역Adaptee의 메서드를 사용해서 어떻게든 Target을 만족시키는 것이 이 패턴의 목적이다.
  • ✅위임을 사용
  • ✅상속을 사용
  • 100볼트를 직류의 12볼트로 변환하는 어댑터에 해당
  • Apapter패턴의 주인공

🟰Adapter를 사용하는 경우

📌이미 존재하는 클래스를 이용하는 경우

해당 클래스가 충분히 테스트되어 버그가 적고 또 실제로 지금까지 사용되어온 실적이 있다면 더더욱 해당 클래스를 부품으로 사용하고 싶어진다.

📌Adapter 패턴은 기존 클래스에 한겹 덧씌워 필요한 클래스를 만든다.

이 패턴을 사용하면 필요한 메서드군을 빠르게 만들 수 있다.

📌우리는 새로운 인터페이스에 맞추려고 할 떄 기존 클래스의 소스를 만져서 수정하고 말지만 우리는 수정하게 되면 또 테스트해야 한다.

📌Adapter패턴은 기존 클래스를 전혀 수정하지 않고 목적한 인터페이스에 맞추려는 것

⭐⭐되도록 상속보다는 위임을 사용한다. 상위 클래스의 내부 동작을 자세히 모르면, 상속을 효과적으로 사용하기 어려운 경우가 많기 떄문

  • [ ] 버전 업과 호환성흔히 레거시 시스템으로 불리는 구버전을 버리면 유지 보수는 편해지지만 항상 그럴 순 없다이때 신버전은 Adaptee 역이되고, 구버전은 Target역할이 된다.하지만 Adapter패턴을 사용하기 위해서는 관련성이 필요하고 너무 동떨어진 클래스면 안된다.
  • ✅그림으로 구현한 구/신버전 Adapter패턴
  • 신버전의 클래스를 사용하여 구버전의 메서드를 구현하는 Adapter역할 클래스를 만든다.
  • Adapter 패턴은 신버전과 구버전을 공존시키고, 유지 보수까지 편하게 하도록 도와준다.
  • 소프트웨어를 버전 업 할 떄 구버전과의 호환성이 문제가 된다.

[Design Pattern]- Adapter 패턴

Adapter

📌이미 제공된 코드를 그대로 사용할 수 없을 때, 필요한 형태로 변환후 이용하는 것

📌 이미 제공된 것과 필요한 것 사이의 차이를 메우는 디자인

📌Wrapper 패턴이라고 불리기도 한다.

📌두 종류가 잇다. 클래스에 의한 Adpater패턴(상속을 사용한 패턴 📌인스턴스에 의한 Adapter패턴(위임을 사용한 패턴)

⏬만들어 볼 클래스

📌Hello라는 주어진 문자열을 다음과 같이 표시하는 프로그램 (Hello), Hello 📌Banner (이미 제공된 클래스)

  1. showWithParen(괄호로 묶는 메서드)
  2. showWithAster(*로 묶는 메서드)

📌Print인터페이스(필요한 것)

printWeak메서드(괄호로 묶는 메서드)

printStong메서드(*로 강조하는 메서드)

📌필요한 것 PrintBanner클래스 = Banner와 Print인터페이스를 충족하는 클래스만들기

🟰상속을 통한 Adapter 패턴

✅Banner(이미 만들어진 것)

package adapter_inherit;

/**
 * 미리제공되는 클래스
 * @author Sunro
 *
 */
public class Banner {
	private String string;
	
	public Banner(String string) {
		this.string = string;
	}
	
	public void showWithParen() {
		System.out.println("("+string+")");
	}
	public void showWithAster() {
		System.out.println("*"+string+"*");
	}
}

✅Print인터페이스(필요한 것)

package adapter_inherit;

public interface Print {
	void printWeak();
	void printStrong();
}

✅PrintBanner(어댑터 역할)

package adapter_inherit;

/**
 * 준비된 Banner클래스를 확장하여 showWithParen메서드와 showWithAster
 * 메서드를 상속받으며, 필요한 Print인터페이스를 구현하여 printWeak메서드와 
 * printStrong메서드를 구현합니다.
 * @author Sunro
 *
 */
public class PrintBanner extends Banner implements Print{
	public PrintBanner(String string) {
		super(string);
	}
	
	@Override
	public void printWeak() {
		showWithParen();
	}
	
	@Override
	public void printStrong() {
		showWithAster();
	}
}

✅Main에서 호출

package adapter_inherit;

/**
 * Main클래스는 어디까지나 Print인터페이스를 사용해서 프로그래밍하고 있다.
 * Banner클래스나 Banner내부의 메서드는 Main클래스의 코드에서는 완전히 숨겨져 있다.
 * PrintBanner클래스가 어떻게 구현되었는지 Main클래스는 모른다. 따라서 
 * Main클래스를 전혀 변경하지 않아도 PrintBanner클래스의 구현을 바꿀 수 있다.
 * @author Sunro
 *
 */
public class Main {
public static void main(String[] args) {
	Print p = new PrintBanner("Hello");
	p.printWeak();
	p.printStrong();
}
}

🟰 위임을 사용한 Adapter 패턴

✅Print 클래스

package adapor_mandate;

public abstract class Print {
	public abstract void printWeak();
	public abstract void printStrong();
}

✅PrintBanner클래스

package adapor_mandate;

import adapter_inherit.Banner;

public class PrintBanner extends Print{
	private Banner banner;
	
	public PrintBanner(String string) {
		this.banner = new Banner(string);
	}

	@Override
	public void printWeak() {
		banner.showWithParen();
	}

	@Override
	public void printStrong() {
		banner.showWithAster();
	}
	
	
}

✅Main 클래스

package adapor_mandate;

public class Main {
public Main() {

	PrintBanner pb = new PrintBanner("hello");
	
	pb.printStrong();
	pb.printWeak();
}
}

🟰Adapter 패턴의 등장인물

  • [ ] Target(대상)노트북을 작동시키는 직류 12볼트에 해당
  • 예제 프로그램의 Print인터페이스, Print클래스가 이 역할이다.
  • 필요한 메서드를 결정
  • [ ] Client(의뢰자)역직류 12볼트로 작동하는 노트북
  • 예제의 Main클래스가 이 역할이다.
  • Target의 메서드를 사용하여 일한다.
  • [ ] Adaptee(적응 대상자)역교류 100볼트인 AC전원
  • Banner 클래스가 이 역할
  • 이미 준비된 메서드를 가지는 역할
  • [ ] Adapter(적응자)역Adaptee의 메서드를 사용해서 어떻게든 Target을 만족시키는 것이 이 패턴의 목적이다.상속과 위임을 사용한 패턴을 다이어그램으로 나타내면 아래와 같다.
  • ✅위임을 사용
  • ✅상속을 사용
  • 100볼트를 직류의 12볼트로 변환하는 어댑터에 해당
  • Apapter패턴의 주인공

🟰Adapter를 사용하는 경우

📌이미 존재하는 클래스를 이용하는 경우

해당 클래스가 충분히 테스트되어 버그가 적고 또 실제로 지금까지 사용되어온 실적이 있다면 더더욱 해당 클래스를 부품으로 사용하고 싶어진다.

📌Adapter 패턴은 기존 클래스에 한겹 덧씌워 필요한 클래스를 만든다.

이 패턴을 사용하면 필요한 메서드군을 빠르게 만들 수 있다.

📌우리는 새로운 인터페이스에 맞추려고 할 떄 기존 클래스의 소스를 만져서 수정하고 말지만 우리는 수정하게 되면 또 테스트해야 한다.

📌Adapter패턴은 기존 클래스를 전혀 수정하지 않고 목적한 인터페이스에 맞추려는 것

⭐⭐되도록 상속보다는 위임을 사용한다. 상위 클래스의 내부 동작을 자세히 모르면, 상속을 효과적으로 사용하기 어려운 경우가 많기 떄문

  • [ ] 버전 업과 호환성흔히 레거시 시스템으로 불리는 구버전을 버리면 유지 보수는 편해지지만 항상 그럴 순 없다이때 신버전은 Adaptee 역이되고, 구버전은 Target역할이 된다.하지만 Adapter패턴을 사용하기 위해서는 관련성이 필요하고 너무 동떨어진 클래스면 안된다.
  • ✅그림으로 구현한 구/신버전 Adapter패턴
  • 신버전의 클래스를 사용하여 구버전의 메서드를 구현하는 Adapter역할 클래스를 만든다.
  • Adapter 패턴은 신버전과 구버전을 공존시키고, 유지 보수까지 편하게 하도록 도와준다.
  • 소프트웨어를 버전 업 할 떄 구버전과의 호환성이 문제가 된다.

[Design Pattern]- Adapter 패턴

Adapter

📌이미 제공된 코드를 그대로 사용할 수 없을 때, 필요한 형태로 변환후 이용하는 것

📌 이미 제공된 것과 필요한 것 사이의 차이를 메우는 디자인

📌Wrapper 패턴이라고 불리기도 한다.

📌두 종류가 잇다. 클래스에 의한 Adpater패턴(상속을 사용한 패턴 📌인스턴스에 의한 Adapter패턴(위임을 사용한 패턴)

⏬만들어 볼 클래스

📌Hello라는 주어진 문자열을 다음과 같이 표시하는 프로그램 (Hello), Hello 📌Banner (이미 제공된 클래스)

  1. showWithParen(괄호로 묶는 메서드)
  2. showWithAster(*로 묶는 메서드)

📌Print인터페이스(필요한 것)

printWeak메서드(괄호로 묶는 메서드)

printStong메서드(*로 강조하는 메서드)

📌필요한 것 PrintBanner클래스 = Banner와 Print인터페이스를 충족하는 클래스만들기

🟰상속을 통한 Adapter 패턴

✅Banner(이미 만들어진 것)

package adapter_inherit;

/**
 * 미리제공되는 클래스
 * @author Sunro
 *
 */
public class Banner {
	private String string;
	
	public Banner(String string) {
		this.string = string;
	}
	
	public void showWithParen() {
		System.out.println("("+string+")");
	}
	public void showWithAster() {
		System.out.println("*"+string+"*");
	}
}

✅Print인터페이스(필요한 것)

package adapter_inherit;

public interface Print {
	void printWeak();
	void printStrong();
}

✅PrintBanner(어댑터 역할)

package adapter_inherit;

/**
 * 준비된 Banner클래스를 확장하여 showWithParen메서드와 showWithAster
 * 메서드를 상속받으며, 필요한 Print인터페이스를 구현하여 printWeak메서드와 
 * printStrong메서드를 구현합니다.
 * @author Sunro
 *
 */
public class PrintBanner extends Banner implements Print{
	public PrintBanner(String string) {
		super(string);
	}
	
	@Override
	public void printWeak() {
		showWithParen();
	}
	
	@Override
	public void printStrong() {
		showWithAster();
	}
}

✅Main에서 호출

package adapter_inherit;

/**
 * Main클래스는 어디까지나 Print인터페이스를 사용해서 프로그래밍하고 있다.
 * Banner클래스나 Banner내부의 메서드는 Main클래스의 코드에서는 완전히 숨겨져 있다.
 * PrintBanner클래스가 어떻게 구현되었는지 Main클래스는 모른다. 따라서 
 * Main클래스를 전혀 변경하지 않아도 PrintBanner클래스의 구현을 바꿀 수 있다.
 * @author Sunro
 *
 */
public class Main {
public static void main(String[] args) {
	Print p = new PrintBanner("Hello");
	p.printWeak();
	p.printStrong();
}
}

🟰 위임을 사용한 Adapter 패턴

✅Print 클래스

package adapor_mandate;

public abstract class Print {
	public abstract void printWeak();
	public abstract void printStrong();
}

✅PrintBanner클래스

package adapor_mandate;

import adapter_inherit.Banner;

public class PrintBanner extends Print{
	private Banner banner;
	
	public PrintBanner(String string) {
		this.banner = new Banner(string);
	}

	@Override
	public void printWeak() {
		banner.showWithParen();
	}

	@Override
	public void printStrong() {
		banner.showWithAster();
	}
	
	
}

✅Main 클래스

package adapor_mandate;

public class Main {
public Main() {

	PrintBanner pb = new PrintBanner("hello");
	
	pb.printStrong();
	pb.printWeak();
}
}

🟰Adapter 패턴의 등장인물

  • [ ] Target(대상)노트북을 작동시키는 직류 12볼트에 해당
  • 예제 프로그램의 Print인터페이스, Print클래스가 이 역할이다.
  • 필요한 메서드를 결정
  • [ ] Client(의뢰자)역직류 12볼트로 작동하는 노트북
  • 예제의 Main클래스가 이 역할이다.
  • Target의 메서드를 사용하여 일한다.
  • [ ] Adaptee(적응 대상자)역교류 100볼트인 AC전원
  • Banner 클래스가 이 역할
  • 이미 준비된 메서드를 가지는 역할
  • [ ] Adapter(적응자)역Adaptee의 메서드를 사용해서 어떻게든 Target을 만족시키는 것이 이 패턴의 목적이다.상속과 위임을 사용한 패턴을 다이어그램으로 나타내면 아래와 같다.
  •  
  • ✅위임을 사용
  • ✅상속을 사용
  • 100볼트를 직류의 12볼트로 변환하는 어댑터에 해당
  • Apapter패턴의 주인공

🟰Adapter를 사용하는 경우

📌이미 존재하는 클래스를 이용하는 경우

해당 클래스가 충분히 테스트되어 버그가 적고 또 실제로 지금까지 사용되어온 실적이 있다면 더더욱 해당 클래스를 부품으로 사용하고 싶어진다.

📌Adapter 패턴은 기존 클래스에 한겹 덧씌워 필요한 클래스를 만든다.

이 패턴을 사용하면 필요한 메서드군을 빠르게 만들 수 있다.

📌우리는 새로운 인터페이스에 맞추려고 할 떄 기존 클래스의 소스를 만져서 수정하고 말지만 우리는 수정하게 되면 또 테스트해야 한다.

📌Adapter패턴은 기존 클래스를 전혀 수정하지 않고 목적한 인터페이스에 맞추려는 것

⭐⭐되도록 상속보다는 위임을 사용한다. 상위 클래스의 내부 동작을 자세히 모르면, 상속을 효과적으로 사용하기 어려운 경우가 많기 떄문

  • [ ] 버전 업과 호환성흔히 레거시 시스템으로 불리는 구버전을 버리면 유지 보수는 편해지지만 항상 그럴 순 없다이때 신버전은 Adaptee 역이되고, 구버전은 Target역할이 된다.하지만 Adapter패턴을 사용하기 위해서는 관련성이 필요하고 너무 동떨어진 클래스면 안된다.
  • ✅그림으로 구현한 구/신버전 Adapter패턴
  • 신버전의 클래스를 사용하여 구버전의 메서드를 구현하는 Adapter역할 클래스를 만든다.
  • Adapter 패턴은 신버전과 구버전을 공존시키고, 유지 보수까지 편하게 하도록 도와준다.
  • 소프트웨어를 버전 업 할 떄 구버전과의 호환성이 문제가 된다.

[Design Pattern]- Adapter 패턴

Adapter

📌이미 제공된 코드를 그대로 사용할 수 없을 때, 필요한 형태로 변환후 이용하는 것

📌 이미 제공된 것과 필요한 것 사이의 차이를 메우는 디자인

📌Wrapper 패턴이라고 불리기도 한다.

📌두 종류가 잇다. 클래스에 의한 Adpater패턴(상속을 사용한 패턴 📌인스턴스에 의한 Adapter패턴(위임을 사용한 패턴)

⏬만들어 볼 클래스

📌Hello라는 주어진 문자열을 다음과 같이 표시하는 프로그램 (Hello), Hello 📌Banner (이미 제공된 클래스)

  1. showWithParen(괄호로 묶는 메서드)
  2. showWithAster(*로 묶는 메서드)

📌Print인터페이스(필요한 것)

printWeak메서드(괄호로 묶는 메서드)

printStong메서드(*로 강조하는 메서드)

📌필요한 것 PrintBanner클래스 = Banner와 Print인터페이스를 충족하는 클래스만들기

🟰상속을 통한 Adapter 패턴

✅Banner(이미 만들어진 것)

package adapter_inherit;

/**
 * 미리제공되는 클래스
 * @author Sunro
 *
 */
public class Banner {
	private String string;
	
	public Banner(String string) {
		this.string = string;
	}
	
	public void showWithParen() {
		System.out.println("("+string+")");
	}
	public void showWithAster() {
		System.out.println("*"+string+"*");
	}
}

✅Print인터페이스(필요한 것)

package adapter_inherit;

public interface Print {
	void printWeak();
	void printStrong();
}

✅PrintBanner(어댑터 역할)

package adapter_inherit;

/**
 * 준비된 Banner클래스를 확장하여 showWithParen메서드와 showWithAster
 * 메서드를 상속받으며, 필요한 Print인터페이스를 구현하여 printWeak메서드와 
 * printStrong메서드를 구현합니다.
 * @author Sunro
 *
 */
public class PrintBanner extends Banner implements Print{
	public PrintBanner(String string) {
		super(string);
	}
	
	@Override
	public void printWeak() {
		showWithParen();
	}
	
	@Override
	public void printStrong() {
		showWithAster();
	}
}

✅Main에서 호출

package adapter_inherit;

/**
 * Main클래스는 어디까지나 Print인터페이스를 사용해서 프로그래밍하고 있다.
 * Banner클래스나 Banner내부의 메서드는 Main클래스의 코드에서는 완전히 숨겨져 있다.
 * PrintBanner클래스가 어떻게 구현되었는지 Main클래스는 모른다. 따라서 
 * Main클래스를 전혀 변경하지 않아도 PrintBanner클래스의 구현을 바꿀 수 있다.
 * @author Sunro
 *
 */
public class Main {
public static void main(String[] args) {
	Print p = new PrintBanner("Hello");
	p.printWeak();
	p.printStrong();
}
}

🟰 위임을 사용한 Adapter 패턴

✅Print 클래스

package adapor_mandate;

public abstract class Print {
	public abstract void printWeak();
	public abstract void printStrong();
}

✅PrintBanner클래스

package adapor_mandate;

import adapter_inherit.Banner;

public class PrintBanner extends Print{
	private Banner banner;
	
	public PrintBanner(String string) {
		this.banner = new Banner(string);
	}

	@Override
	public void printWeak() {
		banner.showWithParen();
	}

	@Override
	public void printStrong() {
		banner.showWithAster();
	}
	
	
}

✅Main 클래스

package adapor_mandate;

public class Main {
public Main() {

	PrintBanner pb = new PrintBanner("hello");
	
	pb.printStrong();
	pb.printWeak();
}
}

🟰Adapter 패턴의 등장인물

  • [ ] Target(대상)노트북을 작동시키는 직류 12볼트에 해당
  • 예제 프로그램의 Print인터페이스, Print클래스가 이 역할이다.
  • 필요한 메서드를 결정
  • [ ] Client(의뢰자)역직류 12볼트로 작동하는 노트북
  • 예제의 Main클래스가 이 역할이다.
  • Target의 메서드를 사용하여 일한다.
  • [ ] Adaptee(적응 대상자)역교류 100볼트인 AC전원
  • Banner 클래스가 이 역할
  • 이미 준비된 메서드를 가지는 역할
  • [ ] Adapter(적응자)역Adaptee의 메서드를 사용해서 어떻게든 Target을 만족시키는 것이 이 패턴의 목적이다.상속과 위임을 사용한 패턴을 다이어그램으로 나타내면 아래와 같다.
  •  
  • ✅위임을 사용
  • ✅상속을 사용
  • 100볼트를 직류의 12볼트로 변환하는 어댑터에 해당
  • Apapter패턴의 주인공

🟰Adapter를 사용하는 경우

📌이미 존재하는 클래스를 이용하는 경우

해당 클래스가 충분히 테스트되어 버그가 적고 또 실제로 지금까지 사용되어온 실적이 있다면 더더욱 해당 클래스를 부품으로 사용하고 싶어진다.

📌Adapter 패턴은 기존 클래스에 한겹 덧씌워 필요한 클래스를 만든다.

이 패턴을 사용하면 필요한 메서드군을 빠르게 만들 수 있다.

📌우리는 새로운 인터페이스에 맞추려고 할 떄 기존 클래스의 소스를 만져서 수정하고 말지만 우리는 수정하게 되면 또 테스트해야 한다.

📌Adapter패턴은 기존 클래스를 전혀 수정하지 않고 목적한 인터페이스에 맞추려는 것

⭐⭐되도록 상속보다는 위임을 사용한다. 상위 클래스의 내부 동작을 자세히 모르면, 상속을 효과적으로 사용하기 어려운 경우가 많기 떄문

  • [ ] 버전 업과 호환성흔히 레거시 시스템으로 불리는 구버전을 버리면 유지 보수는 편해지지만 항상 그럴 순 없다이때 신버전은 Adaptee 역이되고, 구버전은 Target역할이 된다.하지만 Adapter패턴을 사용하기 위해서는 관련성이 필요하고 너무 동떨어진 클래스면 안된다.
  • ✅그림으로 구현한 구/신버전 Adapter패턴
  • 신버전의 클래스를 사용하여 구버전의 메서드를 구현하는 Adapter역할 클래스를 만든다.
  • Adapter 패턴은 신버전과 구버전을 공존시키고, 유지 보수까지 편하게 하도록 도와준다.
  • 소프트웨어를 버전 업 할 떄 구버전과의 호환성이 문제가 된다.

728x90
반응형
SMALL