Language/JAVA

(JAVA)인터페이스

doheun 2023. 1. 20. 10:28
반응형

인터페이스(Interface)

implements

추상클래스 - 미완성된 요소를 포함, 상속강요
인터페이스 - 모든 메서드가 추상 메서드로만 이루어짐(구현이 안된것들로만 구성), 구현강요

인터페이스 내에서
기능은 미구현(ex) void show(); -> public abstract void show();

값은 상수로
(ex) int a=1 -> public final static int a= 1;

위와 같이 두 방법으로 코드를 작성해도 오류가 나지 않고 각각 두번째의 코드로 인식을 한다.

  • new 예약어로 객체 생성 불가
  • private 접근제한자 사용 불가 , public 혹은 protected사용
  • body ({ })를 붙이지 않는다
  • 인터페이스의 추상메서드를 구현하지 않으면, 자식클래스는 추상 클래스가 된다
  • 상속(extends)을 먼저 선언한 후에 implements를 선언
  • 인터페이스는 여러 개의 인터페이스를 상속할 수 있다

구조


코드

//인터페이스
public interface Calc {

    // 명확하게 값까지 지정해야함
    double PI = 3.14;
    int Error = -999999;

    // 추상메서드
    int add(int num1, int num2);
    int sub(int num1, int num2);
    int mul(int num1, int num2);
    int div(int num1, int num2);
}
//추상클래스-Calc의 추상메서드를 강제구현
//이 클래스에서는 add와 sub만구현
public abstract class Calculator implements Calc{

    @Override
    public int add(int num1, int num2) {
        return num1+num2;
    }

    @Override
    public int sub(int num1, int num2) {    
        return num1-num2;
    }

    //추상메서드 -하위 클래스에서 반드시 구현필요
    @Override
    public abstract int mul(int num1, int num2) ;
    @Override
    public abstract int div(int num1, int num2) ;
}
public class CompleteCalc extends Calculator{
    //추상클래스를 상속받으면 추상메서드 오버라이드 필요
    @Override
    public int mul(int num1, int num2) {
        return num1*num2;
    }

    @Override
    public int div(int num1, int num2) {
        if(num2!=0)return num1/num2;
        else return Calc.Error;
    }

}
//실행
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.sub(num1, num2));
        System.out.println(calc.mul(num1, num2));
        System.out.println(calc.div(num1, num2));
    }
}
//15
//5
//50
//2

위 코드에서 구현한 기능을 모두 사용하려면 최종으로 구현한 클래스를 객체로 생성해서 각각의 메서드를 호출하면 된다
인터페이스는 하위클래스에서 구현을 해야하지만 하위클래스에서도 애매한 상황이면 하위클래스의 메서드에 abstract를 붙여서 안할 수 있다. abstract를 붙인 메서드를 가진 클래스의 하위에서는 반드시 그 메서드를 구현해야 한다. 인터페이스 하위의 추상클래스 하위의 클래스에서 구현하게 되면 모든 조건을 만족시키고 상위클래스에서 구현된 메서드들을 사용할 수 있다.


인터페이스 요소

public interface InterfaceTest {

    //상수 선언
    public static final int A=10;

    //추상메서드
    public abstract int test();

    //추가적인 요소

    //private메서드 : body를 만든다면 오류는 안나지만 내부에서 밖에 못쓴다
    //구현한 클래스에서 사용할 수 없으며 , interface내에서만 사용가능
    //공통 기능으로 정의 할 때 사용
    private void test2() {
        System.out.println("interface내부에서 공통적으로 사용될 기능 구현");
    }
    //default메서드
    public default void test3() {
        test2(); //private 메서드 호출하기 
        System.out.println("인터페이스를 구현한 객체");
    }
    //static메서드 : Interfacetest.test04()로 호출
    public static void test4() {
        System.out.println("인터페이스만으로 실행");
    }
}
반응형

'Language > JAVA' 카테고리의 다른 글

(JAVA)예외 처리  (0) 2023.01.26
(JAVA)Getter와 Setter  (0) 2023.01.22
(JAVA)추상 클래스  (0) 2023.01.19
(JAVA)상속-super, this  (0) 2023.01.19
(JAVA)객체 지향 프로그래밍(OOP)  (0) 2023.01.18