티스토리 뷰

▶자바 어댑터(Adapter) 패턴

 

🔎 Adapter 패턴이 무엇인지, 왜 사용하는지


우리가 인터페이스(interface)를 공부할 때 이 인터페이스를 자식 클래스에 implements 하게 되면

인터페이스에 선언한 추상 클래스 모두를 무조건 구현해야만 했습니다.

 

하지만, 필요한 메소드만 재정의 하고 싶을 수 있습니다....

 

인터페이스를 직접 지정하지 않고 다른 클래스를 거쳐 일부는 강제성을 없애고

다시 그 클래스를 상속받는다면 골라서 재정의할 수 있게 될 것입니다.

 

이때 중간에서 강제성을 없애주는 클래스를 추상 클래스로 선언하기도 하며,

추상 클래스 이름 뒤에는 Adapter를 붙여서 목적을 알려줍니다.

 

→ 중간에서 강제성을 없애주는 추상 클래스

 

📌 예제 코드

상황은 이러합니다..

Animal이라는 interface를 만들어서 이 인터페이스를 상속받는 클래스들이 반드시 구현해야 할 메소드들을 적어둘겁니다.

그런데 특정 클래스에서는 인터페이스에 있는 추상 메소드에서 재정의하고 싶지 않은 메소드가 있습니다.

 

📄 Animal.java (interface)

package interfaceTest;

public interface Animal {
    public abstract void sitDown();
    public abstract void getHands();
    public abstract waitNow();
}

📄 Dog.java

Dog 클래스에서는 원래 의도대로 인터페이스의 모든 추상메소드를 오버라이딩 했습니다.

package interfaceTest;

public class Dog implements Animal {

	@Override
	public void sitDown() {
		System.out.println("앉는다.");
	}

	@Override
	public void getHands() {
		System.out.println("손을 준다.");
	}

	@Override
	public void waitNow() {
		System.out.println("기다린다.");
	}
}

이제 Cat 클래스를 만드려고 합니다. 그런데 저는 여기서 showHands() 메소드만 재정의하고 싶을 때

갑자기 Dog 클래스 처럼 다 적고 필요없는 메소드를 그냥 지워버리면 에러가 발생합니다.

오버라이딩 하라고 말이죠.

 

이럴 때 바로 Adapter 패턴을 사용하는 것인데요.

즉 Adapter에서는 추상 메소드를 형식상 구현했음을 명시하여 강제성을 소멸시킵니다.

 

이때 반드시 인터페이스와 동일한 이름 + Adapter를 붙여줍시다.

 

📄 AnimalAdapter.java

아래와 같이 형식상 구현부를 작성하는 것입니다.

중괄호({}) 안에 세미콜론(;)을 작성하여 의도하여 빈칸으로 작성했음을 명시해줍니다.

 

즉, 무조건 반드시 재정의해야 하는 메소드를 빼고 여기서 재정의를 해줌으로써 강제성을 소멸시키는 것입니다.

package interfaceTest;

public abstract class AnimalAdapter implements Animal {

	// Adapter에는 결국에 무조건 구현해야 할 메소드는 빼고 구현해둠
	@Override
	public void sitDown() {;}

	@Override
	public void touchNose() {;}

}

이제는 의도대로 Cat 클래스를 만들 수가 있게 되는 것인데요.

따라서 Animal 인터페이스를 상속받는 것이 아니라 AnimalAdapter를 상속받아야 합니다.

 

📄 Cat.java

package interfaceTest;

public class Cat implements Animal{

	@Override
	public void showHands() {
		System.out.println("손은 준다. 가끔");
	}
}

 

728x90
LIST
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함