java - 인터페이스(interface)

imjingu·2023년 8월 28일
0

개발공부

목록 보기
421/481

인터페이스(interface)란?
자바에서 인터페이스는 클래스들이 필수로 구현해야 하는 추상 자료형입니다.
쉽게 말하자면 객체의 사용방법을 가이드라인 하는 것이라고 생각하시면 이해가 쉽습니다.
자바의 인터페이스는 추상 메서드와 상수로만 이루어져 있습니다.
구현된 코드가 없기 때문에 당연히 인터페이스로 인스턴스도 사용할 수 없습니다.

다중 상속 가능
-> 인터페이스는 껍데기만 존재하여 클래스 상속 시 발생했던 모호함이 없습니다. 고로 다중 상속이 가능합니다.

추상 메서드와 상수만 사용 가능
-> 인터페이스에는 구현 소스를 생성할 수 없습니다. 고로 상수와 추상 메서드만 가질 수 있습니다.

생성자 사용 불가
-> 인터페이스 객체가 아니므로 생성자를 사용하실 수 없습니다.

메서드 오버라이딩 필수
-> 자식클래스는 부모 인터페이스의 추상 메서드를 모두 오버라이딩해야 합니다.

package chapter20230828;

public class test01 {

	public static void main(String[] args) {
		Television television = new Television();
		television.turnOn();
		television.turnOff();
		television.volumeUp();
		television.volumeDown();
		
		Refrigerator refrigerator = new Refrigerator();
		refrigerator.turnOn();
		refrigerator.turnOff();
		
	}
}

package chapter20230828;



public interface RemoteControl { // interface의 가장 큰 특징은 추상 메서드만 정의 가능
	// 추상 메서드 정의, abstract생략되어있음
	public void turnOn(); // 가전 제품을 켠다
	public void turnOff(); // 가전 제품을 끈다
	
}
//새로 추가될 서브 인터페이스에 구현하면 RemoteControl 인터페이스를 구현하던 클래스의 에러는 사라짐 이 경우 예전의 인터페이스를 계속 사용할 것인지 아니면 새 버전으로 업그레이드 할 것인지 선택 가능
interface AdvancedRemoteControl extends RemoteControl { 
	public void volumeUp(); // 가전 제품의 볼륨을 높인다
	public void volumeDown(); // 가전 제품의 볼륨을 낮춘다
}
//implements - 인터페이스를 구현한다, 여러개의 인터페이스를 상속받을 수 있다, 자바에서는 다음과 같이 상속과 구현을 동시에 할 수 있습니다.
class Television implements AdvancedRemoteControl { 
	boolean on;
	
	@Override // 오버라이드 필수!
	public void turnOn() {
		on = true;
		System.out.println("TV가 켜졌습니다.");
		
	}

	@Override
	public void turnOff() {
		on = false;
		System.out.println("TV가 꺼졌습니다.");
		
	}
	@Override
	public void volumeUp() {
		on = true;
		System.out.println("TV의 볼륨을 높인다.");
		
	}

	@Override
	public void volumeDown() {
		on = true;
		System.out.println("TV의 볼륨을 낮춘다.");
		
	}
	
}
class Refrigerator implements RemoteControl {
	boolean on;
	
	@Override
	public void turnOn() {
		on = true;
		System.out.println("냉장고가 켜졌습니다.");
		
	}

	@Override
	public void turnOff() {
		on = false;
		System.out.println("냉장고가 꺼졌습니다.");
		
	}
}

0개의 댓글