1. 개요
이 예제에서는 Java의 인터페이스에 대해 이야기할 것입니다. 또한 Java가 이를 사용하여 다형성 및 다중 상속을 구현하는 방법도 살펴보겠습니다.
2. Java에서 인터페이스란 무엇입니까?
Java에서 인터페이스는 메소드와 상수 변수의 모음을 포함하는 추상 유형입니다. Java의 핵심 개념 중 하나이며 추상화, 다형성 및 다중 상속 을 달성하는 데 사용됩니다 .
Java 인터페이스의 간단한 예를 살펴보겠습니다.
public interface Electronic {
// Constant variable
String LED = "LED";
// Abstract method
int getElectricityUse();
// Static method
static boolean isEnergyEfficient(String electtronicType) {
if (electtronicType.equals(LED)) {
return true;
}
return false;
}
//Default method
default void printDescription() {
System.out.println("Electronic Description");
}
}
implements 키워드 를 사용하여 Java 클래스에서 인터페이스를 구현할 수 있습니다 .
다음으로 방금 만든 전자 인터페이스를 구현하는 Computer 클래스 도 만들어 보겠습니다.
public class Computer implements Electronic {
@Override
public int getElectricityUse() {
return 1000;
}
}
2.1. 인터페이스 생성 규칙
인터페이스에서 다음을 사용할 수 있습니다.
또한 다음 사항을 기억해야 합니다.
- 인터페이스를 직접 인스턴스화할 수 없습니다.
- 인터페이스는 메서드나 변수가 없는 비어 있을 수 있습니다.
- 인터페이스 정의에서 마지막 단어를 사용할 수 없습니다 . 컴파일러 오류가 발생하기 때문입니다.
- 모든 인터페이스 선언에는 공용 또는 기본 액세스 수정자가 있어야 합니다. 추상 수정 자는 컴파일러에 의해 자동으로 추가됩니다.
- 인터페이스 메서드는 보호 할 수 없거나 최종적 일 수 없습니다.
- Java 9까지 인터페이스 메소드는 private 일 수 없었습니다 . 그러나 Java 9는 인터페이스에서 개인 메소드 를 정의할 수 있는 가능성을 도입했습니다.
- 인터페이스 변수는 정의에 따라 public , static 및 final 입니다. 우리는 그들의 가시성을 변경할 수 없습니다
3. 그것을 사용하여 무엇을 얻을 수 있습니까?
3.1. 행동 기능
관련 없는 클래스에서 사용할 수 있는 특정 동작 기능을 추가하기 위해 인터페이스를 사용합니다. 예를 들어, Comparable , Comparator 및 Cloneable 은 관련 없는 클래스에서 구현할 수 있는 Java 인터페이스입니다. 다음은 Employee 클래스 의 두 인스턴스를 비교하는 데 사용되는 Comparator 인터페이스 의 예입니다.
public class Employee {
private double salary;
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
public class EmployeeSalaryComparator implements Comparator<Employee> {
@Override
public int compare(Employee employeeA, Employee employeeB) {
if (employeeA.getSalary() < employeeB.getSalary()) {
return -1;
} else if (employeeA.getSalary() > employeeB.getSalary()) {
return 1;
} else {
return 0;
}
}
}
자세한 내용 은 Java 의 Comparator 및 Comparable 에 대한 사용방법(예제)를 참조하세요.
3.2. 다중 상속
Java 클래스는 단일 상속을 지원합니다. 그러나 인터페이스를 사용하여 다중 상속을 구현할 수도 있습니다.
예를 들어, 아래 예제에서 Car 클래스 가 Fly 및 Transform 인터페이스 를 구현 한다는 것을 알 수 있습니다. 이렇게 하면 fly 및 transform 메서드를 상속합니다 .
public interface Transform {
void transform();
}
public interface Fly {
void fly();
}
public class Car implements Fly, Transform {
@Override
public void fly() {
System.out.println("I can Fly!!");
}
@Override
public void transform() {
System.out.println("I can Transform!!");
}
}
3.3. 다형성
다형성 이란 무엇 인가? 런타임 동안 개체가 다른 형식을 취할 수 있는 기능입니다. 더 구체적으로 말하면 런타임에 특정 개체 유형과 관련된 재정의 메서드를 실행하는 것입니다.
Java에서는 인터페이스를 사용하여 다형성을 구현할 수 있습니다. 예를 들어, Shape 인터페이스는 다양한 형태를 취할 수 있습니다. Circle 또는 Square일 수 있습니다.
먼저 Shape 인터페이스 를 정의해 보겠습니다 .
public interface Shape {
String name();
}
이제 Circle 클래스도 만들어 보겠습니다.
public class Circle implements Shape {
@Override
public String name() {
return "Circle";
}
}
또한 Square 클래스:
public class Square implements Shape {
@Override
public String name() {
return "Square";
}
}
마지막으로 Shape 인터페이스와 그 구현 을 사용하여 다형성이 작동하는 것을 볼 시간 입니다. 일부 Shape 개체를 인스턴스화 하고 List 에 추가하고 마지막으로 루프에서 이름을 인쇄해 보겠습니다.
List<Shape> shapes = new ArrayList<>();
Shape circleShape = new Circle();
Shape squareShape = new Square();
shapes.add(circleShape);
shapes.add(squareShape);
for (Shape shape : shapes) {
System.out.println(shape.name());
}
4. 인터페이스의 기본 메소드
Java 7 이하의 기존 인터페이스는 이전 버전과의 호환성을 제공하지 않습니다.
이것이 의미하는 바는 Java 7 또는 이전 버전으로 작성된 레거시 코드가 있고 기존 인터페이스에 추상 메서드를 추가하기로 결정한 경우 해당 인터페이스를 구현하는 모든 클래스가 새 추상 메서드를 재정의해야 한다는 의미 입니다. 그렇지 않으면 코드가 깨집니다.
Java 8 은 선택 사항이며 인터페이스 수준에서 구현할 수 있는 기본 메서드를 도입하여 이 문제를 해결했습니다 .
5. 인터페이스 상속 규칙
인터페이스를 통해 다중 상속을 달성하려면 몇 가지 규칙을 기억해야 합니다. 이에 대해 자세히 살펴보겠습니다.
5.1. 다른 인터페이스를 확장하는 인터페이스
인터페이스가 다른 인터페이스를 확장 하면 해당 인터페이스의 모든 추상 메서드를 상속합니다. HasColor 및 Shape 의 두 인터페이스를 만드는 것으로 시작하겠습니다 .
public interface HasColor {
String getColor();
}
public interface Box extends HasColor {
int getHeight()
}
위의 예에서 Box 는 extends 키워드를 사용하여 HasColor 에서 상속 합니다. 그렇게 함으로써 Box 인터페이스는 getColor 를 상속받습니다 . 결과적으로 Box 인터페이스에는 getColor 및 getHeight 의 두 가지 메서드가 있습니다.
5.2. 인터페이스를 구현하는 추상 클래스
추상 클래스는 인터페이스를 구현할 때 모든 추상 및 기본 메서드를 상속합니다. Transform 인터페이스와 이를 구현하는 추상 클래스 Vehicle 을 살펴보겠습니다 .
public interface Transform {
void transform();
default void printSpecs(){
System.out.println("Transform Specification");
}
}
public abstract class Vehicle implements Transform {}
이 예제에서 Vehicle 클래스는 추상 변환 메서드와 기본 printSpecs 메서드의 두 가지 메서드를 상속합니다.
6. 기능적 인터페이스
Java는 초기부터 Comparable (Java 1.2 이후) 및 Runnable (Java 1.0 이후)과 같은 많은 기능적 인터페이스를 가지고 있습니다.
Java 8은 Predicate , Consumer 및 Function 과 같은 새로운 기능 인터페이스를 도입 했습니다. 이에 대한 자세한 내용은 Java 8의 기능적 인터페이스에 대한 사용방법(예제)를 참조하십시오 .
7. 결론
이 예제에서는 Java 인터페이스에 대한 개요를 제공하고 이를 사용하여 다형성 및 다중 상속을 달성하는 방법에 대해 이야기했습니다.
항상 그렇듯이 전체 코드 샘플은 GitHub에서 사용할 수 있습니다.