인터페이스는 추상클래스와 달리 클래스가 아니며 extends가 아닌 implements해서 실체를 구현해야 한다.
추상화된 공통 형태를 제공하는 녀석으로 이것을 인터페이싱한 클래스에서 동일한 기능을 하는 메소드가 존재하도록 구현을 강제하는 역할을 수행한다.
구현 객체의 동일한 동작을 보장하기 위해서 사용되며 동일 인터페이스를 사용한 클래스는 동일한 동작 (상호작용)을 하는 메서드를 갖는다.
객체가 A를 인터페이싱하였다면 항상 동일한 접근을 통해 제어(예를 들어 DI : 의존성주입)가 보장된다. 스프링 프레임워크에서 이 인터페이스를 유난히 많이 사용한다.
말이 어렵고 설명하기도 어렵다. '내가 이렇게 생겼으니까 너도 이렇게 생겨야 해' 머 이런 식의 껍데기만 제공한다고 보면 될 것 같다.
implements 문을 사용하여 인터페이스의 형체를 따라 실체를 구현
package javaStudy;
interface TV{
public int MAX_VOLUME = 100;
public int MIN_VOLUME = 0;
public void turnOn();
public void turnOff();
public void changeVolume(int volume);
public void changeChannel(int channel);
}
//인터페이스는 implements를 사용해서 구현하며 모든 메소드를 정의하여야 한다.
//정의하지 않으면 추상클래스가 되어 인스턴스를 생성할 수 없다.
class LedTV implements TV{
public void turnOn(){
System.out.println("켜다");
}
public void turnOff(){
System.out.println("끄다");
}
public void changeVolume(int value){
System.out.println(value + "로 볼륨조정하다.");
}
public void changeChannel(int number){
System.out.println(number + "로 채널조정하다.");
}
}
public class LedTVExam{
public static void main(String args[]){
TV tv = new LedTV();
tv.turnOn();
tv.changeVolume(50);
tv.changeChannel(6);
tv.turnOff();
}
}
TV인터페이스는 클래스가 아니다. 클래스의 틀로 추상상태의 껍데기이다.
인터페이스는 클래스가 아니므로 상속받을 수 없고 implements 키워드로 구현해야 한다.
implements한 클래스는 모든 메소드를 정의해서 실체화 시켜야 한다.
실체가 구현된 LedTV 클래스는
TV tv = new LedTV(); TV인터페이스를 채용한 tv 객체로 생성되서
tv.turnOn(); 전원도 켜고
tv.changeVolume(50); 볼륨도 바꾸고
tv.changeChannel(6); 채널도 바꾸고
tv.turnOff(); 전원을 끈다.
'JAVA' 카테고리의 다른 글
super키워드 - 부모 클래스 접근 (0) | 2023.01.24 |
---|---|
오버라이드 & 클래스 형변환 (1) | 2023.01.24 |
자바 예외처리 try ~ catch ~ finally (0) | 2023.01.24 |
자바 list (0) | 2023.01.24 |
자바 hashmap (0) | 2023.01.24 |
댓글