- 계층구조가 없는 프레임워크를 만들 수 있다
- 즉 자유롭다.
- default 메서드를 제공할 수 있다.
- 해당 인터페이스를 구현하는 모든 클래스에서 공통적으로 사용할만한 메서드라면...
- 그렇지만
@implSpec이용해 문서화 해야한다. 필수! Obejct에서 제공하는 메서드(equals...)등을 default로 제공해서는 안된다. (구현받는 클래스에서 어떤 것을 사용할지 모르게 되니까.. 충돌...?)
-
추상 클래스 정의한 타입을 구현하는 클래스는, 반드시 추상 클래스의 하위 클래스가 되어야 한다는 점.
-
구현한 클래스에 제약이 생긴다는 뜻.
-
기존 존재한 클래스에도 쉽게 끼어 넣을 수 있음 <-> 반면 추상 클래스는 어려움
-
클래스가 구현할 수 있는 타입.
-
믹스인을 구현한 클래스에 원래의 주된 타입 외의 특정 선택적 해위를 제공한다고 선언하는 효과를 줌.
-
즉 클래스에 ++ 해서 뭔가 더할 수 있음.
-
Comparable
-
인터페이스로 타입을 정의하고, (+ 디폴트 메서드 몇개...) --> 골격
-
골격 구현 클래스는 나머지 메서드를 모두 구현한다. --> 골격을 기반으로 확장
- 인터페이스와 추상 클래스 장점을 모두 취함..
- ex :
AbstractList...
- 다중 구현을 해야한다면 일단 추상 클래스 보다는, 인터페이스를 우선 고려하자
- 인터페이스 정의 중에, 명백하게 필요한 메서드가 있다며 디폴트 메서드로 정의하자
- 디폴트 메서드는 Object에서 정의된 equals, hashcode, toString을 정의할 순 없다.
- 인터페이스 + 추상 클래스 장점을 모두 취하기 위해서는 인터페이스 + 추상 골격 구현 클래스 이용을 생각하자
- 인터페이스로 뼈대를 만들고,
- 그걸 추상 클래스로 implement 받아서, 필요한 부분만 구현하자
- 인터페이스로는 Object에서 정의된 equals, hashcode, toString을 정의할 순 없지만, 골격 구현 클래스를 이용하면 해당 부분을 정의할 수 있다!!!

