logo

Java의 인터페이스

  1. 상호 작용
  2. 인터페이스의 예
  3. 인터페이스에 의한 다중 상속
  4. 클래스의 경우 다중 상속이 지원되지 않지만 인터페이스에서는 다중 상속이 지원되는 이유
  5. 마커 인터페이스
  6. 중첩된 인터페이스

자바의 인터페이스 수업의 청사진입니다. 정적 상수와 추상 메서드가 있습니다.

Java의 인터페이스는 달성하기 위한 메커니즘 추출 . Java 인터페이스에는 메소드 본문이 아닌 추상 메소드만 있을 수 있습니다. 추상화와 다중화를 달성하는 데 사용됩니다. 자바의 상속 .

루프 1~10에 대한 bash

즉, 인터페이스는 추상 메서드와 변수를 가질 수 있다고 말할 수 있습니다. 메소드 본문을 가질 수 없습니다.

자바 인터페이스도 IS-A 관계를 나타냅니다. .

추상 클래스처럼 인스턴스화할 수 없습니다.

Java 8부터 우리는 기본 및 정적 방법 인터페이스에서.

Java 9부터 우리는 개인 메소드 인터페이스에서.

Java 인터페이스를 사용하는 이유는 무엇입니까?

인터페이스를 사용하는 이유는 크게 세 가지입니다. 아래에 나와 있습니다.

  • 추상화를 달성하는 데 사용됩니다.
  • 인터페이스를 통해 다중 상속 기능을 지원할 수 있습니다.
  • 느슨한 결합을 달성하는 데 사용할 수 있습니다.
Java 인터페이스를 사용하는 이유

인터페이스를 선언하는 방법은 무엇입니까?

인터페이스는 인터페이스 키워드를 사용하여 선언됩니다. 완전한 추상화를 제공합니다. 인터페이스의 모든 메소드가 빈 본문으로 선언되고 모든 필드가 기본적으로 public, static 및 final임을 의미합니다. 인터페이스를 구현하는 클래스는 인터페이스에 선언된 모든 메서드를 구현해야 합니다.

통사론:

 interface { // declare constant fields // declare methods that abstract // by default. } 

Java 8 인터페이스 개선

부터 자바 8 , 인터페이스는 나중에 논의되는 기본 및 정적 메소드를 가질 수 있습니다.

컴파일러에 의한 내부 추가

Java 컴파일러는 인터페이스 메소드 앞에 공개 및 추상 키워드를 추가합니다. 또한 데이터 멤버 앞에 공개, 정적 및 최종 키워드를 추가합니다.

즉, 인터페이스 필드는 기본적으로 public, static 및 final이고, 메서드는 public 및 abstract입니다.

자바의 인터페이스

클래스와 인터페이스의 관계

아래 그림에서 볼 수 있듯이 클래스는 다른 클래스를 확장하고 인터페이스는 다른 인터페이스를 확장하지만 클래스는 인터페이스를 구현합니다. .

시스템 소프트웨어
클래스와 인터페이스의 관계

Java 인터페이스 예

이 예제에서 Printable 인터페이스에는 메서드가 하나만 있으며 해당 구현은 A6 클래스에서 제공됩니다.

 interface printable{ void print(); } class A6 implements printable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ A6 obj = new A6(); obj.print(); } } 
지금 테스트해보세요

산출:

 Hello 

Java 인터페이스 예: Drawable

이 예에서 Drawable 인터페이스에는 메서드가 하나만 있습니다. 구현은 Rectangle 및 Circle 클래스에 의해 제공됩니다. 실제 시나리오에서 인터페이스는 다른 사람이 정의하지만 해당 구현은 다른 구현 공급자가 제공합니다. 게다가 다른 사람이 사용하고 있습니다. 구현 부분은 인터페이스를 사용하는 사용자에게 숨겨집니다.

파일: TestInterface1.java

 //Interface declaration: by first user interface Drawable{ void draw(); } //Implementation: by second user class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class Circle implements Drawable{ public void draw(){System.out.println('drawing circle');} } //Using interface: by third user class TestInterface1{ public static void main(String args[]){ Drawable d=new Circle();//In real scenario, object is provided by method e.g. getDrawable() d.draw(); }} 
