인터페이스
추상클래스와 인터페이스 개념이 같이 다니는데, 인터페이스가 훨씬 더 중요하다.
같은 기능을 수행하는 메서드들끼리 이름이나 인자, 아웃풋(리턴)이 다르면 구현이 불가함
==유지보수가 불리하다.
개발자의 제 1 목표는 유지보수 용이 극대화이다.
같은 기능을 수행하는 메서드들끼리 이름이나 인자, 아웃풋(리턴)이 같아야 하므로
메서드 시그니쳐를 강제해야 할 필요성이 있다.
오버라이딩을 하면 메서드 시그니쳐가 같기 때문에, 오버라이딩을 강제해야 한다!
하지만 오버라이딩은 상속관계에서만 사용할 수 있는데, 상속관계가 아닌 경우가 있다.
이럴 때 활용하는 것이 인터페이스이다.
인터페이스는
implements 인터페이스명
으로 사용한다.
예제.
워치를 활용하여 Phone의 powerOn과, soundUP/Down을 구현하고 싶을 때
인터페이스 PhoneAction
public interface PhoneAction{
void powerOn();
public abstract void soundUp();
public abstract void soundDown();
}
// 메서드 바디가 없다! == 추상 메서드라는 뜻
// 앞에 기재하지 않아도 public abstract가 기본으로 붙어있다!
package class05;
class Phone implements PhoneAction {
private Watch watch;
Phone(){
this(null);
}
Phone(Watch watch){
this.watch=watch;
}
public Watch getWatch() {
return watch;
}
public void setWatch(Watch watch) {
this.watch = watch;
}
@Override
public void powerOn() {
//Watch watch=new Watch();
this.watch.powerOn();
}
@Override
public void soundUp() {
// TODO Auto-generated method stub
}
@Override
public void soundDown() {
// TODO Auto-generated method stub
}
}
class Watch implements PhoneAction {
@Override
public void powerOn() {
System.out.println("워치를 활용한 전원ON");
}
@Override
public void soundUp() {
// TODO Auto-generated method stub
}
@Override
public void soundDown() {
// TODO Auto-generated method stub
}
}
public class Test02 {
}
클래스명 뒤쪽에 인터페이스 사용한다는 의미로
implements PhoneAction을 붙여서 사용한다.
실제 동작을 워치에서 하기 때문에,
인터페이스인 PhoneAction에서 오버라이딩 하여 Watch 클래스 안쪽에 실제 수행되는 동작을 수정해 주고,
Phone 클래스에서는 Watch 클래스를 받아와서 사용해야 하므로
멤버변수로 선언하여 사용해 준다.
'JAVA > java' 카테고리의 다른 글
[JAVA] MVC 패턴_1 (0) | 2024.07.17 |
---|---|
[JAVA] 컬렉션 (배열리스트와 맵) (0) | 2024.07.17 |
[JAVA] 객체지향언어의 특징_추상화 (0) | 2024.07.16 |
[JAVA] 객체지향언어의 특징_캡슐화 (0) | 2024.07.16 |
[JAVA] 객체지향언어의 특징_다형성 (2) | 2024.07.16 |