현의 개발 블로그

인터페이스 (Interface) 본문

프로그래밍 언어/자바

인터페이스 (Interface)

hyun2371 2023. 4. 18. 20:45

인터페이스는 클래스들이 필수로 구현해야 하는 추상 자료형이다.

 

 

인터페이스 특징

추상 클래스가 미완성 클래스라면, 인터페이스는 뼈대라고 할 수 있다.

인터페이스는 추상메서드와 상수로만 이뤄져 있다. 생성자나 구현 메서드는 포함할 수 없다.

public interface Contact {
    final String name = "123";
    void sendMessage();
    void call();
}
public interface Film {
    void takeVideo();
    void takePicture();
}

 

추상 메서드를 포함하므로, 자식 클래스에서 부모 인터페이스의 함수를 모두 오버라이딩 해야 한다.

따라서 인터페이스 내 추상 메서드와 상수는 private이나 protected로 선언할 수 없다.

 

 

추상 클래스는 클래스이므로 단일 상속만 가능하다.

이와 달리 인터페이스는 자식 클래스에서 여러 개 구현 가능하다.

public class OldPhone implements Contact,Film{
    @Override
    public void sendMessage() {
        System.out.println("느린 속도로 메세지를 전송합니다.");
    }

    @Override
    public void call() {
        System.out.println("낮은 음질로 통화를 합니다.");
    }

    @Override
    public void takeVideo() {
        System.out.println("저화질 동영상을 촬영합니다.");
    }

    @Override
    public void takePicture() {
        System.out.println("저화질 사진을 찍습니다.");
    }
}

 

인터페이스 사이에도 상속이 가능하다.

public class OldPhone extends PhoneInfo implements Contact,Film{
    ...
    @Override
    void printPrice() {
        System.out.println("6000원 입니다.");
    }
}

 

위의 클래스 객체를 선언하여 다음과 같이 멤버함수를 출력할 수 있다.

public class PhoneTest{
    public static void main(String[] args) {
        OldPhone oldPhone = new OldPhone();
        oldPhone.call();
    }
}

 

 

인터페이스 장점

확장에는 열려 있고 변경에는 닫혀있다.

메서드를 수정해야 할 때 다른 메서드도 수정해야 하는 상황을 줄여준다.

앞에서 언급했듯이, 인터페이스는 추상메서드로 구성되어 있다

 

public abstract int getCount(int count) 메서드는 입력값과 반환값 모두 int이다.

따라서 인터페이스를 구현한 클래스에서 수정을 하려고 해도 입력값과 반환값은 int로 고정된다.

 

 

소스의 가독성이 증가하고 유지보수가 용이해진다.

클래스와 클래스 간의 관계를 인터페이스로 연결하면, 각 클래스마다 독립적인 프로그래밍이 가능해진다.


참고

https://www.inflearn.com/course/%EB%82%98%EB%8F%84%EC%BD%94%EB%94%A9-%EC%9E%90%EB%B0%94-%EA%B8%B0%EB%B3%B8

https://coding-factory.tistory.com/867

https://life-with-coding.tistory.com/488

http://www.tcpschool.com/java/java_polymorphism_interface

'프로그래밍 언어 > 자바' 카테고리의 다른 글

[자바] 예외처리하기  (0) 2023.06.22
자바 Hash Set 사용법  (0) 2023.04.21
자바 ArrayList 사용법  (0) 2023.04.21
제네릭 (Generic)  (0) 2023.04.20
추상 클래스 (Abstract Class)  (0) 2023.04.18
Comments