반응형
해당 연습문제는 자바의 정석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이 저장됨
}
위와 같이 코드를 짜주었을때 작동하는 순서를 살펴보면 다음과 같다.
- private int channel; --> 의 디폴트값은 '0' 이다.
- 따라서 preChannel = this.channel 에서 preChannel의 값은 '0' 으로 초기화 된다.
- 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());
}
}
'Java > Daily-Java' 카테고리의 다른 글
[자바의 정석] Exercise (7_1) + (0) | 2021.07.07 |
---|---|
[자바의 정석] Exercise (7_1) (0) | 2021.07.06 |
[JAVA 복습] 미니게임 WarriorVsMagician (update ver.2) (0) | 2021.05.25 |
[JAVA 복습] 미니게임 WarriorVsMagician (1) | 2021.05.18 |
[Array] 버리긴 아까운 백준 오답 (feat.MultiArray,No.4434) (0) | 2021.04.21 |