티스토리 뷰

인터페이스의 장점

- 자바 8부터 인터페이스도 디폴트 메서드를 제공할 수 있다

- 기존 클래스도 손쉽게 새로운 인터페이스를 구현해 넣을 수 있다

- 인터페이스는 믹스인(mixin) 정의에 안성맞춤이다

  - ex) Comparable, AutoCloseable, ...

- 계층 구조가 없는 타입 프레임워크를 만들 수 있다

  - ex) Singer, SongWriter 인터페이스를 상속받은 SingerSongWriter 인터페이스

- 래퍼 클래스와 함께 사용하면 인터페이스는 기능을 향상시키는 안전하고 강력한 수단이 된다 (아이템 18)

- 구현이 명백한 것은 인터페이스의 디폴트 메서드를 사용해 프로그래머의 일감을 덜어 줄 수 있다

 

인터페이스와 추상 골격(skeleton) 클래스

- 인터페이스와 추상 클래스의 장점을 모두 취할 수 있다

  - 인터페이스 : 디폴트 메서드 구현

  - 추상 골격 클래스 : 나머지 메서드 구현

  - 템플릿 메서드 패턴

  - AbstractCollection, AbstractList, AbstractMap, ...

- 다중 상속을 시뮬레이트 할 수 있다

public class MyCat extends AbstractCat implements Flyable {

	private MyFlyable myFlyable = new MyFlyable();

	@Override
	protected String sound() {
		return "인싸 고양이 두 마리가 나가신다!";
	}

	@Override
	protected String name() {
		return "유미";
	}

	public static void main(String[] args) {
		MyCat myCat = new MyCat();
		System.out.println(myCat.sound());
		System.out.println(myCat.name());
		myCat.fly();
	}

	@Override
	public void fly() {
		this.myFlyable.fly();
	}

	private static class MyFlyable extends AbstractFlyable { }
}

- 골격 구현은 상속용 클래스이기 때문에 아이템 19를 따라야 한다

  - 문서화(아이템 19 @implSpec 태그) 필요

 

템플릿 메서드 패턴

- 추상 클래스는 템플릿을 제공하고 하위 클래스는 구체적인 알고리즘을 제공한다

- 템플릿 콜백 패턴 : 상속을 사용하지 않고 확장 가능한 클래스로 만들 수 있음

 

디폴트 메서드로 Object 메서드를 재정의 할 수 없는 이유

- 디폴트 메서드 핵심 목적은 "인터페이스의 진화"

- 두 가지 규칙만 유지한다

  - “클래스가 인터페이스를 이긴다”

  - “더 구체적인 인터페이스가 이긴다”

- 토이 예제에나 어울리는 기능이다. 실용적이지 않다.

- 불안정하다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/07   »
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
글 보관함