인터페이스 사용

Dorothy·2022년 12월 13일
0

항해99

목록 보기
13/17

인터페이스는 필드, 매개변수, 로컬 변수의 타입으로 선언 가능하다.

// 인터페이스
public interface RemoteControl {
    public int MAX_VOLUME = 10;
    public int MIN_VOLUME = 0;

    public void turnOn();
    public void turnOff();
    public void setVolume(int volume);
}
// RemoteControl을 구현하는 Television 클래스
public class Television implements RemoteControl {
    private int volume;

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

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

    public void setVolume(int volume) {
        if (volume > RemoteControl.MAX_VOLUME) {
            this.volume = RemoteControl.MAX_VOLUME;
        } else if (volume < RemoteControl.MIN_VOLUME) {
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 TV 볼륨: " + this.volume);
    }
}
public class Audio implements RemoteControl {
    private int volume;

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

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

    public void setVolume(int volume) {
        if (volume > RemoteControl.MAX_VOLUME) {
            this.volume = RemoteControl.MAX_VOLUME;
        } else if (volume < RemoteControl.MIN_VOLUME) {
            this.volume = RemoteControl.MIN_VOLUME;
        } else {
            this.volume = volume;
        }
        System.out.println("현재 Audio 볼륨: " + this.volume);
    }
}
public class MyClass {
    // 필드로 사용
    RemoteControl rc = new Television();

    MyClass() {
    }

    // 생성자의 매개변수로 사용
    MyClass(RemoteControl rc) {
        this.rc = rc;
        rc.turnOn();
        rc.setVolume(5);
    }
    
    void methodA() {
        // 메소드의 로컬변수로 사용
        RemoteControl rc = new Audio();
        rc.turnOn();
        rc.setVolume(3);
    }

    // 메소드의 매개변수로 사용
    void methodB(RemoteControl rc) {
        rc.turnOn();
        rc.setVolume(7);
    }
}
  1. 인터페이스가 필드 타입으로 사용될 경우, 필드에 구현 객체를 대입할 수 있다.

  2. 인터페이스가 생성자의 매개 변수 타입으로 사용될 경우, new 연산자로 객체를 생성할 때 구현 객체를 생성자의 매개값으로 대입할 수 있다.

  3. 인터페이스가 로컬 변수 타입으로 사용될 경우, 변수에 구현 객체를 대입할 수 있다.

  4. 인터페이스가 메소드의 매개 변수 타입으로 사용될 경우, 메소드 호출 시 구현 객체를 매개값으로 대입할 수 있습니다.

public class MyClassExample {
    public static void main(String[] args) {
        MyClass myClass1 = new MyClass();
        myClass1.rc.turnOn();
        myClass1.rc.setVolume(1);

        MyClass myClass2 = new MyClass(new Audio());

        MyClass myClass3 = new MyClass();
        myClass3.methodA();

        MyClass myClass4 = new MyClass();
        myClass4.methodB(new Television());
    }
}

/* 실행결과

MyClass1
TV를 켭니다
현재 TV 볼륨: 1

MyClass2
Audio를 켭니다
현재 Audio 볼륨: 5

MyClass3
Audio를 켭니다
현재 Audio 볼륨: 3

MyClass4
TV를 켭니다
현재 TV 볼륨: 7

*/

0개의 댓글