SMALL

어댑터 패턴은 코드를 재사용하기 위해 구조를 변경하는 패턴이다.

구조 패턴 중에 가장 간단하다.

 

이전에 만들어진 코드를 재활용하기 위해서는 대부분의 경우 변환 ( 변형 ) 작업이 필요하다.

기존 코드를 직접 수정이 불가능한 경우에는 

기존 코드를 감싸서 보정 코드를 만들어 사용한다.

즉 보정 코드를 통해 문제점을 우회가 가능하다

 

기존의 소스에서 보정된 코드가 많으면 가독성도 떨어지고 유지보수도 힘들어진다.

이러한 경우 별도의 객체를 생성하여 보정을 처리하는 것이 좋다.

이처럼 보정만을 위해 설계된 객체를 어댑터 패턴이라고 한다.

 

어댑터 패턴은 수정 불가능한 문제를 분리된 객체로 쉽게 해결할 수 있도록 도와준다.

어댑터 패턴을 설계할 때는 연관성이 없는 2개의 객체를 묶어 인터페이스를 통일화한다.

그리고 통일화된 변경 인터페이스로 기존의 코드를 재사용한다.

 

어댑터 패턴은 코드를 재사용하기 위한 인터페이스를 처리하고 인터페이스를 활용해 보정 코드를 작성한다.

( 기존의 클래스를 새로운 클래스로 감싼다 )

출처: https://jusungpark.tistory.com/22

어댑터 패턴의 종류

어댑터는 다른 객체의 구조를 내가 원하는 인터페이스 방식으로 개선한다

구조를 개선하는 방법은 클래스의 상속을 이용하는 방법

구성을 이용하는 방법 2가지이다

 

클래스 어댑터

클래스 어댑터를 사용하기 위해서는 다중 상속이 필요하다

( 자바는 단일 상속만 지원.. )

 

객체 어댑터

객체의 의존성을 이용해 문제를 해결

객체 어댑터는 내부적으로 객체를 재구성한다 -> 기존 객체는 복합 객체로 변환 

 

장점

객체를 구성으로 결합하면 느슨한 연결 방식으로 보다 많은 유연성을 확보할 수 있다

 

단점

객체를 구성으로 결합하면 어댑터는 클라이언트에서 사용하는 인터페이스 방식으로 메서드를 새로 생성해야 한다

 

기존 코드

public class Math {

	public float twoTime(float num) {
		
		return num * 2;
	}
	
	public float halfTime(float num) {
		
		return num / 2;
	}
}

float를 매개변수로 받는다

 

하지만 실 사용자 코드에서는 int를 넘겨주고 싶다

이러한 경우에 어댑터 패턴 적용해보기

 

우선 인터페이스 생성

public interface Adapter {
	public int twiceOf(int num);
	public int halfOf(int num);
}

실제 구현체

public class Objects implements Adapter{

	private Math adapter;
	
	public Objects() {
		this.adapter = new Math();
	}
	@Override
	public int twiceOf(int num) {
		int rst = (int) this.adapter.twoTime(num);
		return rst;
	}

	@Override
	public int halfOf(int num) {
		int rst = (int) this.adapter.halfTime(num);
		return rst;
	}

}

 

사용자 코드

	public static void main(String[] args) {
		Math math = new Math();
		float rst = math.twoTime(2.1f);
		float rst1 = math.twoTime(2.2f);
		System.out.println(rst);
		System.out.println(rst1);
		
		Objects obj = new Objects();
		System.out.println(obj.twiceOf(33));
		System.out.println(obj.halfOf(33));
		
	}
LIST

+ Recent posts