한모로그 2023. 1. 21. 11:52

인터페이스 역할

  • 두 객체를 연결하는 역할


    출처, 이것이 자바다


  • 다형성 구현에 주된 기술

인터페이스 선언

  • 인터페이스 선언은 class 키워드 대신 interface 키워드를 사용
  • 접근 제한자로는 클래스와 마찬가지로 같은 패키지 내에서만 사용 가능한 default, 패키지와 상관없이 사용하는 public을 붙일 수 있음


    출처, 이것이 자바다


package ch08.sec02;

/* 인터페이스 : 상속목적, 객체생성 불가능
  - 멤버 : 추상메소드 
  - 사용 못하는 것 : 필드, 생성자, 메소드. 그러나 추상클래스에서는 사용가능.
*/

public interface RemoteControl {

    /* 에러 발생
     필드
    String model; 
    생성자
    public RemoteControl() {}
    메소드
    void turnOn() {
        System.out.println("폰 전원을 켭니다.");
    }
    */

    //추상메소드
    public void turnOn(); //컴파일과정에서 public abstract 키워드가 자동생성됨.
}

구현 클래스 선언

  • 인터페이스에 정의된 추상 메소드에 대한 실행 내용이 구현


    출처, 이것이 자바다


  • implements 키워드는 해당 클래스가 인터페이스를 통해 사용할 수 있다는 표시이며, 인터페이스의 추상 메소드를 재정의한 메소드가 있다는 뜻


    출처, 이것이 자바다


package ch08.sec02;

public class Television implements RemoteControl {

    @Override
    public void turnOn() {
        System.out.println("TV를 켭니다.");
    }

}

변수 선언과 구현 객체 대입

  • 인터페이스는 참조 타입에 속하므로 인터페이스 변수에는 객체를 참조하고 있지 않다는 뜻으로 null을 대입할 수 있음


    출처, 이것이 자바다


  • 인터페이스를 통해 구현 객체를 사용하려면, 인터페이스 변수에 구현 객체의 번지를 대입해야 함


    출처, 이것이 자바다


package ch08.sec02;

public class Audio implements RemoteControl {

    @Override
    public void turnOn() {
        System.out.println("오디오를 켭니다.");
    }

}

package ch08.sec02;

public class RemoteControlExample {

    public static void main(String[] args) {
//        RemoteControl rc = new RemoteControl(); //객체생성불가

        RemoteControl rc;

        rc = new Television();
        rc.turnOn();

        rc = new Audio();
        rc.turnOn();

    }

}