JAVA

[Java.3-5] 인터페이스

식빵민 2022. 4. 16. 22:49

자바 인터페이스

  • 클래스가 구현해야 하는 메소드들이 선언되는 추상형
  • 인터페이스 선언 방법
    • interface 키워드로 선언
public interface MobliePhone{...}
  • 자바 인터페이스의 변화
    • ~ Java 7 : 인터페이스는 상수와 추상 메소드로만 구성
    • Java 8 ~
      • 상수와 추상 메소드 포함
      • default 메소드 포함 (Java 8) (접근 지정자 디폴트랑은 다름)
      • private 메소드 포함 (Java 9)
      • static 메소드 포함 (Java 9)
    • 여전히 인터페이스에는 필드(멤버 변수) 선언 불가
interface Phone{//인터페이스 선언
    public static final int TIME = 120000;//상수 필드, public static fianl 생략 가능
    public abstract void ring();//추상 메소드, public abstract 생략 가능
    public abstract void call();
    public abstract void printLogo(){//default 메소드, public 생략 가능
    	System.out.println("this is the phone");
    }
}

  • 인터페이스 구성 요소들
상수 public 만 허용, public static final 생략 가능
추상 메소드 public abstract 생략 가능
default 메소드 인터페이스에 코드가 작성된 메소드
인터페이스를 구현하는 클래스에 자동 상속
public 접근 지정만 허용. 생략 가능
private 메소드 인터페이스 내에 메소드 코드가 작성되어야함
인터페이스 내에 있는 다른 메소드에 의해서만 호출 가능
static 메소드 public, private 모두 지정 가능 ( 생략시 public )

자바 인터페이스의 특징

  • 인터페이스의 객체 생성 불가
  • 인터페이스 타입의 레퍼런스 변수 선언 가능
  • 인터페이스 구현 : 인터페이스를 상속받는 클래스는 인터페이스의 모든 추상 메소드 반드시 구현 
  • 다른 인터페이스 상속 가능
  • 인터페이스의 다중 상속 가능
interface phoneInterface{}
interface iPhoneInterface extends phoneInterphone{}
//iPhonInterface는 phoneInterface를 상속
class iPhone implements iPhoneInterface, korPhoneInterface{}
//iPhone 클래스는 iPhoneInterface 와 korPhoneInterface 다중 상속

new phoneInterface();//!컴파일 오류! 인터페이스 PhoneInterface 객체 생성 불가
phoneInterface myPhone;//iPhone은 인터페이스에 대한 레퍼런스
myPhone = new iPhone(); //myPhone은 phoneInterface를 구현해야 함

 

  • 인터페이스 구현 : 인터페이스의 추상 메소드를 모두 구현한 클래스 작성
    • implements 키워드 사용
    • 여러 개의 인터페이스 동시 구현 가능
interface phoneInterface{
    void sendCall();
    void receiveCall();
}
class newPhone implemens phoneInterface {
    @Override 
    public void sendCall(){
    	System.out.println("ddu-ddu");
    }
    @Override
    public void receiveCall(){
    	System.out.println("Ring Ring");
    }
}
  • 인터페이스 상속
    • 인터페이스가 다른 인터페이스 상속 : extends 키워드 이용
    • 다중 인터페이스 상속
interface MobliephoneInterface extends phoneInterface{
//extends 키워드로 다른 인터페이스 상속
    void sendmessage();//추상 메소드 추가
    void receivemessage();//추상 메소드 추가
}
interface Mp3Interface{
    void play();//추상 메소드
    void stop();//추상 메소드
}
interface Mp3PhoneInterface extends MobliephonInterface,Mp3PhoneInterface{
//extends 키워드와 ,로 인터페이스 다중 상속
    void newRingbell();//새로운 추상 메소드 추가
}

추상 클래스와 인터페이스

유사점 - 객체를 생성할 수 없고, 상속을 위한 슈퍼 클래스로만 이용
- 클래스의 다형성을 실현하기 위한 목적
차이점 목적 구성
추상 클래스 추상 클래스는 서브 클래스에서 필요로 하는 대부분의 기능을 구현해서 서브 클래스가 상속받아 활용할 수 있도록 함.
다만, 서브 클래스에서 구현할 수밖에 없는 기능만을 추상 메소드로    선언하여, 서브 클래스에서 구현하도록 하는 목적 (다형성)
- 추상 메소드와 일반 메소드 모두 포함
- 상수, 변수 필드 모두 포함
인터페이스 인터페이스는 객체의 기능을 모두 공개한 표준화 문서와 같은 것으로, 개발자에게 인터페이스를 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상메소드를 만들도록 하는 목적 (다형성) - 변수 필드는 포함하지 않음
- 상수, 추상 메소드, 일반 메소드,default 메     소드, static 메소드 모두 포함
- protected 접근 지정 선언 불가
- 다중 상속 지원