본문 바로가기
개발/Java

[3주차] Java 중급 - 구현 코드가 없는 인터페이스

by 컴쏘 2023. 6. 25.
728x90

인터페이스란?

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주차 강의 정리 내용입니다.
728x90