인터페이스란?
- 모든 메서드가 추상 메서드로 선언됨 public abstract
- 모든 변수는 상수로 선언됨 public static final
- 추상 메서드의 집합
- 구현된 것이 전혀 없는 설계도, 껍데기(모든 멤버가 public)
인터페이스가 하는일
- 클래스나 프로그램이 제공하는 기능을 명시적으로 선언
- 일종의 클라이언트 코드와 약속이며 클래스나 프로그램이 제공하는 명세
- 클라이언트 프로그램은 인터페이스에 선언된 명세만 보고 이를 구현한 클래스를 사용할 수 있음
- 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미
- 인터페이스를 구현한 다양한 객체를 사용함 - 다형성
- 예) JDBC 인터페이스
인터페이스 구현 방법
- 멤버 변수에 public static final 생략 가능
- 메소드에 public abstract 생략 가능
interface 인트페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
- 인터페이스에 정의된 추상 메서드를 완성 하는 것
class 클래스이름 implements 인터페이스이름 {
// 인터페이스에 정의된 추상메서드를 모두 구현
}
인터페이스의 상속
- 인터페이스의 조상은 인터페이스만 가능 (클래스 같은 경우는 다중 상속이 불가)
- 다중 상속이 가능 (추상메서드는 충돌해도 문제 없음)
interface Fightable extends Movable, Attackable {}
interface Movable {
void move(int x, int y);
}
interface Attackable {
void attack(Unit u);
}
인터페이스 구현
Calc.java
public interface Calc {
double PI = 3.14; // public static final 생략 가능
int ERROR = -99999999;
int add(int num1, int num2); // public abstract 생략 가능
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
}
Calculator.java
- 인터페이스에 일부 메소드 만 구현 해서 abstract를 붙여 추상 클래스로 구현
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) {
// TODO Auto-generated method stub
return num1 - num2;
}
}
CompleteCalc.java
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("모두 구현했습니다.");
}
}
테스트
CalculatorTest.java
public class CalculatorTest {
public static void main(String[] args) {
int num1 = 10;
int num2 = 2;
CompleteCalc 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 calc = new CompleteCalc();
- 상속에서의 형 변환과 동일한 의미
- 클래스 상속과 달리 구현 코드가 없으므로 여러 인터페이스를 구현할 수 있음
- 형 변화되는 경우 인터페이스에 선언된 메서드만들 사용가능함
추상 클래스와 인터페이스의 차이점
- 인터페이스는 iv를 가질 수 없다.
참고 :
Fastcampus
'JAVA' 카테고리의 다른 글
| [JAVA] 여러 인터페이스 구현하기, 인터페이스의 상속 (1) | 2023.08.09 |
|---|---|
| [JAVA] 인터페이스의 여러가지 요소 (1) | 2023.08.07 |
| [JAVA] 추상 클래스의 응용 - 템플릿 메서드 패턴 (0) | 2023.07.30 |
| [JAVA] 추상 클래스의 의미와 구현하는 방법 (0) | 2023.07.30 |
| [JAVA] instanceof 연산자 와 업캐스팅,다운캐스팅 (0) | 2023.07.28 |