본문 바로가기

개발이야기

Tv, Radio, Light(전등)를 조작할 수 있는 만능리모콘을 만드시오.

Tv, Radio, Light(전등)를 조작할 수 있는 만능리모콘을 만드시오.


PowerfulRemoteController 클래스는 Tv, Radio, Light 등을 모두 조작할 수 있는 만능리모콘이다. 

아래 코드를 참고하고, 필요한 경우 클래스, 추상클래스, 인터페이스 등을 추가하시오.


문제 예시)

// 필요할 경우 클래스, 추상클래스, 인터페이스는 추가로 작성

public class Tv […] {

    // 필요한 코드 작성 (이전 과제 Tv 코드 참고)

}

public class Radio […] {

    // 필요한 코드 작성

}

public class Light […] {

    // 필요한 코드 작성

}

public class PowerfulRemoteController […] {

    // 필요한 코드 작성 (이전 과제 RemoteController 코드 참고)

}


public class Test {

    public static void main(String[] args) {

        [...] tv = new Tv([...]);

        [...] radio = new Radio([...]);

        [...] light = new Light([...]);

        PowerfulRemoteController rc = new PowerfulRemoteController([...]);

        // 리모콘을 Tv용으로 설정하는 코드 작성

        rc.powerOnOff([...]);

        rc.volumeUp([...]);

        tv.printStatus();

        // 리모콘을 Radio용으로 설정하는 코드 작성

        rc.powerOnOff([...]);

        radio.printStatus();

        // 리모콘을 Light용으로 설정하는 코드 작성

        rc.powerOnOff([...]);

        light.printStatus();

    }

}


RemoteController.java

public interface RemoteController {

    int MAX_VOLUME = 20;

    int MIN_VOLUME = 0;

    int MAX_CHANNEL = 50;

    int MIN_CHANNEL = 1;


void powerOnOff();

void channelUp();

void volumeDown();

void volumeUp();

void channelDown();

void printStatus();

}


Tv.java

public class Tv implements RemoteController {

    Boolean isPowerOn = false;

int channel = 0;

    int volume = 0;

Tv(Boolean inPowerState, int inVolume) {

isPowerOn = inPowerState;

channel = MIN_CHANNEL;

if(inVolume >= MIN_VOLUME && inVolume <= MAX_VOLUME) volume = inVolume;

else volume = MIN_VOLUME;

}


    public void powerOnOff() {

if(isPowerOn) isPowerOn = false;

else isPowerOn = true;

    }

    public void volumeUp() {

if(isPowerOn) {

if(volume <= MAX_VOLUME) volume++;

}

    }

    public void volumeDown() {

if(isPowerOn) {

if(volume > MIN_VOLUME) volume--;

}

    }

    public void channelUp() {

if(isPowerOn) {

if(channel >= MAX_CHANNEL) channel = MIN_CHANNEL;

else channel++;

}

    }

    public void channelDown() {

if(isPowerOn) {

if(channel <= MIN_CHANNEL) channel = MAX_CHANNEL;

else channel--;

}

    }

    public void printStatus() {

System.out.print("power : ");

if(isPowerOn) System.out.print("true");

else System.out.print("false");

System.out.println(", channel  "+channel+", volume  "+volume);

    }

}


Radio.java

public class Radio implements RemoteController {

    Boolean isPowerOn = false;

int channel = 0;

    int volume = 0;


Radio(Boolean inPowerState, int inVolume) {

isPowerOn = inPowerState;

channel = MIN_CHANNEL;

if(inVolume >= MIN_VOLUME && inVolume <= MAX_VOLUME) volume = inVolume;

else volume = MIN_VOLUME;

}


    public void powerOnOff() {

if(isPowerOn) isPowerOn = false;

else isPowerOn = true;

    }

    public void volumeUp() {

if(isPowerOn) {

if(volume <= MAX_VOLUME) volume++;

}

    }

    public void volumeDown() {

if(isPowerOn) {

if(volume > MIN_VOLUME) volume--;

}

    }

    public void channelUp() {

if(isPowerOn) {

if(channel >= MAX_CHANNEL) channel = MIN_CHANNEL;

else channel++;

}

    }

    public void channelDown() {

if(isPowerOn) {

if(channel <= MIN_CHANNEL) channel = MAX_CHANNEL;

else channel--;

}

    }

    public void printStatus() {

System.out.print("power : ");

if(isPowerOn) System.out.print("true");

else System.out.print("false");

System.out.println(", channel  "+channel+", volume  "+volume);

    }

}


Light.java

public class Light implements RemoteController {

    Boolean isPowerOn = false;


Light(Boolean inPowerState) {

isPowerOn = inPowerState;

}


    public void powerOnOff() {

if(isPowerOn) isPowerOn = false;

else isPowerOn = true;

    }

    public void volumeUp() {

System.out.println("동작하지 않는 기능 입니다.");

    }

    public void volumeDown() {

System.out.println("동작하지 않는 기능 입니다.");

    }

    public void channelUp() {

System.out.println("동작하지 않는 기능 입니다.");

    }

    public void channelDown() {

System.out.println("동작하지 않는 기능 입니다.");

    }

    public void printStatus() {

System.out.print("power : ");

if(isPowerOn) System.out.print("true");

else System.out.print("false");

    }

}


PowerfulRemoteController.java

public class PowerfulRemoteController {

    RemoteController obj;


PowerfulRemoteController(RemoteController inObj) {

obj = inObj;

}


public void changeType(RemoteController inObj) {

obj = inObj;

}


public void powerOnOff() {

obj.powerOnOff();

    }

    public void volumeUp() {

obj.volumeUp();

    }

    public void volumeDown() {

obj.volumeDown();

    }

    public void channelUp() {

obj.channelUp();

    }

    public void channelDown() {

obj.channelDown();

    }

public void printStatus() {

obj.printStatus();

}

}


Test.java

public class Test {

    public static void main(String[] args) {

        Tv tv = new Tv(false, 5);

        Radio radio = new Radio(false, 4);

        Light light = new Light(false);

        PowerfulRemoteController rc = new PowerfulRemoteController(tv);

        rc.powerOnOff();

        rc.channelUp();

        rc.volumeUp();

tv.printStatus();

rc.changeType(radio);

        rc.powerOnOff();

        rc.channelUp();

        rc.channelUp();

        rc.volumeUp();

        radio.printStatus();

rc.changeType(light);

        rc.powerOnOff();

        rc.channelUp();

        rc.channelUp();

        rc.volumeUp();

        light.printStatus();

    }

}


출력결과)

power : true, channel  2, volume  6

power : true, channel  3, volume  5

동작하지 않는 기능 입니다.

동작하지 않는 기능 입니다.

동작하지 않는 기능 입니다.

power : true


참고사이트: http://blog.naver.com/PostView.nhn?blogId=blueherald&logNo=120141051233