인터페이스(interface)
1. 인터페이스란?
- 모든 메서드가 추상 메서드로 선언됨 public abstract (내가 선언하지 않아도 abstract로 컴파일됨)
- 모든 변수는 상수로 선언됨 public static final (구현코드가 없기 때문에 멤버 변수를 가질 수 없음)
interface 인터페이스 이름{
public static final float pi = 3.14F;
public void makeSomething();
}
2. 인터페이스 정의와 구현
Calc.java
package ch11;
public interface Calc {
double PI=3.14;
int ERROR=-999999999;
int add(int num1,int num2);
int substract(int num1,int num2);
int times(int num1,int num2);
int divide(int num1,int num2);
}
Calculator.java
package ch11;
public abstract class Calculator implements Calc {
@Override
public int add(int num1, int num2) {
return num1+num2;
}
@Override
public int substract(int num1, int num2) {
return num1-num2;
}
}
CompleteCalc.java
package ch11;
public class CompleteCalc extends Calculator { //Calculator를 상속받고, Calc 인터페이스의 타입이다.
@Override
public int times(int num1, int num2) {
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("모두 구현했습니다.");
}
}
CalculatorTest.java
package ch11;
public class CalculatorTest {
public static void main(String[] args) {
int num1=10;
int num2=2;
Calc calc = new CompleteCalc(); //Calc 인터페이스 타입을 가진 CompleteCalc의 인스턴스
//타입이 Calc이기 때문에 clac 객체는 Calc 안의 변수만 사용 가능
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));
CompleteCalc calc2 = new CompleteCalc();
calc2.showInfo();
}
}
3. 인터페이스 구현과 형 변환
- 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환 할 수 있음
Calc calc = new CompleteCalc();
- 상속에서의 형 변환과 동일한 의미 (타입 상속)
- 클래스 상속과 달리 구현 코드가 없으므로 여러 인터페이스를 구현할 수 있음 ( cf. extends)
- 형 변환되는 경우 인터페이스에 선언된 메서드만을 사용가능함
'JAVA' 카테고리의 다른 글
3-13.객체 지향 핵심 - 인터페이스를 활용한 다형성 구현 (0) | 2022.01.23 |
---|---|
3-12.객체 지향 핵심 - 인터페이스는 왜 쓰는가? (0) | 2022.01.23 |
3-10.객체 지향 핵심 - 추상 클래스의 응용_템플릿 메서드 패턴 (3) | 2022.01.22 |
3-9.객체 지향 핵심 - 추상 클래스(abstract class) (0) | 2022.01.22 |
3-8.객체 지향 핵심 - 다운캐스팅, instanceof (0) | 2022.01.22 |