JAVA/문제풀이

추상 클래스와 인터페이스 사용한 티비 동작

nsh95 2023. 12. 6. 20:47
package class07;

import java.util.Random;

/*
		 매개변수를 class 에 받고
		 String userName
		 int channel 은 class SamsungTV 클래스 안에
		 
		 임플리먼츠 파일에 channelUp() , channelDown() channelRandom()
		 printInfo(), channelRandom(),  
		 
		 미니 티비에 battery 변수 넣고
		 channelRandom() 까지 다 만듬 
		 
		 삼성 티비는 사용자를 홍길동으로 받고 
		 채널업에선 처음 채널은 1로 고정
		 
		 삼성미니티비2 는 처음채널은 1로 고정 배터리는 50~70으로 설정
		 
		 LgTV는 처음 채널 1로 고정 처음 전원은 off 상태
		 
		 
 */
class SamsungTV implements TvImpl {

	Random rd = new Random();
	String userName;
	int channel=1;

	SamsungTV(String userName) {
		this.userName = userName;
	}

	@Override
	public void channelUp() {

		++channel;
		System.out.println("현재 채널은 " + this.channel + "입니다");
		this.channel++;
		System.out.println("바뀐 후 채널은 " + this.channel + "입니다");

	}

	@Override
	public void channelDown() {

		System.out.println(channel);
		this.channel--;
		System.out.println("현재 채널은 " + this.channel + "입니다.");
	}

	public void channelRandom() {

		int random = rd.nextInt(999) + 1;
		System.out.println(random);
		if (random == this.channel) {
			return;
		}
		this.channel = random;
	}

	@Override
	public void printInfo() {

		System.out.println("[프린트 인포]현재 시청 채널은 " + this.channel + "번 입니다");
	}

}

class SamsungMiniTV extends SamsungTV {
	String userName;
	int battery;
	int channel =1;

	SamsungMiniTV(String userName) {
		super(userName);
		battery = new Random().nextInt(20)+50;
	}

	@Override
	public void channelRandom() {
		if (this.battery > 0) {
			Random random = new Random();
			int randomChannel = random.nextInt(999) + 1;
			while (randomChannel == this.channel) {
				randomChannel = random.nextInt(999) + 1;
			}
			this.channel = randomChannel;
			this.battery -= 10;
		} else {
			System.out.println("배터리가 부족하여 채널 변경이 불가능합니다.");
		}
	}
}

class LgTV implements TvImpl {

	boolean power = true;
	int channel = 1;

	@Override
	public void channelUp() {
		if (this.power) {
			this.channel++;
		}
	}

	@Override
	public void channelDown() {
		if (this.power && this.channel > 1) {
			this.channel--;
		}

	}

	@Override
	public void printInfo() {
		if (this.power) {
			System.out.println("현재 시청 채널은 " + this.channel + "입니다.");
		} else {
			System.out.println("전원이 꺼져있습니다...");
		}

	}

}

public class Test01 {
	public static void main(String[] args) {
		SamsungTV tv1 = new SamsungTV("홍길동");
		SamsungMiniTV tv2 = new SamsungMiniTV("홍길동");
		LgTV tv3 = new LgTV();
		tv1.channelUp();
		tv1.channelUp();
		tv1.channelUp();
		tv1.channelDown();
		tv1.printInfo();
		
		System.out.println("삼성 미니");
		tv2.channelRandom();
		tv2.printInfo();
		
		System.out.println("LgTV");
		
		tv3.printInfo();
        tv3.channelUp();
        tv3.printInfo();
        tv3.channelDown();
        tv3.printInfo();


	}

}