인터페이스(Interface)

2024. 4. 16. 17:49Java

- 서로 관계가 없는 물체들이 상호 작용을 하기 위해서 사용되는 장치나 시스템

- 클래스 구조상의 관계와 상관없이 클래스들에 구현되어질 수 있는 규약 

- 즉, 클래스들 사이의 유사한 특성을 부자연스러운 상속 관계를 설정하지 않고 얻어냄

 

언제 사용할까?

- 하나 또는 그 이상의 클래스들에서 똑같이 구현되어질 법한 메소드를 선언하는 경우

- 클래스 자체를 드러내지 않고 객체의 프로그래밍 인터페이스를 제공하는 경우

 

인터페이스의 상속

- 인터페이스는 다중상속을 지원하지 않는 자바에서 다중 상속의 장점을 활용하기 위해 도입

- 한 클래스는 하나의 부모클래스를 가지며 하나 이상의 인터페이스를 구현할 수 있음

- 인터페이스 사이에서는 다중 상속이 가능함

- 인터페이스는 interface 키워드로 선언하고 implements 키워드로 사용

- 인터페이스를 구현한 클래스에서 추상 메서드를 반드시 정의해야 함

public interface Ainter {
    public void aMethod();

    public void same();
}
public class AImpl implements Ainter {
    @Override
    public void aMethod() {
        System.out.println("a매소드 구현");
    }

    @Override
    public void same() {
        System.out.println("same메소드 구현");
    }

    public void say(){
        System.out.println("하하");
    }
}

 

인터페이스에서 default 키워드

- 인터페이스가 dafault키워드로 선언되면 메소드가 구현될 수 있다.

-  또한 이를 구현하는 클래스는 default메소드를 오버라이딩 할 수 있다.

- 인테페이스가 변경이 되면, 인터페이스를 구현하는 모든 클래스들이 해당 메소드를 구현해야 하는 문제가 있다. 이런 문제를 해결하기 위해 인테페이스에 메소드를 구현할 수 있도록 해놓았다.

 

public interface Drawable {
    default public void draw(){
        System.out.println("도형을 그립니다.");
    }

    default public void test(){
        //인터페이가 변경되면 인터페이스를 구현하는 모든 클래스들이 해당 메소드를 구현해야 하는 문제가 있다.
        //이를 해결하고자 default가 생겼다.
        System.out.println("default 메소드 입니다.");
    }
}

'Java' 카테고리의 다른 글

내부 클래스  (0) 2024.04.16
예외처리(Exception)  (1) 2024.04.16
추상 클래스  (0) 2024.04.16
클래스 생성 및 인스턴스화  (0) 2024.03.26
접근제한자  (0) 2024.03.26