Java/Daily-Java

[자바의 정석] Exercise (7_10&11)

모모토 2021. 7. 8. 23:34
반응형

해당 연습문제는 자바의 정석3판 연습문제를 참조했습니다.


 

getter & setter 생성문제다. 아주 간단한 문제지만 , 사용자 입장에서 생각해봤을때 어떤게 추가되어야 할지

 

생각해봐야한다.

 

class MyTv2{
    private boolean isPowerOn;
    private int channel;
    private int volume;

    final int MAX_VOLUME = 100;
    final int MIN_VOLUME = 0;
    final int MAX_CHANNEL = 100;
    final int MIN_CHANNEL = 1;

    public boolean isPowerOn() {
        return isPowerOn;
    }

    public void setPowerOn(boolean powerOn) {
        isPowerOn = powerOn;
    }

    public int getChannel() {
        
        return channel;
    }

    public void setChannel(int channel) {
        if(channel>100||channel<1) return; // 사용자 입장에서 생각했을때 추가했어야하는 코드
        this.channel = channel; 
    }

    public int getVolume() {
        return volume;
    }

    public void setVolume(int volume) {
        if(volume>100||volume<0) return;
        this.volume = volume;
    }

    void gotoPrevChannel(){
        setChannel(preChannel);
    }
}

 

gotoPreChannel() 메서드는 이전채널로 돌아가는 메서드이다.

 

setChannel은 채널을 입력받고 , getChannel은 해당채널을 출력한다.

 

기본적으로 채널값을 받은 setChannel에서 이전 채널의 정보를 저장해주어야 한다는 이야기다.

 

그렇다면 처음에 setChannel로 입력한 값을 저장할 변수가 존재해야하고 setChannel에 새로운 채널값을 넣었을때도 유

 

지해야한다.

 

쉬운듯 쉽지않은 문제다.. (개인적..)

 

    private boolean isPowerOn;
    private int channel; //디폴트값 = 0
    private int preChannel; // 이전 채널값을 담을 저장소
    private int volume;
    
    
    //...생략
    
    
    public void setChannel(int channel) {
        if(channel>100||channel<1) return;
        preChannel = this.channel; //0이 먼저 저장됨
        this.channel = channel; // int channel이 저장됨
    }

 

위와 같이 코드를 짜주었을때 작동하는 순서를 살펴보면 다음과 같다.

 

  1. private int channel; --> 의 디폴트값은 '0' 이다.
  2. 따라서 preChannel = this.channel 에서 preChannel의 값은 '0' 으로 초기화 된다.
  3. setChannel(10) 을 호출하면 preChannel 은 0 이고 channel은 10이다. 0은 이전채널, 10은 현재채널인것

그렇다면 이제 gotoPreChannel 메서드를 작성해보자

 

void gotoPrevChannel(){
        setChannel(preChannel);
    }

아주 간단하다 setChannel() 에 이전채널의 값을 넣어주면 , getChannel로 preChannel 값을 불러올 수 있다.

 


Answer

class MyTv2{
    private boolean isPowerOn;
    private int channel; //디폴트값 = 0
    private int preChannel;
    private int volume;

    final int MAX_VOLUME = 100;
    final int MIN_VOLUME = 0;
    final int MAX_CHANNEL = 100;
    final int MIN_CHANNEL = 1;

    public boolean isPowerOn() {
        return isPowerOn;
    }

    public void setPowerOn(boolean powerOn) {
        isPowerOn = powerOn;
    }

    public int getChannel() {

        return channel;
    }

    public void setChannel(int channel) {
        if(channel>100||channel<1) return;
        preChannel = this.channel; //0이 먼저 저장됨
        this.channel = channel; // int channel이 저장됨
    }

    public int getVolume() {
        return volume;
    }

    public void setVolume(int volume) {
        if(volume>100||volume<0) return;
        this.volume = volume;
    }

    void gotoPrevChannel(){
        setChannel(preChannel);
    }
}

public class Exercise7_10 {
    public static void main(String[] args) {
        MyTv2 t = new MyTv2();
        t.setChannel(10);
        System.out.println("CH:"+t.getChannel());
        t.setChannel(20);
        System.out.println("CH:"+t.getChannel());
        t.gotoPrevChannel();
        System.out.println("CH:"+t.getChannel());
        t.gotoPrevChannel();
        System.out.println("CH:"+t.getChannel());

    }
}