일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- LV.02
- LV03
- Java
- 디자인 패턴
- GIT
- LV1
- LV01
- CoffiesVol.02
- docker
- 일정관리 프로젝트
- S3
- 코테
- 포트폴리오
- spring boot
- JPA
- 일정관리프로젝트
- Lv.0
- mysql
- 데이터 베이스
- 이것이 자바다
- Redis
- CI/CD
- 알고리즘
- Kafka
- LV02
- 연습문제
- LV0
- SQL
- Join
- 프로그래머스
- Today
- Total
코드 저장소.
[디자인 패턴] 어뎁터 패턴 본문
목차
1.어뎁터 패턴?
2.어뎁터 패턴의 장단점
3.어뎁터 패턴 구현
1.어뎁터 패턴?
어댑터 패턴(Adapter Pattern)은 소프트웨어 디자인 패턴 중 하나로, 호환되지 않는 인터페이스를 가진 클래스들을 함께 동작하게 만들어주는 구조적 패턴입니다. 이 패턴은 기존 클래스를 수정하지 않고도 다른 인터페이스와 호환되도록 중간에 어댑터 클래스를 삽입하여 기존 코드의 재사용성을 높여줍니다.
2.어뎁터 패턴의 장단점
장점
호환성 : 서로 다른 인터페이스를 가진 두 객체를 통합할 수 있다. 기존 코드나 라이브러리를 수정하지 않고도 새로운 코드를 통합할 수 있습니다.
재사용성 : 기존의 클래스나 라이브러리를 활용하여 새로운 기능을 구현할 수 있게 해 준다. 기존 코드를 재사용하면서도 새로운 요구 사항을 충족시킬 수 있습니다.
유지보수성 : 변경된 요구 사항에 대응하기 위해 기존 코드를 수정할 필요가 없으므로 유지보수가 더 쉬워집니다.
느슨한 결합 : 어댑터가 두 객체 간의 상호작용을 조정하므로 두 객체 간의 결합도가 낮아집니다.
단점
성능 저하 : 중간에 어댑터를 추가하여 작업하기 때문에 약간의 성능 저하가 발생할 수 있다. 그러나 대부분의 상황에서 성능 저하는 미미하며, 코드의 가독성과 확장성을 개선하는 데 중점을 둬야 합니다.
복잡성 : 코드가 추가되기 때문에 코드의 복잡성이 증가할 수 있다. 따라서 단순한 상황에서는 어댑터 패턴을 사용하지 않는 것이 더 나을 수 있습니다.
3.어뎁터 패턴의 구현
어댑터 패턴의 경우에는 간단한 구현을 통해서 설명을 해드리겠습니다.
시나리오는 Adaptee클래스에서 Adapter클래스로 전환을 하는 시나리오입니다.
Target: 어플리케이션에 적용이 되는 인터페이스
Adaptee: Adapter로 전환되기 전의 대상이 되는 클래스
Adapter: Adaptee를 Target인터페이스를 사용해서 전환하는 클래스
public interface Target {
void request();
}
public class Adaptee {
public void specificRequest() {
System.out.println("Adaptee's specific request");
}
}
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
}
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter(adaptee);
target.request(); // Output: Adaptee's specific request
}
}
위의 코드를 설명하면 다음과 같습니다.
1. 클라이언트는 Target 인터페이스에 메서드를 작성합니다.
2. 기존의 비호환인 Adaptee클래스에 있는 메서드와 Taget인터페이스는 다르므로 Adapter에 있는 클래스를 작성합니다.
3. Adpater 클래스에 Target인터페이스를 상속을 받아 메서드를 오버라이딩한 후 메서드를 재작성을 합니다.
4.마지막으로 메인메서드에서 다형성을 활용해서 Target인터페이스에 있는 request()메서드를 실행을 하면 Adaptee클래스에서 작성한 메서드의 내용이 출력이 됩니다.
이렇게 하면 Target 인터페이스를 통해 Adaptee의 기능을 사용할 수 있습니다.
'ComputerScience > 디자인 패턴' 카테고리의 다른 글
[디자인 패턴] 데코레이트 패턴 (0) | 2024.06.05 |
---|---|
[디자인 패턴] 브릿지 패턴 (0) | 2024.06.03 |
[디자인 패턴] 프록시 패턴 (0) | 2024.05.21 |
[디자인 패턴] 싱글톤 패턴 (0) | 2024.05.16 |
디자인 패턴 (0) | 2024.05.12 |