프로그래밍/Java

인터페이스

파니동 2019. 12. 7. 11:20

인터페이스란 ?

인터페이스는 추상클래스와 마찬가지로, 하위클래스에서 기능구현을 강제하도록 하는 클래스이다. 추상클래스의 확장형이라고 생각할 수 있다. 추상메서드만 존재할 수 있다.

  1. 인터페이스 클래스 선언 - Calc.java

    package interfaceex;
    
    public interface Calc {
      double PI = 3.14; // 컴파일 과정에서 상수가 됨.
      int ERROR = -999999999; // 컴파일 과정에서 상수가 됨.
    
      int add(int num1, int num2);
      int substract(int num1, int num2);
      int times(int num1, int num2);
      int divide(int num1, int num2);
      int square(int num);
    
    }

    -클래스를 인터페이스로 선언하였다. 인터페이스로 선언한 클래스의 멤버변수는 컴파일 과정에서 상수값으로 변경되고, 메서드 또한 컴파일과정에서 추상메서드로 바뀌게 된다.

  2. 인터페이스 클래스의 구현 - Calculator.java

    package interfaceex;
    
    public abstract class Calculator implements Calc{
    
       @Override
       public int add(int num1, int num2) {
           // TODO Auto-generated method stub
           return num1 + num2;
       }
    
       @Override
       public int substract(int num1, int num2) {
           // TODO Auto-generated method stub
           return num1 - num2;
       }
    }

    -인터페이스 클래스의 일부를 구현하였다. 일부만 구현이 가능한 이유는 Calculator 가 추상클래스이기 때문이다. 누군가는 Calc 의 기능(메서드)를 구현할 것이다.

  3. 기능구현의 완전체 - CompleteCalc.java

    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 
               return Calc.ERROR;
    
       }
    
       public void showInfo() {
           System.out.println("Calc 인터페이스를 구현하였습니다.");
       }
    
       @Override
       public int square(int num) {
           return num * 2;
       }    
    
    }

    -추상클래스인 Calculator를 상속받아 Calc에 있는 나머지 메서드들을 구현했다.

  1. 테스트하기.

    package interfaceex;
    
    public class CalculatorTest {
    
       public static void main(String[] args) {
           int num1 = 10;
           int num2 = 5;
    
           CompleteCalc calc = new CompleteCalc();
           System.out.println(calc.add(num1, num2));
           System.out.println(calc.substract(num1, num2));
           System.out.println(calc.times(num1, num2));
           System.out.println(calc.divide(num1, num2));
           System.out.println(calc.square(num1));
           calc.showInfo();
    
       }
    
    }

    -상위 클래스의 기능을 모두 가지고 있는 CompleteCalc 클래스의 인스턴스만 생성한다
    -인터페이스 또한 묵시적 형변환이 가능하다.( 상위클래스 자료형으로 변환 )



- 출처: Do it 자바프로그래밍