java
이 튜토리얼에서는 Java 인터페이스에 대해 배웁니다. 인터페이스를 구현하는 방법과 언제 사용해야 하는지 예제를 통해 자세히 알아보겠습니다.
인터페이스는 완전히 추상적인 클래스입니다. 여기에는 추상 메서드 그룹(본문 없는 메서드)이 포함됩니다.
interface
을 사용합니다. Java에서 인터페이스를 생성하는 키워드. 예를 들어,
interface Language {
public void getType();
public void getVersion();
}
여기,
getType()
및 getVersion()
.추상 클래스와 마찬가지로 인터페이스의 개체를 만들 수 없습니다.
인터페이스를 사용하려면 다른 클래스에서 인터페이스를 구현해야 합니다. implements
을 사용합니다. 인터페이스를 구현하는 키워드입니다.
interface Polygon {
void getArea(int length, int breadth);
}
// implement the Polygon interface
class Rectangle implements Polygon {
// implementation of abstract method
public void getArea(int length, int breadth) {
System.out.println("The area of the rectangle is " + (length * breadth));
}
}
class Main {
public static void main(String[] args) {
Rectangle r1 = new Rectangle();
r1.getArea(5, 6);
}
}
출력
The area of the rectangle is 30
위의 예에서 Polygon이라는 인터페이스를 만들었습니다. . 인터페이스에 추상 메서드 getArea()
가 포함되어 있습니다. .
여기서 사각형 클래스는 Polygon을 구현합니다. . 그리고 getArea()
의 구현을 제공합니다. 방법.
// create an interface
interface Language {
void getName(String name);
}
// class implements interface
class ProgrammingLanguage implements Language {
// implementation of abstract method
public void getName(String name) {
System.out.println("Programming Language: " + name);
}
}
class Main {
public static void main(String[] args) {
ProgrammingLanguage language = new ProgrammingLanguage();
language.getName("Java");
}
}
출력
Programming Language: Java
위의 예에서 Language라는 인터페이스를 만들었습니다. . 인터페이스에는 추상 메소드 getName()
이 포함됩니다. .
여기에서 ProgrammingLanguage 클래스는 인터페이스를 구현하고 메서드에 대한 구현을 제공합니다.
<시간>Java에서 클래스는 여러 인터페이스를 구현할 수도 있습니다. 예를 들어,
interface A {
// members of A
}
interface B {
// members of B
}
class C implements A, B {
// abstract members of A
// abstract members of B
}
<시간>
클래스와 유사하게 인터페이스는 다른 인터페이스를 확장할 수 있습니다. extends
키워드는 인터페이스를 확장하는 데 사용됩니다. 예를 들어,
interface Line {
// members of Line interface
}
// extending interface
interface Polygon extends Line {
// members of Polygon interface
// members of Line interface
}
여기서 다각형 인터페이스는 Line을 확장합니다. 상호 작용. 이제 클래스가 Polygon을 구현하는 경우 , 두 Line의 모든 추상 메서드에 대한 구현을 제공해야 합니다. 및 다각형 .
<시간>인터페이스는 여러 인터페이스를 확장할 수 있습니다. 예를 들어,
interface A {
...
}
interface B {
...
}
interface C extends A, B {
...
}
<시간>
인터페이스가 무엇인지 알았으니 Java에서 인터페이스가 사용되는 이유에 대해 알아보겠습니다.
getArea()
를 알고 있습니다. 폴리곤의 면적을 계산하지만 면적 계산 방식은 폴리곤마다 다릅니다. 따라서 getArea()
의 구현은 서로 독립적입니다.getArea()
을 사용했습니다. 인터페이스 Polygon 내부의 사양으로 . 이것은 모든 폴리곤의 면적을 얻을 수 있어야 한다는 규칙을 설정하는 것과 같습니다. getArea()
에 대한 구현을 제공해야 합니다. 방법.
interface Line {
…
}
interface Polygon {
…
}
class Rectangle implements Line, Polygon {
…
}
참고 :인터페이스 내부의 모든 메소드는 암시적으로 public
입니다. 모든 필드는 암시적으로 public static final
입니다. . 예를 들어,
interface Language {
// by default public static final
String type = "programming language";
// by default public
void getName();
}
<시간> Java 8이 출시되면서 이제 인터페이스 내부에 구현된 메서드를 추가할 수 있습니다. 이러한 방법을 기본 방법이라고 합니다.
인터페이스 내에서 기본 메서드를 선언하려면 default
를 사용합니다. 예어. 예를 들어,
public default void getSides() {
// body of getSides()
}
Java에 기본 메소드가 도입된 이유를 이해하는 시나리오를 살펴보겠습니다.
인터페이스에 새 메서드를 추가해야 한다고 가정해 보겠습니다.
구현 없이 인터페이스에 메서드를 쉽게 추가할 수 있습니다. 그러나 그것이 이야기의 끝이 아닙니다. 해당 인터페이스를 구현하는 모든 클래스는 메서드에 대한 구현을 제공해야 합니다.
많은 수의 클래스가 이 인터페이스를 구현하는 경우 이러한 모든 클래스를 추적하고 변경해야 합니다. 이것은 지루할 뿐만 아니라 오류가 발생하기 쉽습니다.
이를 해결하기 위해 Java는 기본 메소드를 도입했습니다. 기본 메소드는 일반 메소드처럼 상속됩니다.
기본 메소드를 더 잘 이해하기 위해 예를 들어보겠습니다.
<시간>
interface Polygon {
void getArea();
// default method
default void getSides() {
System.out.println("I can get sides of a polygon.");
}
}
// implements the interface
class Rectangle implements Polygon {
public void getArea() {
int length = 6;
int breadth = 5;
int area = length * breadth;
System.out.println("The area of the rectangle is " + area);
}
// overrides the getSides()
public void getSides() {
System.out.println("I have 4 sides.");
}
}
// implements the interface
class Square implements Polygon {
public void getArea() {
int length = 5;
int area = length * length;
System.out.println("The area of the square is " + area);
}
}
class Main {
public static void main(String[] args) {
// create an object of Rectangle
Rectangle r1 = new Rectangle();
r1.getArea();
r1.getSides();
// create an object of Square
Square s1 = new Square();
s1.getArea();
s1.getSides();
}
}
출력
The area of the rectangle is 30 I have 4 sides. The area of the square is 25 I can get sides of a polygon.
위의 예에서 Polygon이라는 인터페이스를 만들었습니다. . 기본 메소드 getSides()
이 있습니다. 및 추상 메소드 getArea()
.
여기에서 두 개의 클래스 Rectangle를 만들었습니다. 및 사각형 Polygon 구현 .
사각형 클래스는 getArea()
의 구현을 제공합니다. 메소드 및 getSides()
재정의 방법. 그러나 사각형 클래스는 getArea()
의 구현만 제공합니다. 방법.
이제 getSides()
을 호출하는 동안 Rectangle을 사용하는 메소드 개체에서 재정의된 메서드가 호출됩니다. 그러나 사각형의 경우 개체의 경우 기본 메서드가 호출됩니다.
Java 8은 또한 인터페이스 내부에 정적 메소드를 포함하는 또 다른 기능을 추가했습니다.
클래스와 유사하게 참조를 사용하여 인터페이스의 정적 메서드에 액세스할 수 있습니다. 예를 들어,
// create an interface
interface Polygon {
staticMethod(){..}
}
// access static method
Polygon.staticMethod();
참고 :Java 9 릴리스와 함께 인터페이스에서도 private 메소드가 지원됩니다.
인터페이스의 개체를 만들 수 없습니다. 따라서 개인 메서드는 인터페이스의 다른 메서드를 지원하는 도우미 메서드로 사용됩니다.
<시간>좀 더 실용적인 자바 인터페이스의 예를 보자.
// To use the sqrt function
import java.lang.Math;
interface Polygon {
void getArea();
// calculate the perimeter of a Polygon
default void getPerimeter(int... sides) {
int perimeter = 0;
for (int side: sides) {
perimeter += side;
}
System.out.println("Perimeter: " + perimeter);
}
}
class Triangle implements Polygon {
private int a, b, c;
private double s, area;
// initializing sides of a triangle
Triangle(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
s = 0;
}
// calculate the area of a triangle
public void getArea() {
s = (double) (a + b + c)/2;
area = Math.sqrt(s*(s-a)*(s-b)*(s-c));
System.out.println("Area: " + area);
}
}
class Main {
public static void main(String[] args) {
Triangle t1 = new Triangle(2, 3, 4);
// calls the method of the Triangle class
t1.getArea();
// calls the method of Polygon
t1.getPerimeter(2, 3, 4);
}
}
출력
Area: 2.9047375096555625 Perimeter: 9
위의 프로그램에서 Polygon이라는 인터페이스를 만들었습니다. . 여기에는 기본 메소드 getPerimeter()
이 포함됩니다. 및 추상 메소드 getArea()
.
모든 다각형의 둘레를 동일한 방식으로 계산할 수 있으므로 getPerimeter()
의 본문을 구현했습니다. 다각형 .
이제 Polygon을 구현하는 모든 다각형 getPerimeter()
사용 가능 둘레를 계산합니다.
그러나 면적 계산 규칙은 다각형마다 다릅니다. 따라서 getArea()
구현 없이 포함됩니다.
Polygon을 구현하는 모든 클래스 getArea()
구현을 제공해야 합니다. .
java
자바 반복자 인터페이스 이 튜토리얼에서는 예제를 통해 Java Iterator 인터페이스에 대해 알아볼 것입니다. Iterator Java 컬렉션 프레임워크의 인터페이스를 사용하면 컬렉션의 요소에 액세스할 수 있습니다. ListIterator 하위 인터페이스가 있습니다. . 모든 Java 컬렉션에는 iterator()이 포함됩니다. 방법. 이 메서드는 컬렉션 요소를 반복하는 데 사용되는 iterator의 인스턴스를 반환합니다. 반복자 메소드 Iterator 인터페이스는 컬렉션 요소에 대해 다양한 작업을 수행하는 데 사용
자바 ListIterator 인터페이스 이 튜토리얼에서는 예제를 통해 Java ListIterator 인터페이스에 대해 알아볼 것입니다. ListIterator Java 컬렉션 프레임워크의 인터페이스는 목록의 요소에 액세스하는 기능을 제공합니다. 양방향입니다. 즉, 목록의 요소를 양방향으로 반복할 수 있습니다. Iterator 확장 인터페이스. List 인터페이스는 listIterator()를 제공합니다. ListIterator 인스턴스를 반환하는 메서드 인터페이스. ListIterator의 메소드 ListItera