programing

Java에서 인터페이스가 필요한 이유는 무엇입니까?

goodcopy 2021. 1. 14. 23:16
반응형

Java에서 인터페이스가 필요한 이유는 무엇입니까?


Java에서는 다중 상속을 구현하기 위해 인터페이스를 사용합니다. 인터페이스의 유일한 사용입니까? 그렇다면 Java에서 인터페이스의 주요 용도는 무엇입니까? Java에서 인터페이스가 필요한 이유는 무엇입니까?


주된 용도는 다형성 또는 여러 다른 개체에 대해 동일한 작업을 수행하는 능력이라고 말할 수 있습니다. 다른 객체가 모두 동일한 인터페이스를 구현하고 동일한 메서드를 사용하는 경우 예를 들어 이러한 모든 객체를 Vector에 저장하고 각 객체에서 해당 메서드를 호출하는 Vector를 반복 할 수 있습니다.


인터페이스가 어떻게 사용되는지에 대해서도 생각하고있었습니다. 다른 사람들에게 도움이되기를 바랍니다.

인터페이스는 클래스가 수행 할 수있는 작업에 대한 계약 (또는 프로토콜 또는 공통 이해)입니다. 클래스가 특정 인터페이스를 구현할 때 인터페이스에 선언 된 모든 추상 메서드에 구현을 제공 할 것을 약속합니다. 인터페이스는 일련의 일반적인 동작을 정의합니다. 클래스는 인터페이스를 구현하여 이러한 동작에 동의하고 동작에 대한 자체 구현을 제공합니다. 이를 통해 실제 구현 대신 인터페이스에서 프로그래밍 할 수 있습니다. 인터페이스의 주요 용도 중 하나는 두 개체 간의 통신 계약을 제공하는 것입니다. 클래스가 인터페이스를 구현한다는 것을 알고 있다면 클래스에 해당 인터페이스에서 선언 된 메서드의 구체적인 구현이 포함되어 있으며 이러한 메서드를 안전하게 호출 할 수 있습니다. 다시 말해,

둘째, Java는 다중 상속을 지원하지 않습니다 (C ++가 지원하는 반면). 다중 상속을 사용하면 둘 이상의 직접 수퍼 클래스에서 하위 클래스를 파생시킬 수 있습니다. 두 개의 직접 수퍼 클래스에 충돌하는 구현이있는 경우 문제가됩니다. (하위 클래스에서 따라야 할 것은 무엇입니까?). 그러나 다중 상속에는 그 자리가 있습니다. Java는 하나 이상의 인터페이스를 "구현"할 수 있도록 허용하여이를 수행합니다 (단 하나의 수퍼 클래스에서만 "확장"할 수 있음). 인터페이스에는 실제 구현이없는 추상 메서드 만 포함되어 있으므로 여러 인터페이스간에 충돌이 발생할 수 없습니다. (인터페이스는 상수를 보유 할 수 있지만 권장되지는 않습니다. 서브 클래스가 상수가 충돌하는 두 개의 인터페이스를 구현하는 경우 컴파일러는 컴파일 오류를 표시합니다.)

에서 : http://www.ntu.edu.sg/home/ehchua/programming/java/J3b_OOPInheritancePolymorphism.html#zz-6.6


이러한 응답 외에도 인터페이스의 가장 중요한 용도는 소프트웨어의 구성 요소 간의 결합을 줄이는 것입니다.

인터페이스는 실제 구현에 묶이지 않고 서로 대화하는 방법에 대한 클래스 간의 합의를 나타낼 수 있습니다.

이를 통해 컴파일 된 코드를 변경하지 않고도 다른 구현을 대체 할 수 있습니다 (테스트 또는 사용 사례 변경에 매우 유용함).


계층 외부에 개체를 입력 할 수 있도록 필요합니다.

예를 들어, 비교할 수있는 개체는 개체 계층 구조의 거의 모든 위치에있을 수 있습니다. 비교할 수있는 공통 조상을 가질 필요는 없습니다. Strings를 비교할 수 있고, Integers를 비교할 수 있고, 비교할 수있는 자신 Frame의를 만들 수도 있습니다 (예 : 프레임이 전경에 더 많은 경우 다른 프레임보다 "적은"-즉 다른 프레임에 오버레이되는 경우). . 따라서 비교할 수있는 것을 참조하려면 가장 일반적인 조상 (이 경우에는)을 사용하여 변수를 선언해야합니다 Object. 이것은 너무 일반적입니다. 왜냐하면 비교할 수없는 값을받을 수도 있기 때문입니다 (비교하려고 할 때 오류가 발생할 수 있습니다).

따라서, 인터페이스 Comparable: 이것은 비교 기능을 구현하는 모든 클래스 선택 걸쳐 서브 클래스 - 수퍼 계층.


일부 코드는 그것 없이는 컴파일되지 않습니다.

예를 들어 :

for (String name : list)
{
    System.out.print("\nIn foreach loop: name: " + name);
}

list를 구현해야합니다 java.lang.Iterable interface.

참조 URL : https://stackoverflow.com/questions/3528420/why-do-we-need-interfaces-in-java

반응형