지금 테스트해보세요

산출:

 drawing circle 

Java 인터페이스 예: 은행

Bank 인터페이스 구현을 제공하는 Java 인터페이스의 또 다른 예를 살펴보겠습니다.

파일: TestInterface2.java

 interface Bank{ float rateOfInterest(); } class SBI implements Bank{ public float rateOfInterest(){return 9.15f;} } class PNB implements Bank{ public float rateOfInterest(){return 9.7f;} } class TestInterface2{ public static void main(String[] args){ Bank b=new SBI(); System.out.println('ROI: '+b.rateOfInterest()); }} 
지금 테스트해보세요

산출:

 ROI: 9.15 

인터페이스에 의한 Java의 다중 상속

클래스가 여러 인터페이스를 구현하거나 인터페이스가 여러 인터페이스를 확장하는 경우 이를 다중 상속이라고 합니다.

산술 논리 장치
자바의 다중 상속
 interface Printable{ void print(); } interface Showable{ void show(); } class A7 implements Printable,Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ A7 obj = new A7(); obj.print(); obj.show(); } } 
지금 테스트해보세요
 Output:Hello Welcome 

Q) Java에서는 클래스를 통한 다중 상속이 지원되지 않지만, 인터페이스를 통해서는 가능합니다. 왜 그런가요?

상속 장에서 설명했듯이 다중 상속은 다음과 같은 경우에는 지원되지 않습니다. 수업 모호함 때문입니다. 하지만 인터페이스의 경우에는 모호성이 없기 때문에 지원됩니다. 구현 클래스에서 구현을 제공하기 때문입니다. 예를 들어:

 interface Printable{ void print(); } interface Showable{ void print(); } class TestInterface3 implements Printable, Showable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ TestInterface3 obj = new TestInterface3(); obj.print(); } } 
지금 테스트해보세요

산출:

 Hello 

위의 예에서 볼 수 있듯이 Printable과 Showable 인터페이스는 동일한 메소드를 가지고 있지만 TestTnterface1 클래스에서 구현을 제공하므로 모호성은 없습니다.


인터페이스 상속

클래스는 인터페이스를 구현하지만 하나의 인터페이스는 다른 인터페이스를 확장합니다.

 interface Printable{ void print(); } interface Showable extends Printable{ void show(); } class TestInterface4 implements Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ TestInterface4 obj = new TestInterface4(); obj.print(); obj.show(); } } 
지금 테스트해보세요

산출:

 Hello Welcome 

인터페이스의 Java 8 기본 메소드

Java 8부터 인터페이스에 메소드 본문을 가질 수 있습니다. 하지만 우리는 그것을 기본 메소드로 만들어야 합니다. 예를 살펴보겠습니다:

파일: TestInterfaceDefault.java

 interface Drawable{ void draw(); default void msg(){System.out.println('default method');} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceDefault{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); d.msg(); }} 
지금 테스트해보세요

산출:

 drawing rectangle default method 

인터페이스의 Java 8 정적 메소드

Java 8부터 인터페이스에 정적 메소드를 가질 수 있습니다. 예를 살펴보겠습니다:

파일: TestInterfaceStatic.java

Java 객체를 json으로
 interface Drawable{ void draw(); static int cube(int x){return x*x*x;} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceStatic{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); System.out.println(Drawable.cube(3)); }} 
지금 테스트해보세요

산출:

 drawing rectangle 27 

Q) 마커 또는 태그 인터페이스란 무엇입니까?

멤버가 없는 인터페이스를 마커 또는 태그가 지정된 인터페이스라고 합니다. 예를 들어 다음과 같습니다. 직렬화 가능 , Cloneable, Remote 등 JVM이 유용한 작업을 수행할 수 있도록 JVM에 몇 가지 필수 정보를 제공하는 데 사용됩니다.

 //How Serializable interface is written? public interface Serializable{ } 

Java의 중첩 인터페이스

참고: 인터페이스에는 중첩된 인터페이스라고 하는 또 다른 인터페이스가 있을 수 있습니다. 우리는 그것을 자세히 배울 것입니다. 중첩 클래스 장. 예를 들어:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
중첩 인터페이스에 대한 추가 정보