반응형
- 모든 메서드가 추상 메서드로 선언됨 public abstract
- 모든 변수는 상수로 선언됨 public static final
인터페이스 구현과 형 변환
- 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환 할 수 있음 CalcCalc calc = new CompleteCalc();
- 상속에서의 형 변환과 동일한 의미
- 클래스 상속과 달리 구현 코드가 없으므로 여러 인터페이스를 구현할 수 있음(cf. extends)
- 형 변환되는 경우 인터페이스에 선언된 메서드만을 사용가능함
package ch32;
public interface Calc {
double PI = 3.14;
int ERROR = -999999;
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
}
package ch32;
// 모두 구현하지 않을 경우 추상 클래스가 된다
public abstract class Calculater implements Calc{
@Override
public int add(int num1, int num2) {
// TODO Auto-generated method stub
return num1 + num2;
}
@Override
public int substract(int num1, int num2) {
// TODO Auto-generated method stub
return num1 - num2;
}
}
package ch32;
public class CompleteCalc extends Calculater{
@Override
public int times(int num1, int num2) {
// TODO Auto-generated method stub
return num1 * num2;
}
@Override
public int divide(int num1, int num2) {
if (num2 == 0) {
return ERROR;
}
return num1/num2;
}
public void showInfo() {
System.out.println("모두 구현했습니다.");
}
}
package ch32;
public class CalculaterTest {
public static void main(String[] args) {
int num1 = 10;
int num2 = 2;
// 형변환
Calc calc = new CompleteCalc();
System.out.println(calc.add(num1, num2));
System.out.println(calc.substract(num1, num2));
System.out.println(calc.times(num1, num2));
System.out.println(calc.divide(num1, num2));
}
}
인터페이스 사용 이유
- 클래스나 프로그램이 제공하는 기능을 명시적으로 선언
- 일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세
- 클라이언트 프로그램은 인터페이스에 선언된 명세만 보고 이를 구현한 클래스를 사용할 수 있음
- 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미
- 인터페이스를 구현한 다양한 객체를 사용함 - 다형성
반응형
'언어 > JAVA' 카테고리의 다른 글
인터페이스의 요소 (0) | 2021.04.19 |
---|---|
인터페이스를 활용한 dao 구현 (0) | 2021.04.19 |
추상 클래스 응용 - 템플릿 메서드 패턴 (0) | 2021.04.18 |
추상 클래스(abstract class) 구현 (0) | 2021.04.18 |
다운 캐스팅과 instanceof (0) | 2021.04.18 |