JAVA 인터페이스(interface)

강효림·2023년 4월 20일
0

JAVA

목록 보기
10/19

자바의 인터페이스(interface)란?

인터페이스는 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스 규격선언이다.
클래스가 구현해야 할 메소드들이 선언되는 추상형이다.
선언할 때는 [ interface ] 키워드를 사용한다.

public interface Person{ }

인터페이스에 대한 변화

java 7까지
인터페이스를 상수와 추상메소드로만 구성
java 8
상수와 추상메소드를 포함한 채로 default 메소드 포함
java 9
private, static 메소드 포함

하지만 여전히 필드(멤버변수)를 선언할 수 없다.

자바 인터페이스 예시


interface에서 알아서 붙여주기 때문에 생략가능하다. 그래서 앞에 타입만 있어도된다. 하지만 default 메소드에서 default는 꼭 써야한다.

구성요소

  • 상수
    public만 허용하며 [ public static final ] 생략이 가능하다.
  • 추상메소드
    public abstrct 생략이 가능하다.

( 위 두 가지는 많이 쓰니 기억하도록 하자 )

  • default 메소드
    인터페이스에 코드가 작성된 메소드
    인터페이스를 구현하는 클래스에 자동으로 상속된다.
    public 접근만 허용하며 생략이 가능하다.
  • private 메소드
    인터페이스에 코드가 작성된 메소드
    인터페이스 내에 있는 다른 메소드에 의해서만 호출이 가능하다.
  • static 메소드
    public, private 모두 지정이 가능하고 생략하면 public으로 간주한다.

인터페이스의 특징

  • 인터페이스의 객체는 생성할 수 없다.

  • 인터페이스 타입의 레퍼런스 변수를 선언할 수 있다.

    PhoneInterface IPhone;

  • 인터페이스를 상속받는 클래스는 인터페이스의 모든 추상메소드를 반드시 구현해야 한다.
    반대로 인터페이스에서 클래스를 상속받는 경우를 오류가 발생한다.

  • 다른 인터페이스 상속이 가능하며 다중 상속 또한 가능하다.
    인터페이스간 상속이 가능할 뿐 클래스와 다중 상속은 불가능하다.

인터페이스 구현

인터페이스를 상속받은 클래스를 구현해 볼 것이다.

클래스에서 인터페이스를 상속받을 때 [ implements ]를 사용한다.
( 인터페이스간의 상속 시에는 클래스와 같이 extends를 사용한다. )
PhoneInterface의 모든 메소드들을 구현하지 않으면 오류가 발생한다.

인터페이스 목적

클래스들의 다형성을 실현하기 위한 도구이다.

추상클래스와 인터페이스의 비교

유사점

  • 둘 다 객체를 생성할 수 없고 상속을 위한 슈퍼클래스로만 사용한다.
  • 클래스의 다형성을 실현하기 위한 목적을 가지고 있다.

다른점

추상클래스

추상 메소드, 일반 메소드 모두를 포함하고 상수, 변수 필드를 모두 포함한다.
그리고 추상클래스는 서브클래스에서 필요한 대부분의 기능을 구현하고 서브클래스가 상속받아 사용할 수 있도록 하지만 서브클래스에서 반드시 구현해야하는 메소드들은 추상메소드로 선언한다.

인터페이스

변수필드를 포함하지 않고 상수, 추상, default, static메소드는 모두 포함한다. protected 접근자는 선언이 불가능하며 다중상속을 지원한다.
인터페이스는 객체의 기능을 모두 공개하고 개발자에게 인터페이스를 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상메소드를 만들도록 한다.

예시 문제

예제 1-9
인터페이스를 구현하고 동시에 클래스를 상속받는 경우

PhoneInterface, MP3Interface, MobilePhoneInterface 인터페이스
PDA 클래스
Iphone 클래스InterfaceEx 클래스

0개의 댓글