목차
- 인터페이스와 추상클래스의 차이
- 상수가 올 수 있다.
- 인터페이스와 인터페이스의 상속 관계
- 다중 상속 관계 구현하기
핵심
- 인터페이스는 다형성을 100% 보장하기 위해 사용한다.
- 인터페이스는 자식 클래스를 100% 핸들링할 수 있다
인터페이스와 추상클래스의 차이
인터페이스는 모든 메서드가 추상 메서드인 클래스를 말한다. 추상 클래스와의 차이는 모든 메서드가 추상 메서드라는 점이다. 즉, 구현 메서드는 절대 정의할 수 없다. 그럼 왜? 인터페이스와 추상 클래스는 나눴을까?
인터페이스는 서로 다른 기능을 가진 자식 클래스를 모아 다형성을 이용할 때 필요하다. 왜냐하면 구현 메서드가 없기 때문에 모든 자식 클래스에 적용되는 기능이 없다는 말이다. 각자 자식 클래스에서 부모의 메서드를 자기에게 맞게 override하면 된다.
추상 클래스는 기능이 비슷한 자식 클래스를 모아 다형성을 이용할 때 필요하다. 추상 클래스는 추상 메서드를 가질 수 있지만 모든 메서드가 100% 추상 메서드는 아니다. 구현 메서드로 자식 클래스 전체에 해당하느 기능은 정의할 수 있다.
-2019.12.31- TV class 코드 추가
예시
public interface RemoCon {
int MAXCH =100;
int MINCH = 1;
void chUp();
void chDown();
void internet();
}
public class TV implements RemoCon {
int currCH = 70;
@Override
public void chUp() {
if (currCH < RemoCon.MAXCH) {
currCH++;
} else {
currCH = 1;
}
System.out.printf("TV 채널이 올라간다. : %d\n", currCH);
}
}
상수가 올 수 있다.
인터페이스는 모든 메서드가 추상 메서드이기 때문에 객체 생성이 불가능하다. 그래서 상수를 사용하려면 인터페이스이름.상수이름 이렇게 표기해야한다. 이와 관련해서는 private생성자 <- 여기로
RemoCon.MAXCH // 인터페이스 RemoCon의 상수 MAXCH
인터페이스와 인터페이스의 상속 관계
인터페이스끼리도 상속을 할 수 있다. 그 때 extends 키워드를 사용한다. 만약 다른 인터페이스를 상속받은 인터페이스가 있다고 하자. 이 인터페이스 implements하는 클래스는 모든 인터페이스의 메서드를 override 해야한다.
public interface A {
public void x();
}
public interface B extends A {
public void y();
}
public class C implements B {
public void x() {
재정의
}
public void y() {
재정의
}
}
B r = new c();
다중 상속 관계 구현하기
자바에서 클래스는 한 번의 상속만 가능하다. 하지만 인터페이스가 있다면 다중 상속이 가능하다. 그럼 왜 다중 상속이 필요할까?
예를 들어, Dog라는 클래스를 설계하려고 할 때 Dog는 Animal도 되고, Pet도 되고, Robot도 가능하다. 그렇기 때문에 하나의 종류만 확정할 수 없다. 각 종류에 맞게 인터페이스를 구현하면 훨씬 정교하게 Dog를 설계할 수 있다.
public class Dog extends Animal implements Pet, Robots {
}
'프로그래밍 > Java' 카테고리의 다른 글
19.12.25) Java - Object (0) | 2019.12.25 |
---|---|
19.12.25) Java - Interface & JDBC (0) | 2019.12.25 |
19.12.24) Java - abstract class VS interface (0) | 2019.12.24 |
19.12.24) Java - abstract class (0) | 2019.12.24 |
19.12.24) Java - message polymorphism(다형성) (0) | 2019.12.24 |