인터페이스란?
interface 인터페이스 이름 {
public static final float pi = 3.14F;
public void makeSomething();
}
- 모든 메서드가 추상 메서드로 선언됨 public abstract
- 모든 변수는 상수로 선언됨 public static final
- Java 8부터 default method 와 정적 메서드(static method) 기능의 제공으로 일부 구현 코드가 있음
인터페이스 정의와 구현
점선 화살표는 구현한다(implements)는 의미
인터페이스는 상속이 아닌 구현한다(implements)는 개념
Calc 인터페이스를 Calculator 클래스가 구현하고 CompleteCalc 클래스가 상속받음
CompleteCalc는 Calc를 타입상속(Calc 인터페이스 타입이라는 의미)함
클래스는 여러개의 클래스를 상속 받을 수 없지만(1개만 상속받을 수 있음), 클래스는 여러개의 interface를 implements 할 수 있음
Calc.java
package ch11;
public interface Calc {
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);
}
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{
@Override
public int times(int num1, int num2) {
return num1 * num2;
}
@Override
public int divide(int num1, int num2) {
if (num2 == 0)
return ERROR;
else
return num1 / num2;
}
public void showInfo() {
System.out.println("모두 구현하였습니다.");
}
}
CalculatorTest.java
package ch11;
public class CalculatorTest {
public static void main(String[] args) {
Calc calc = new CompleteCalc();
int num1 = 10;
int num2 = 2;
System.out.println(num1 + "+" + num2 + "=" + calc.add(num1, num2));
System.out.println(num1 + "-" + num2 + "=" +calc.substract(num1, num2));
System.out.println(num1 + "*" + num2 + "=" +calc.times(num1, num2));
System.out.println(num1 + "/" + num2 + "=" +calc.divide(num1, num2));
}
}
인터페이스 구현과 형 변환
Calc calc = new CompleteCalc();
- 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환할 수 있음
- 상속에서의 형 변환과 동일한 의미
- 클래스 상속과 달리 구현 코드가 없으므로 여러 인터페이스를 구현할 수 있음 (cf. extends)
- 형 변환되는 경우 인터페이스에 선언된 메서드만을 사용가능함
2023 KAKAO Tech Campus_BackEnd 필수 과정
Java 3주차 강의 정리 내용입니다.
'💻 개발 > Java' 카테고리의 다른 글
자바 기본과 객체 지향 (1) - 자바의 특징과 프로그램 실행 과정 (0) | 2024.10.31 |
---|---|
[3주차] Java 중급 - 인터페이스는 왜 사용하는가 (0) | 2023.06.25 |
[3주차] Java 중급 - 추상 클래스를 활용한 템플릿 메서드 패턴 (0) | 2023.06.25 |
[3주차] Java 중급 - 추상 클래스의 의미와 구현하는 방법 (0) | 2023.06.25 |
[3주차] Java 중급 - 다운 캐스팅과 instanceof (0) | 2023.06.25 |