JAVA 기초

JAVA 12-1

Vanillwa 2023. 8. 28. 23:46

인터페이스 예제

 

Phone 인터페이스 : 배터리 상수와 여러가지 추상 메서드 작성

package ex9_interface;

public interface Phone {
	//인터페이스 내에서 상수라고 인식하기 때문에 final 생략 가능
	static int MAX_BATTERY_CAPACITY = 100;
	
	//하나의 인터페이스에 두개 이상의 추상메서드 가능 / abstract 생략가능
	public void powerOn();
	public void powerOff();
	public boolean isOn();
	public void watchUtube();
	public void charge();
}

 

SamsungPhone 클래스 : 앞의 인터페이스를 implements

package ex9_interface;

public class SamsungPhone implements Phone {
	int batteryCapacity = 35;
	boolean isOn = false;
	
	@Override
	public void powerOn() {
		if(batteryCapacity >30) {
			System.out.println("★★★폰이 켜졌습니다★★★");
			isOn = true;
		}
		else
			System.out.println("배터리가 부족합니다.");
	}
	@Override
	public void powerOff() {
		System.out.println("★★★폰이 꺼졌습니다★★★");
		isOn = false;
	}
	@Override
	public boolean isOn() {
		if(isOn)
			return true;
		else
			return false;
	}
	@Override
	public void watchUtube() {
		if(batteryCapacity > 15) {
			System.out.println("---U튜브 시청중---");
			batteryCapacity -= 10;
			System.out.printf("잔여 배터리 : %d%%\n",batteryCapacity);
		}
		else {
			System.out.println("배터리가 부족합니다.");
			powerOff();
		}
	}
	@Override
	public void charge() {
		if(batteryCapacity < Phone.MAX_BATTERY_CAPACITY - 20) {		
			System.out.println("---충전중---");
			batteryCapacity += 10;
			System.out.printf("잔여 배터리 : %d%%\n",batteryCapacity);
		}
		else {
			System.out.println("충전할 필요가 없습니다.");
			System.out.printf("잔여 배터리 : %d%%\n",batteryCapacity);
		}
	}
}

 

ApplePhone 클래스 : 앞의 인터페이스를 implements

package ex9_interface;

public class ApplePhone implements Phone {
	int batteryCapacity = 40;
	boolean isOn = false;
	
	@Override
	public void powerOn() {
		if(batteryCapacity >30) {
			System.out.println("★★★Power On★★★");
			isOn = true;
		}
		else
			System.out.println("Low battery");
	}
	@Override
	public void powerOff() {
		System.out.println("★★★Power Off★★★");
		isOn = false;
	}
	@Override
	public boolean isOn() {
		if(isOn)
			return true;
		else
			return false;
	}
	@Override
	public void watchUtube() {
		if(batteryCapacity > 15) {
			System.out.println("---Watching Utube---");
			batteryCapacity -=10;
			System.out.printf("Remaining Battery : %d%%\n",batteryCapacity);
		}
		else {
			System.out.println("Low battery");
			powerOff();
		}
	}
	@Override
	public void charge() {
		if(batteryCapacity < Phone.MAX_BATTERY_CAPACITY - 20) {		
			System.out.println("---Charging---");
			batteryCapacity += 10;
			System.out.printf("Remaining Battery : %d%%\n",batteryCapacity);
		}
		else {
			System.out.println("You dont need to charge battery");
			System.out.printf("Remaining Battery : %d%%\n",batteryCapacity);
		}
	}
}

 

Person 클래스 : 앞의 SamsungPhone과 ApplePhone을 사용하는 사람을 나타낸 클래스

package ex9_interface;

public class Person {
	//휴대폰을 구입해 사용하는 사람 클래스
	Phone p; //다형성 (Samsung or Apple 객체 둘다 받을 수 있다)
	
	Person(Phone p){ //생성자를 통해 받아오거나
		this.p = p;
	}
	
	//함수의 매개변수를 통해 받아오거나
	public void buyNewPhone(Phone p) {
		this.p = p;
		System.out.println("새로운 폰을 샀습니다.");
	}
	
	public void turnOnPhone() {
		p.powerOn();
	}
	
	public void turnOffPhone() {
		p.powerOff();
	}
	
	public void watchUtube() {
		if(p.isOn())
			p.watchUtube();
		else
			System.out.println("폰이 꺼져있어 볼 수 없습니다");
	}
	
	public void charge() {
		p.charge();
	}
}

 

Main 클래스

package ex9_interface;

public class PhoneMain {
	public static void main(String[] args) {
		//익명 객체 생성
		Person jimin = new Person(new ApplePhone());
		
		jimin.turnOnPhone();
		
		for(int i=0;i<6;i++) {
			jimin.watchUtube();
			
			if(i%3==0)
				jimin.charge();
		}
		System.out.println();
		jimin.buyNewPhone(new SamsungPhone());
		
		jimin.turnOnPhone();
		
		for(int i=0;i<6;i++) {
			jimin.watchUtube();
			
			if(i%3==0)
				jimin.charge();
		}
		
		//인터페이스는 다양한 장점이 있다
		//실제 구현 클래스의 내용을 전혀 보지않고 개발 코드로 객체 사용이 가능 -> 정보 은닉
		//구현 클래스들이 독립적으로 사용될 수 있다
		//개발 코드에서 객체의 변경이 필요할 때
		//코드 내용 변경을 최소화 할 수 있다 -> 모듈화
	}
}

실행 결과

'JAVA 기초' 카테고리의 다른 글

JAVA 13-1  (0) 2023.08.29
JAVA 12-2  (0) 2023.08.29
JAVA 11-3  (0) 2023.08.25
JAVA 11-2  (0) 2023.08.25
JAVA 11-1  (0) 2023.08.25