-
Java - 인터페이스(인터페이스란?)1카테고리 없음 2023. 11. 4. 08:31
인터페이스란?
구현 코드가 없는 인터페이스
인터페이스(interface)는 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할을 한다. 인터페이스는 추상메서드와 상수로만 이루어져있다. 구현된 코드가 없기 때문에 당현히 인터페이스로 인스턴스를 생성할 수 도 없다.
인터페이스 만들기
package interfaceex; public interface Calc{ //인터페이스에서 선언한 변수는 컴파일 //과정에서 상수로 변환된다. double PI = 3.14; int ERROR = -9999999; //인터페이스에서 선언한 메서드는 컴파일 //과정에서 추상 메서드로 변환된다. int add(int num1, int num2); int substract(int num1, int num2); int times(int num1. int num2); int divide(int num, int num2); }
인터페이스에 선언한 메서드는 모두 구현 코드가 없는 추상 메서드이다. 이들 메서드는 public abstract 예약어를 명시적으로 쓰지 않아도 컴파일 과정에서 자동으로 추상메서드로 변환된다. 그리고 인터페이스에 선언한 변수는 모두 컴파일 과정에서 값이 변하지 않는 상수로 자동 변환된다. public static final 예약어를 사용하지 않아도 무조건 상수로 인식하는 것이다.
인터페이스 구현하기
package interfaceex; public class Calculator implements Calc{ ... }
Calculator 클래스에서 Calc 인터페이스를 구현한다고 했으므로 Calculator 클래스는 Calc에 존재하는 추상메서드 4개를 구현해야 한다. 추상메서드를 구현하지 않으면 Calculator클래스도 추상 클래스가 되어야 한다.
인터페이스를 추상 클래스로 구현하기
package interfaceex; public abstract class Calculator implements Calc{ //추상 클래스 @Override public int add(int num1, int num2){ return num1 + num2; } @Override public int substract(int num1, int num2){ return num1 - num2; } }
위 코드는 추상메서드 times()와 divide()를 구현하지 않았으므로 Calculator는 추상 클래스이다.
클래스를 완성한고 실행하기
package interfaceex; public class CompleteCalc extends Calculator{ @Override public int times(int num1, int num2){ return num1 * num2; } @Override public int divide(int num1, int num2){ if(num2 !=0) return num1/num2; else //num2가 0, 즉 나누는 수가 0인 경우에 대해 오류 반환 return Calc.ERROR; } //CompleteCalc에서 추가로 구현한 메서드 public void showInfo(){ System.out.println("Calc 인터페이스를 구현하였다."); } }
CompleteCalc 클래스 실행하기
package interfaceex; public class CalculatorTest{ public static void main(Stirng[] args){ int num1 = 10; int num2 = 5; CompleteCalc calc = new CompleteCalc(): System.out.println(calc.add(num1,num2)); //15 System.out.println(calc.substract(num1,num2)); //5 System.out.println(calc.times(num1,num2)); //50 System.out.println(calc.divide(num1,num2)); //2 calc.showInfo(); //Calc 인터페이스를 구현하였습니다. } }
- Calc 인터페이스 - 추상 메서드만으로 선언되었기 때문에 인스턴스를 생성할 수 없다.
- Calculator 클래스 - 추상클래스이므로 인스턴스를 생성할 수 없다.
- CompleteCalc - 인스턴스 생성가능 하다.
인터페이스 구현과 형 변환
Calc calc = new CompleteCalc();
상속 관계에서 하위 클래스는 상위 클래스 자료형으로 묵시적으로 형(type) 변환할 수 있다. 인터페이스도 마찬가지이다. CompleteCalc 클래스는 상위 클래스인 Calculator형이면서, Calc 인터페이스를 구현하였으므로 Calc형이기도 하다. 따라서 별다른 초지 없이 위 코드 처럼 Calc형으로 선언한 변수에 대입할 수 있다.
그런데 인스턴스 calc가 사용할 수 있는 메서드 목록을 살펴보면 Calc에서 선언한 추상메서드[add(), substract(), times(), divide() ] 는 있지만, CompleteCalc 클래스에서 추가로 구현한 showInfo()메서드는 없다. 즉 Calc형으로 선언한 변수에서 사용할 수 있는 메서드는 Calc 인터페이스에 선언한 메서드 뿐이다. 정리하자면, 인터페이스를 구현한 클래스가 있을때 그 클래스는 해당 인터페이스형으로 묵시적 형 변환이 이루어지면, 형 변환되었을 때 사용할 수 있는 메서드는 인터페이스에 선언한 메서드 뿐이다.
[출저 - Do it! 자바 프로그래밍 입문 , 박은종]
http://www.easyspub.co.kr/20_Menu/BookView/A001/267/PUB
http://www.easyspub.co.kr/20_Menu/BookView/A001/267/PUB
www.easyspub.co.kr