인터페이스
- 모든 메서드가 추상 메서드로 선언됨 ( public abstract )
- 모든 변수는 상수로 선언됨 ( public static final )
- 추상 클래스와 마찬가지로 직접 인스턴스 생성 불가
- 추상클래스와 달리 일반 메서드, 생성자를 가질 수 없음
- 필드도 static final(생략 가능)을 붙인 상수화한 필드만 사용할 수 있으며 반드시 초기화해야 함
< 인터페이스를 쓰는 이유 >
- 프로그램이 제공하는 기능을 명시적으로 선언
- 일종의 클라이언트 코드와의 약속, 클래스나 프로그램이 제공하는 명세(specification) 이다.
- 클라이언트 프로그램은 인터페이스에 선언된 메서드만 보고 이를 구현한 클래스를사용할 수 있음
< 예제 >
1. interface Calc
- 상수 PI, ERROR은 static final이 생략되어있음.
public interface Calc {
//상수 (static final이 생략되어있음)
double PI = 3.14;
int ERROR = -99999999;
//추상 메서드
int add(int num1,int num2);
int substract(int num1,int num2);
int times(int num1,int num2);
int divide(int num1,int num2);
}
2. class Calculator implements Calc
- add(), substract()만 구현되어 있음
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;
}
}
3. class CompleteCalc extends Calculator
- times(), divide()까지 구현되어 있는 클래스
- 추가로 showInfo() 메서드 구현
public class CompleteCalc extends Calculator{
@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("모두 구현했습니다.");
}
}
4. test code
- calc 객체는 Calc형 이기 때문에 CompleteCalc클래스의 메서드 showInfo()는 사용할 수 없다.
- showInfo()를 사용하려면 CompleteCalc형 객체로 생성해야 한다.
public class Test {
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));
// calc.showInfo(); //오류
CompleteCalc compCalc = new CompleteCalc();
compCalc.showInfo();
}
}
반응형
'JAVA & Spring > JAVA 이론' 카테고리의 다른 글
[JAVA] 추상 클래스 (abstract class) (0) | 2023.05.18 |
---|---|
[JAVA] 상속 (0) | 2023.05.17 |
[JAVA] static과 final (0) | 2023.05.17 |
[JAVA] 접근 제어 지시자( private, protected, default, public) / 정보은닉, 캡슐화 (0) | 2023.05.17 |
[JAVA] 생성자 / 오버로딩(overloading) (0) | 2023.05.17 |