인터페이스의 장점
- Java 8부터 인터페이스도 기본 메소드를 제공할 수 있습니다.
- 기존 클래스도 간단하게 새로운 인터페이스를 구현해 넣을 수 있다.
- 인터페이스는 믹스 인 정의에 이상적입니다.
- 계층 구조가 없는 프레임워크 유형을 만들 수 있습니다.
- 래퍼 클래스와 함께 사용하면 인터페이스는 기능을 향상시키는 안전하고 강력한 수단이됩니다.
- 구현이 명백한 것은, 인터페이스의 디폴트 메소드를 사용해 프로그래머의 일감을 경감할 수가 있다.
인터페이스는 통상 형태를 정의할 때에 사용해, 추상 클래스는 인터페이스의 구현을 몇개의 기본적으로 제공할 때에 사용합니다.
현재의 장에서는, 추상 클래스를 계승해 기능을 제공하는 것이 아니라, 인터페이스를 우선적으로 사용하는 것이 장점이 많다고 하는 이야기다.
추상 클래스를 상속하려면 하나의 추상 클래스만 상속할 수 있습니다.
Java에서는 다중 상속이 불가능하며,
추상 클래스 기능을 사용하기 위해 확장하려면 기존 클래스를 상속해서는 안됩니다.
또, 복수의 클래스가 같은 추상 클래스를 상속하려면, 각 클래스간의 계층이 복수가 추상 클래스의 아이가 아니고, 어느 오브젝트가 아이아래에 추상 클래스를 사용하는 다른 클래스는 그 아이.
이와 같이 추상 클래스를 사용하기에는 제약도 많아, 계층 구조가 복잡해진다.
인터페이스는, 복수의 클래스가 구현을 받더라도 모두 해당 인터페이스 오브젝트가 되어, 기존에 다른 클래스를 계승하고 있어도, 복수 구현이 가능해, 각 인터페이스의 기능을 사용할 수 있다.
기본 메소드의 경우
인터페이스에 추상 메서드가 새로 정의된 경우?
명시 적으로 메소드가 추가되었음을 알리는 것이 좋습니다.
해당 인터페이스를 구현한 모든 클래스에서 메서드를 재정의하지 않으면 컴파일 오류가 발생할 수 있습니다.
디폴트의 메소드로 변경했을 경우
더 이상 재정의해야하는 추상 메서드가 아니므로 메서드 재정의없이 컴파일 오류가 발생하지 않을뿐만 아니라 추가 된 기본 메서드 기능을 사용할 수 있도록 인터페이스가 진화? 했다.
디폴트 메소드로 구현할 수 없는 경우는, 인스턴스 필드를 사용할 필요가 있는 경우입니다만, 그 경우는 추상 클래스를 사용할 필요가 있습니다.
인터페이스는 인스턴스화할 수 없기 때문에, 인터페이스의 필드는 무조건 퍼블릭 정적 final 의 정수입니다.
디폴트 메소드는 Java 8 버젼으로부터 사용할 수 있어 이것에 의해 abstract 클래스를 사용하는 것은 현저하게 줄어들 것이다.
인터페이스에서 믹싱 사용
Mixin이란?
- 객체 지향 언어로 다른 클래스에서 “사용”할 목적으로 작성된 클래스.
- ‘포함’으로 설명됩니다.
Composition 또는 Aggregation이라고도 합니다. - 상속과 주로 비교되는 개념인 Is-a Has-a
- 코드의 재사용성을 높여 상속의 단점을 해결할 수도 있다.
- Java 코드에서는, 다중 상속의 제한이 없는 인터페이스로 구현하기 쉽다.
- 대상 타입의 주요 기능에 선택적 기능을 섞는다고 믹스 인이라고합니다.
클래스의 주요 역할이있을 때 추가 기능을 추가하는 것. 여러 구현이 가능한 인터페이스에서 사용하는 것이 좋은 방법입니다.
인터페이스는 계층이 명확하지 않은 타입 프레임워크를 작성할 수 있는 것은
어떤 것이 자식이고 어떻게 상위 계층인지 알 수없는 객체의 경우 인터페이스는 여러 인터페이스를 상속 할 수 있다는 장점이 있습니다.
가수이자 작곡가이기도 한 오브젝트를 함께 계승하여 사용할 수 있다.
래퍼 클래스와 함께 사용하면 인터페이스가 기능을 향상시키는 안전하고 강력한 수단이된다는 이점은
Item 18번으로 보았다.
상속을 받았을 경우, 부모 클래스에서 메소드의 기능이 변경되었는지 또는 구현인가에 의해서 서브 클래스의 메소드 기능에 영향을 주어, 잘 동작하는 것은 보증할 수 없다.
캡슐화가 손상되는 상황이 발생한다.
그러나 인터페이스를 활용하면
인터페이스에 새로운 기능이 추가되어도, 그 내부 구현에만 기능이 있으므로, 상속된 클래스에서는 영향을 받지 않는다.
중복 메소드가 추가되어도 상속 관계가 아니기 때문에, 인터페이스의 기능은 인터페이스의 기능내 기능은 내 기능에 영향을 받지 않는다.
인터페이스와 추상 해골 클래스
- 인터페이스와 추상 클래스의 이점을 모두 취할 수 있다.
- 인터페이스 – 디폴트 메소드의 구현
- 추상 해골 클래스 = 나머지 메서드 구현
- 템플릿 방법 패턴
- 여러 상속을 시뮬레이션할 수 있습니다.
- 스켈레톤 구현은 상속 클래스이므로 Item19를 따라야 합니다.
추상 클래스로 인터페이스를 구현하는데, 일부의 로직은 완전한 구현체를 제공해, 일부의 로직은, 완전한 구현체에 사이사이를 사이에 두는 템플릿 메소드 패턴과 같은 역할을 하는 메소드가 구현되었다 물건.
사이사이 인터럽트 메소드는 서브 클래스로 오버라이드(override) 해, 각각의 기능으로 옮겨놓을 수 있습니다만,
기본 골격의 로직은 변경할 수 없다.
인터페이스를 구현해야 하는 모든 클래스가 아무것도 지상에서 로직을 만드는 대신 추상 클래스가 제공하는 기본 골격을 갖춘 기능을 활용하면서 인터페이스를 더 쉽게 구현할 수 있습니다.
하는 역할.이것이 템플릿 메소드 패턴입니다.
List를 만들기 위해 AbstractList 추상 클래스를 사용하면 List를 만들 때 List의 모든 추상 메서드를 재정의할 필요가 없습니다.
해골 역할을 하는 추상 클래스인 AbstractList를 통해 구현하면 AbstractList 클래스를 만드는 데 필요한 메서드의 일부만 재정의할 수 있습니다.
인터페이스의 장점과 추상 클래스의 장점이 모두있었습니다.
래퍼 클래스와 유사한 시뮬레이션된 다중 상속
중첩 클래스로 사용할 클래스를 상속하면 해당 개체는 컴포지션에서 연결을 설정하고 사용할 수 있습니다.
템플릿 방법 패턴
상속을 사용한 디자인 패턴
알고리즘 구조를 서브 클래스가 확장 할 수 있도록 템플릿으로 제공하는 방법
추상 클래스는 템플릿을 제공하고 서브 클래스는 구체적인 알고리즘을 제공합니다.
템플릿 메소드 패턴은 알고리즘의 구조를 메소드에 정의해, 서브 클래스의 알고리즘 구조를 변경하지 않고 알고리즘을 오버라이드(override) 합니다.
알고리즘이 단계적으로 나누어지거나 같은 역할을 하는 메서드입니다만, 여러가지 장소에서 다른 형태로 사용이 필요한 경우에 편리하고, 상속을 통해 슈퍼 클래스의 기능을 확장하기 쉬워집니다.
변하지 않는 기능은 슈퍼 클래스에 작성해, 자주 변경해, 확장하는 기능은 서브 클래스로 작성하도록(듯이) 합니다.
템플릿 방법 패턴의 장점과 단점
장점
- 중복 코드를 줄일 수 있습니다.
- 하위 클래스의 역할을 줄이고 코어 로직을 관리하기 쉽습니다.
- 더 코드는 객체 지향적으로 구성될 수 있다.
단점
- 추상 메소드가 많아져 클래스 관리가 복잡해진다.
- 클래스 간의 관계와 코드가 뒤틀리는 걱정이 있다.
상속을 사용하지 않는 확장 가능 클래스로 만드는 템플릿 콜백 패턴
디폴트 메소드와 Object 메소드
왜 인터페이스 기본 메서드로 Object 메서드를 재정의할 수 없습니까?
디폴트 메소드가 추가된 이유는 인터페이스의 진화의 목적을 가지고 있다.
위험을 초래하는 용도가 아닙니다.
또, 복잡성을 높이기 위해서, 인터페이스로 정의된 메소드보다 클래스로 정의된 메소드가 우선 순위를 갖는다.
구체적으로 구현 된 인터페이스는 덜 구체적인 인터페이스보다 우선 순위가 높습니다.
서브 인터페이스로 오버라이드(override) 한 메소드는, 부모 인터페이스 메소드보다 우선 순위가 높은 것입니다.
인터페이스끼리의 상속이 가능합니다.
이런 식으로 내가 만든 클래스에서 메서드를 사용하는지, 내가 만든 인터페이스의 메서드를 사용할지, Object 클래스의 메서드를 사용할지 여부는 명확한 기준이 없기 때문에 혼란 스럽습니다.
인터페이스에서 Object 메소드를 정의할 수 있습니다.
그 인터페이스를 구현하면, 반드시 equals 메소드가 다르게 동작할 필요가 있습니다.
https://www.inflearn.com/course/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C-%EC%9E%90%EB%B0%94- 2/dashboard