인터페이스(Java)
Interface (Java)Java 프로그래밍 언어의 인터페이스는 클래스가 구현해야 하는 동작을 설명하는 데 사용되는 추상 유형입니다.프로토콜과 유사합니다.인터페이스는 를 사용하여 선언됩니다.interface
메서드 시그니처와 상수 선언만 포함할 수 있습니다(양쪽 모두로 선언된 선언을 포함).static
그리고.final
인터페이스의 모든 메서드에 Java 8 이후의 모든 버전에서는 구현(메서드 본문)이 포함되어 있지 않습니다.Java 8부터default
그리고.static
메서드는 에 실장되어 있을 수 있습니다.interface
정의.[1]그리고 자바9에서는private
그리고.private static
메서드가 추가되었습니다.현재 Java 인터페이스에는 최대 6가지 유형이 있습니다.
인터페이스는 인스턴스화할 수 없고 오히려 구현됩니다.인터페이스를 구현하는 클래스는 인터페이스에 기술되어 있는 기본값 이외의 메서드를 모두 구현하거나 추상 클래스여야 합니다.Java 내의 오브젝트 참조는 인터페이스 타입으로 지정할 수 있습니다.각각의 경우 늘이거나 인터페이스를 구현하는 오브젝트에 바인드해야 합니다.
인터페이스를 사용하면 여러 상속을 시뮬레이션할 수 있다는 장점이 있습니다.Java의 모든 클래스에는 하나의 기본 클래스가 있어야 합니다.단, 예외는 다음과 같습니다.java.lang.Object
(Java 타입 시스템의 루트 클래스).클래스의 다중 상속은 허용되지 않습니다.단, 인터페이스는 여러 인터페이스를 상속할 수 있으며 클래스는 여러 인터페이스를 구현할 수 있습니다.
개요
인터페이스는 다양한 유형의 클래스가 공유하는 유사성을 인코딩하기 위해 사용되지만 반드시 클래스 관계를 구성하지는 않습니다.예를 들어, 인간과 앵무새는 둘 다 휘파람을 불 수 있다; 그러나, 그것을 나타내는 것은 말이 되지 않을 것이다.Human
및Parrot
의 서브클래스로서Whistler
클래스. 오히려 그들은 아마도 가장 큰 하위 클래스일 것입니다.Animal
class(중급 클래스 포함)이지만 둘 다 class를 구현합니다.Whistler
인터페이스입니다.
인터페이스의 또 다른 용도는 클래스의 유형을 몰라도 오브젝트를 사용할 수 있다는 것입니다.오브젝트가 특정 인터페이스를 실장하고 있는 것 만이 됩니다.예를 들어 휘파람 소리에 짜증이 났다면 휘파람이 휘파람을 불고 있다는 사실만 알 수 있기 때문에 사람인지 앵무새인지 모를 수도 있다.콜whistler.whistle()
구현된 메서드를 호출합니다.whistle
물건의whistler
어떤 계급이든, 그것이 구현된다면Whistler
보다 실용적인 예에서는 정렬 알고리즘은 타입의 오브젝트를 상정할 수 있습니다.Comparable
따라서 특정 유형을 몰라도 해당 유형의 오브젝트를 정렬할 수 있다는 것을 알 수 있습니다.
예를 들어 다음과 같습니다.
인터페이스 바운서블 { 이중으로 하다 파이 = 3.1415; 무효 세트바운스(); // 세미콜론을 적어 둡니다. // 인터페이스 메서드는 공개적이고 추상적이며 최종적이지 않습니다. // 프로토타입으로만 생각하십시오. 구현은 허용되지 않습니다. }
인터페이스:
- 는 메서드 헤더와 퍼블릭 상수만 선언합니다.
- 인스턴스화할 수 없습니다.
- 클래스로 구현할 수 있습니다.
- 클래스를 확장할 수 없습니다.
- 는 다른 여러 인터페이스를 확장할 수 있습니다.
사용.
인터페이스의 정의
인터페이스는 다음 구문을 사용하여 정의됩니다(Java 클래스 정의와 비교).
[visibility] interfaceName [다른 인터페이스 확장] {상수 선언 추상 메서드 선언}
예: 퍼블릭인터페이스 인터페이스 1은 인터페이스 2를 확장합니다.
인터페이스의 본문에는 추상적인 메서드가 포함되어 있습니다만, 인터페이스의 모든 메서드는 정의상 추상적이기 때문에abstract
키워드는 필수가 아닙니다.인터페이스는 일련의 노출된 동작을 지정하기 때문에 모든 메서드는 암묵적으로public
.
따라서 단순한 인터페이스는
일반의 인터페이스 프레데터 { 부울 체이스프리(먹이 p); 무효 이트프리(먹이 p); }
인터페이스의 멤버유형 선언은 암묵적으로 스태틱, 최종 및 퍼블릭이지만, 그 이외의 경우에는 임의의 타입의 클래스 또는 [2]인터페이스로 할 수 있습니다.
클래스 내 인터페이스 구현
인터페이스를 실장하기 위한 구문에서는 다음 공식을 사용합니다.
...는 InterfaceName [, 다른 인터페이스, 다른 인터페이스, ...]를 실장합니다.
클래스는 인터페이스를 구현할 수 있습니다.예를 들어 다음과 같습니다.
일반의 학급 사자 용구 프레데터 { @오버라이드 일반의 부울 체이스프리(먹이 p) { // 먹이 p를 쫓는 프로그래밍(특히 사자) } @오버라이드 일반의 무효 이트프리(먹이 p) { // 먹잇감을 먹도록 프로그래밍(사자 전용) } }
클래스가 인터페이스를 구현하고 모든 메서드를 구현하지 않을 경우 다음과 같이 마킹해야 합니다.abstract
클래스가 추상인 경우, 그 서브클래스 중 하나는 구현되지 않은 메서드를 구현할 것으로 예상되지만, 추상 클래스의 서브클래스 중 하나가 모든 인터페이스 메서드를 구현하지 않을 경우 서브클래스 자체는 다음과 같이 다시 마킹되어야 합니다.abstract
.
클래스는, 복수의 인터페이스를 실장할 수 있습니다.
일반의 학급 개구리 용구 프레데터, 먹이 { ... }
인터페이스는 공통 클래스 메서드를 공유할 수 있습니다.
학급 동물 용구 Like Food, Likes Water { 부울 좋아요() { 돌아가다 진실의; } }
단, 특정 클래스는 동일하거나 유사한 인터페이스를 여러 번 구현할 수 없습니다.
학급 동물 용구 공유< >부울>, 공유< >정수> ... // 오류: 반복 인터페이스
인터페이스는 Java 언어에서 일반적으로 콜백에 [3]사용됩니다.Java는 클래스의 다중 상속을 허용하지 않으며 인수로서의 메서드(프로시저) 전달도 허용하지 않기 때문입니다.따라서 파라미터로서의 메서드를 타깃 메서드에 전달하기 위해 현재의 관행은 파라미터 메서드의 시그니처와 주소를 타깃 메서드에 공급하는 수단으로서 인터페이스에 대한 참조를 정의하고 전달함으로써 각 가능한 콜클래스에 대응하는 타깃 메서드의 여러 변형을 정의하는 것이 아니라 타깃 메서드에 대한 참조를 전달한다.
서브 인터페이스
인터페이스는 다음과 같은 수식을 사용하여 다른 여러 인터페이스를 확장할 수 있습니다.예를들면,
일반의 인터페이스 베노무스 프레데터 확장 프레데터, 독극물 { // 인터페이스 본문 }
는 합법적이며 서브 인터페이스를 정의합니다.클래스와는 달리 다중 상속을 허용합니다. Predator
그리고.Venomous
같은 시그니처를 가진 메서드를 정의하거나 상속할 수 있습니다.kill(Prey p)
. 클래스가 구현될 때VenomousPredator
두 가지 방법을 동시에 구현합니다.
예
일반적인 Java 인터페이스는 다음과 같습니다.
Comparable
방법이 있다compareTo
2개의 오브젝트를 동등하게 나타내거나 한쪽이 다른 쪽보다 크다는 것을 나타내기 위해 사용됩니다.제네릭을 사용하면 클래스를 구현하여 클래스와 비교할 수 있는 클래스 인스턴스를 지정할 수 있습니다.Serializable
는 메서드 또는 필드가 없는 마커 인터페이스입니다.본문이 비어 있습니다.클래스를 시리얼화할 수 있음을 나타내기 위해 사용됩니다.Javadoc은 프로그래밍 방식으로 실행되는 것은 없지만 어떻게 기능해야 하는지 설명합니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Default Methods". Archived from the original on 2017-05-23. Retrieved 2014-06-30.
- ^ "The Java Language Specification".
- ^ Mitchell, John D. (June 1, 1996). "Java Tip 10: Implement callback routines in Java". JavaWorld. Retrieved 2020-07-14.