영보의 SystemOut.log

[Java] 자바 인터페이스 / 인터페이스 구현 / 인터페이스 예제 본문

국비교육(아이티센 입사교육)/Java

[Java] 자바 인터페이스 / 인터페이스 구현 / 인터페이스 예제

영보로그 2021. 10. 5. 14:24
반응형
\자바/스프링 기반 디지털 융합 웹 개발자 양성과정 6일차

 

 

인터페이스

 - 추상 클래스의 특별한 형태

 - 개발 코드와 객체가 서로 통신하는 접점

 - 개발 코드는 인터페이스의 메소드만 알고 있으면 OK

 - 자바에서는 다중 상속을 가능하게 하기 위해서 인터페이스를 제공한다

# 형식 


     interface 인터페이스이름{
         상수;
         추상 메소드(매개변수);
         디폴트
         메소드(매개변수)
         정적 메소드( )
   }

    interface 인터페이스이름{
         public static final 자료형 상수이름 = 값;
         public abstract 추상메소드(매개변수);
         default void 디폴트메소드(매개변수);
         static void 정적메소드( );
     }

 - interface는 예약어로 선언하며 상수 또는 추상 메소드, 디폴트 메소드, 정적 메소드 (자바 8에 추가)를 포함할 수 있다

 - interface 내의 메소드는 서브 클래스에서 어떻게 동작해야 할지를 구현(새롭게 정의)해 주어야 한다

 - interface는 추상 메소드를 멤버로 갖기 때문에 인스턴스를 생성할 수는 없지만 레퍼런스 변수는 선언이 가능하다

 

 

 

인터페이스 구현 

# 익명 구현 객체

 - 명시적인 구현 클래스 작성 생략하고 바로 구현 객체를 얻는 방법

 - 이름 없는 구현 클래스 선언과 동시에 객체 생성

인터페이스 변수 = new 인터페이스() {

 // 인터ㅔ이스에 선언된 추상 메소드의 실체 메소드 선언

};

 

 

 

인터페이스 예제

 

 

# RemoteControl.interface

package 인터페이스실습;

/*
    RemoteControl 인터페이스는 Television 클래스와 Audio 크래스가 가지고 있는 기능들을 추상 클래스로 정의해두는 인터페이스다.

 */
public interface RemoteControl {
    // '볼륨' 조절을 상수로 선언
    // public static final 생략 가능
    public static final int MAX_VOLUMN = 10; // 최대 볼륨
    public static final int MIN_VOLUMN = 0;  // 최소 볼륨

    // '추상 메소드' 선언
    // public abstract 생략 가능
    public abstract void turnOn();  // 켜기
    public abstract void turnOff(); // 끄기
    public abstract void setVolumn(int volumn); // 볼륨 조절

    /*
        자바 8 버전부터는 '디폴드' 메소드와 '정적' 메소드를 구성 맴버로 구현 가능 !
     */

    // '디폴트' 메소드 구현 => 허용한 이유 => 기존 interface 를 확장해서 새로운 기능을 추가하기
    default void setifMute(boolean mute) {
        if (mute) {
            System.out.println("무음 처리 합니다.");
        } else {
            System.out.println("무음 해제 합니다.");
        }
    }

    // '정적' 메소드 구현 => 허용한 이유 => 디폴트 메소드와는 달리 객체가 없어도 인터페이스만으로 호출이 가능함 !
    static void changeBetery() {
        System.out.println("건전지를 교환합니다.");
    }
}

 

 

# Audio.java

package 인터페이스실습;

public class Audio  implements RemoteControl{
    // 맴버 변수 선언
    private int volumn;

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

    @Override
    public void turnOff() {
        System.out.println("Audio를 끕니다.");
    }

    @Override
    public void setVolumn(int volumn) {
        if(volumn > RemoteControl.MAX_VOLUMN) {
            this.volumn = RemoteControl.MAX_VOLUMN;
        }else if(volumn < RemoteControl.MIN_VOLUMN){
            this.volumn = RemoteControl.MIN_VOLUMN;
        }else{
            this.volumn = volumn;
        }System.out.println("현재 Audio 볼륨 : " + this.volumn);
    }
}

 

 

# Television.java

package 인터페이스실습;

public class Television implements RemoteControl{
    // 맴버 변수 선언
    private int volumn;

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

    @Override
    public void setVolumn(int volumn) {
        if(volumn > RemoteControl.MAX_VOLUMN) {
            this.volumn = RemoteControl.MAX_VOLUMN;
        }else if(volumn < RemoteControl.MIN_VOLUMN){
            this.volumn = RemoteControl.MIN_VOLUMN;
        }else{
            this.volumn = volumn;
        }System.out.println("현재 TV 볼륨 : " + this.volumn);
    }

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

 

 

# MyClass.java

package 인터페이스실습;
/*
    개발 코드
 */
public class MyClass {
    public static void main(String[] args) {
        RemoteControl rc = null ;

        rc = new Television();
        rc.turnOn();
        rc.setVolumn(7);
        rc.setifMute(true);
        RemoteControl.changeBetery();
        rc.turnOff();
        System.out.println();

        rc = new Audio();
        rc.turnOn();
        rc.setVolumn(7);
        rc.setifMute(true);
        RemoteControl.changeBetery();
        rc.turnOff();
        System.out.println();
    }
}

 

결과 화면

 

반응형