아래 글은 제가 노션에서 작성한 글을 가져온것입니다. 아래 게시물을 참고하여 게시물을 작성할 경우 댓글 부탁드려요.
Adapter
📌이미 제공된 코드를 그대로 사용할 수 없을 때, 필요한 형태로 변환후 이용하는 것
📌 이미 제공된 것과 필요한 것 사이의 차이를 메우는 디자인
📌Wrapper 패턴이라고 불리기도 한다.
📌두 종류가 잇다. 클래스에 의한 Adpater패턴(상속을 사용한 패턴 📌인스턴스에 의한 Adapter패턴(위임을 사용한 패턴)
⏬만들어 볼 클래스
📌Hello라는 주어진 문자열을 다음과 같이 표시하는 프로그램 (Hello), >>>Hello<<<
📌Banner (이미 제공된 클래스)
- showWithParen(괄호로 묶는 메서드)
- 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 (이미 제공된 클래스)
- showWithParen(괄호로 묶는 메서드)
- 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 (이미 제공된 클래스)
- showWithParen(괄호로 묶는 메서드)
- 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 (이미 제공된 클래스)
- showWithParen(괄호로 묶는 메서드)
- 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 패턴은 신버전과 구버전을 공존시키고, 유지 보수까지 편하게 하도록 도와준다.
- 소프트웨어를 버전 업 할 떄 구버전과의 호환성이 문제가 된다.
'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 |