[JAVA] 인터페이스(interface)

min82·2023년 8월 3일
0

JAVA

목록 보기
7/8

✅ 목적

인터페이스는 스펙을 주어 클래스들이 그 기능을 서로 다르게 구현할 수 있도록 하는 클래스의 규격 선언이며, 클랫의 다형성을 실현하는 도구이다.


✅ 구성요소

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

✅ 특징

  • 인터페이스의 객체 생성 불가
new PhoneInterface(); // 오류. 
  • 인터페이스 타입의 레퍼런스 변수 선언 가능
PhoneInterface galaxy; // galaxy는 인터페이스에 대한 레퍼런스 변수
  • 인터페이스를 상속받는 클래스는 인터페이스의 모든 추상 메소드 반드시 구현
  • 다른 인터페이스 상속 가능
  • 인터페이스의 다중 상속 가능

✅ 구현

  • 인터페이스의 추상 메소드르 모두 구현한 클래스 작성
  • implements 키워드 사용
  • 여러 개의 인터페이스 동시 구현 가능
public interface PhoneInterface {
    final int TIMEOUT = 10000;
    void sendCall();
    void receiveCall();
    default void printLogo(){
        System.out.println("**Phone**");
    }
}
class SamsungPhone implements PhoneInterface {
    @Override
    public void sendCall() {
        System.out.println("띠리리리링");
    }

    @Override
    public void receiveCall() {
        System.out.println("전화가 왔습니다.");
    }

    // 메서드 추가 작성
    public void flash() {
        System.out.println("전화기에 불이 켜졌습니다.");
    }
}
public class InterfaceEx {
    public static void main(String[] args) {
        SamsungPhone samsungPhone = new SamsungPhone();
        samsungPhone.printLogo();
        samsungPhone.sendCall();
        samsungPhone.receiveCall();
        samsungPhone.flash();
    }
}

실행결과:


profile
8282

0개의 댓글