728x90

인터페이스(interface)

: 호환성을 나타내는 정해진 규격

  • 클래스가 구현해야 할 메소드들이 선언되는 추상형
  • interface 키워드로 선언

인터페이스의 목적

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

인터페이스 구성 요소

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

인터페이스의 특성

  • 인터페이스의 객체 생성 불가
  • 인터페이스 타입의 레퍼런스 변수 선언 가능
  • 인터페이스의 구현
    • 인터페이스를 상속받는 클래스는 인터페이스의 모든 추상 메소드를 반드시 구현

 

  • 다른 인터페이스 상속 가능
    interface MobilePhoneInterface extends PhoneInterface {
            void sendSMS();
            void receiveSMS();
            // 새로운 추상 메소드 추가
    }

 

  • 인터페이스의 다중 상속 가능
    interface MP3Interface {
            void play();
            void stop(); // 추상 메소드
    }

    interface MusicPhoneInterface extends MobilePhoneInterface, MP3Interface {
            void playMP3RingTone(); // 새로운 추상 메소드 추가
    }

인터페이스 구현

  • implements: 인터페이스의 추상 메소드를 모두 구현한 클래스
    • 여러 개의 인터페이스를 한 클래스에 동시 구현 가능

Ex1

interface PhoneInterface {
    final int TIMEOUT = 10000;
    void sendCall(); //추상 메소드
    void receiveCall(); //추상 메소드
    default void printLogo() { //default 메소드
        System.out.println("**Phone**");
    }
}
class SamsungPhone implements PhoneInterface {
    @Override
    public void sendCall() {
        System.out.println("전화 발신");
    }

    @Override
    public void receiveCall() {
        System.out.println("전화 수신");
    }

    //추가 메소드
    public void vibration() {
        System.out.println("진동 ON");
    }
}
public class InterfaceEx {
    public static void main(String[] args){
        SamsungPhone phone = new SamsungPhone();
        phone.printLogo();
        phone.sendCall();
        phone.receiveCall();
        phone.vibration();
    }
}

💡 @Override 의 의미
: 어노테이션(annotation)

  • 어노테이션은 클래스, 인터페이스, 메소드, 메소드 파라미터, 필드, 지역변수 위에 위치
  • 주석처럼 쓰이는 데, 파라미터도 넘길 수 있음
  • 어노테이션 사용 시, 컴파일 과정에서 오류 발견 가능

추상 클래스 VS 인터페이스

유사점

  • 객체 생성 ❌
  • 상속을 위한 슈퍼 클래스로만 사용
  • 클래스의 다형성 실현 목적

차이점

Ex2

interface PhoneInterface {
    final int TIMEOUT = 10000;
    void sendCall();
    void receiveCall();
    default void printLogo() {
        System.out.println("**Phone**");
    }
}
interface MobilePhoneInterface extends PhoneInterface {
    void sendSMS();
    void receiveSMS();
}
interface MP3Interface {
    public void play();
    public void stop();
}
class  PDA {
    public  int calculate(int x, int y) {
        return x + y;
    }
}
class SmartPhone extends  PDA implements MobilePhoneInterface, MP3Interface{
    @Override
    public void sendCall() {
        System.out.println("전화 발신 알림");
    }

    @Override
    public void receiveCall() {
        System.out.println("전화 수신 알림");
    }

    @Override
    public void sendSMS() {
        System.out.println("문자 발신 알림");
    }

    @Override
    public void receiveSMS() {
        System.out.println("문자 수신 알림");
    }

    @Override
    public void play() {
        System.out.println("음악 재생 알림");
    }

    @Override
    public void stop() {
        System.out.println("음악 중단 알림");
    }
    public void schedule() {
        System.out.println("일정 관리 알림");
    }
}
public class InterfaceEx{
    public static void main(String[] args) {
        SmartPhone phone = new SmartPhone();
        phone.printLogo();
        phone.sendCall();
        phone.play();
        System.out.println("3+5 = " + phone.calculate(3, 5));
        phone.schedule();
    }
}

 

 


 

 

 

인터페이스

인터페이스(interface)

www.notion.so

 

아래 노션 페이지에 자바 공부 내용에 대해 업로드 합니다!

수정사항이나 질문사항의 경우 노션 댓글로 남겨주세요!(*•̀ᴗ•́*)و ̑̑

 

 

JAVA 이론 정리

주석 단축키 주석 처리하고 싶은 부분을 블록 처리하고 ‘Ctrl+Shift+ / ’를 누르면 /* */로 주석 처리가 됩니다. 주석을 해제하고 싶은 부분을 블록 처리하고 ‘ Ctrl+Shift+ \ (원 표시 혹은 역슬러시)

www.notion.so

 


개발 환경

Intellij

 

작성 플랫폼

Notion

 

728x90

'🧑‍💻 Language > Java' 카테고리의 다른 글

[Java] 12. 모듈화와 패키지 응용  (2) 2021.06.01
[Java] 11. 모듈과 패키지  (2) 2021.05.26
[Java] 9. 추상 메소드와 추상 클래스  (0) 2021.05.16
[Java] 8. 메소드 오버라이딩  (0) 2021.05.16
[Java] 7. 상속  (0) 2021.05.08