[Design Pattern] - Adapter 패턴

2023. 9. 3. 12:10·JAVA-기초/Design Pattern
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

'JAVA-기초 > Design Pattern' 카테고리의 다른 글

전략 패턴(Strategy Pattern): 동적으로 행위를 변경하는 유연한 설계 방법  (0) 2025.03.17
[Design Pattern / Java] Template Method패턴  (1) 2024.03.28
[Design Pattern / Java] Factory Method(공장처럼 찍어내는 인터페이스)  (0) 2024.03.22
[Java] Design Pattern - Iterator ,For 반복문의 차이  (31) 2023.08.20
'JAVA-기초/Design Pattern' 카테고리의 다른 글
  • 전략 패턴(Strategy Pattern): 동적으로 행위를 변경하는 유연한 설계 방법
  • [Design Pattern / Java] Template Method패턴
  • [Design Pattern / Java] Factory Method(공장처럼 찍어내는 인터페이스)
  • [Java] Design Pattern - Iterator ,For 반복문의 차이
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325)
      • 면접 준비 (22)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      리눅스마스터2급
      CSS
      Spring Data Redis
      java
      스프링프레임워크
      HTML
      자바 면접
      백준
      JavaScript
      JSP
      리눅스
      jsp request
      자바스크립트
      Spring
      자바 알고리즘
      jsp기초
      redis
      자바 반복문
      spring redis
      레디스
      JS
      자바기초
      Springframework
      springsecurity
      프로그래머스
      리눅스마스터2급정리
      자바
      자바 면접질문
      redis 채팅
      Til
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [Design Pattern] - Adapter 패턴
    상단으로

    티스토리툴바