728x90
- 자바 8부터는 인터페이스도 디폴트 메서드를 제공할 수 있다.
- 기존 클래스에서도 손쉽게 새로운 인터페이스를 구현해넣을 수 있다.
- 인터페이스로는 계층구조가 없는 타입 프레임워크를 만들 수 있다.
- Singer, Songwiter 의 인터페이스가 있을시 이 두가지를 받은 SingerSongwriter 를 다중 상속 받아 새로운 인터페이스를 만들 수 있다.
- 디폴드 메서드를 제공해 프로그래머들의 일감을 덜어줄 수 있다. 이럴경우 item19 처럼 @impleSpec 자바독 태그를 붙여 문서화를 하자.
- 인터페이스와 추상 골격 구현 클래스를 함께 제공하는 식으로 인터페이스와, 추상 클래스의 장점을 모두 취하는 방법도 있다.
- 인퍼페이스의 강제 구현 요구와 추상 클래스의 기본 구현 제공을 동시에 제공할 수 있기 때문이다.
interface Router {
void connect();
void disconnect();
}
public abstract class AbstrackRouter implements Router {
@Override
public void connect() {
System.out.println("connect...");
}
@Override
public void disconnect() {
System.out.println("disconnect...");
}
public void abstractConnect() {
System.out.println("abstractConnect");
}
}
class WifiRouter extends AbstrackRouter {
@Override
public void connect() {
super.connect();
System.out.println("wifi connect...");
}
}
class EthernetRouter extends AbstrackRouter {
// EthernetRouter 특정 구현 추가...
}
약간 이런느낌아닐까..
- 템플릿 메서드 패턴
- 알고리즘을 정의하는 추상 클래스와 그 알고리즘을 구체적인 구현을 제공하는 하위 ㅡㄹ래스를 통해, 코드의 재사용성을 높이는 패턴이다.
- 아래는 짧은 코드.
abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
private void start() {
System.out.println("Common Beginnings");
}
public final void play() {
start();
initialize();
startPlay();
endPlay();
}
public static void main(String[] args) {
/* Common Beginnings
Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!*/
Football football = new Football();
football.play();
}
}
class Football extends Game {
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
@Override
void initialize() {
System.out.println("Football Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Football Game Started. Enjoy the game!");
}
}
728x90
'공부 > 이펙티브자바' 카테고리의 다른 글
[이펙티브자바]item 22.인터페이스는 타입을 정의하는 용도로만 사용하라. (0) | 2023.02.06 |
---|---|
[이펙티브자바]item 21.인터페이스는 구현하는 쪽을 생각해 설계하라. (0) | 2023.02.06 |
[이펙티브자바]item 19.상속을 고려해 설계하고 문서화하라.그러지 않았다면 상속을 금지하라. (0) | 2023.02.03 |
[이펙티브자바]item 18.상속보다는 컴포지션을 사용하라. (0) | 2023.02.02 |
[이펙티브자바]item 17.변경 가능성을 최소화하라 (0) | 2023.01.31 |
댓글