Loading...

JAVA / / 2022. 2. 11. 16:19

자바 55강. 어댑터 패턴, default

 

package site.metacoding.practice;

// 어댑터 패턴

interface knife {
	void attack();
	void cook();
}

class 백종원 implements knife {

}

class 검투사 implements knife {

}

public class PattenTest {

}

백종원은 요리를 하기 위해 칼이 필요하고,

검투사는 공격을 하기 위해 칼이 필요하다.

 

하지만 칼의 인터페이스에는

attack( )과 cook( )이 같이 있다.

 

백종원은 attack( ) 메서드가 필요 없지만

백종원을 위해 인터페이스를 바꿀 수 없기 때문에

어댑터 패턴이 나왔다.

package site.metacoding.practice;

// 어댑터 패턴

interface knife {
	void attack();
	void cook();
}

abstract class 요리사어댑터 implements knife {
	// 추상 메서드를 가질 수 있기 때문에 인터페이스 구현하지 않아도 가능

	@Override
	public void attack() { // attack 메서드를 구현해서 걸러내기
	} 
}

abstract class 싸움꾼어댑터 implements knife {
	@Override
	public void cook() { // cook 메서드를 구현해서 걸러내기
	} 
}

class 백종원 extends 요리사어댑터 {

	@Override
	public void cook() {

	}

}

class 검투사 extends 싸움꾼어댑터 {

	@Override
	public void attack() {

	}

}

public class PattenTest {

}

 

하지만 지금 자바에

새로 나온 default 문법 때문에

어댑터 패턴은 거의 사용하지 않는다.

 

public interface Init {
	void initObject();

	void initSetting();

	default void initListener() {
	};
}

인터페이스의 추상 메서드에

default를 붙여주면

몸체가 있는 메서드를 만들 수 있다.

 

default가 붙은 메서드는 강제성이 사라지게 된다.

 

인터페이스 Init을 구현하게 되는 클래스는

강제적으로 initObject( )와

initSetting( ) 메서드를 만들어야 하지만

 

initListener( ) 메서드는

필요할 때만 구현하면 된다.

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

 

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com