개발/Java

Java] Do it 자바 프로그래밍 입문 요약 (둘째마당 - 10)

펭귀니 :) 2019. 6. 18. 13:33

10) 인터페이스란?

인터페이스란?

구현 코드가 없는 인터페이스! 인터페이스는 추상 메서드와 상수로만 이루어져 있다. 때문에 인스턴스를 생성할 수도 없다.

public interface Calc {
	double PI = 3.14;
	int ERROR = -99999999;

	int add(int num1, int num2);
    int substract(int num1, int num2);
    int times(int num1, int num2);
	int divide(int num1, int num2);
}

위 예제 코드에서 변수는 상수로 자동 변환되고, 선언한 메서드는 추상 메서드로 변환된다.

 

클래스에서 인터페이스 구현하기

인터페이스를 클래스가 사용하는 것을 implements예약어로 사용한다.

ex) public class Calculator implements Calc 

이 때, Calculator클래스는 추상 메서드 4개를 구현하거나, 추상 클래스로 만들어야 한다.

 

인터페이스의 역할

인터페이스를 구현한 클래스가 어떤 기능의 메서드를 제공하는지 명시하는 것.

인터페이스를 사용하면 다형성을 구현하여 확장성 있는 프로그램을 만들 수 있습니다.

 

인터페이스 디폴트 메서드와 정적 메서드

자바 8부터는 디폴트 메서드와 정적 메서드 기능을 제공

디폴트 메서드 : 인터페이스에서 구현 코드까지 작성한 메서드 (여러 클래스에서 사용할 메서드가 기능이 같을 경우 활용)

public interface Calc{
	....
	default void description() {
   	 ...
    }
}

디폴트 메서드를 선언할 땐 default 예약어를 사용. 최종 하위 클래스에서 재정의(Override)도 가능

정적 메서드 : 인스턴스 생성과 상관없이 사용할 수 있는 메서드

public interface Calc{
	...
    
    static int total(int[] arr){
    	...
    }
}

정적 메서드는 static 예약어를 사용. 사용시에는 인터페이스 이름으로 직접 참조하며 사용.

 

private 메서드

자바 9부터 인터페이스에 private 메서드를 구현할 수 있다. private 메서드는 인터페이스를 구현한 클래스에서 사용하거나 재정의할 수 없다. private 메서드는 코드를 구현해야하므로 추상 메서드에 private 예약어를 사용할 수는 없지만, static예약어는 함께 사용할 수 있다.

 

한 클래스가 여러 인터페이스를 구현하는 경우

public class Customer implements Buy, Sell {

다만 Buy와 Sell의 두 인터페이스에 이름이 같은 디폴트 메서드가 있으면 문제가 됨. 구현하는 클래스에서 다시 재정의 해줘야 한다. 그리고 가상 메서드 원리에 의해 재정의한 메서드가 호출된다.

 

인터페이스 상속하기

인터페이스 간에도 상속이 가능. 인터페이스 간 상속은 구현 코드를 통해 기능을 상속하는 것이 아니므로 형 상속이라고 부른다. 

public interface MyInterface extends X, Y {

상속할 때 extends 예약어를 그대로 사용한다. 

public class MyClass implements MyInterface {

위의 MyClass는 MyInterface안의 추상 클래스와 더불어 X, Y의 추상 클래스까지 구현해야 한다.