Java

[JAVA] 인터페이스(interface)

HSRyuuu 2023. 2. 3. 17:55

인터페이스

  • 모든 메서드가 추상 메서드로 선언됨 ( 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();
		
	}

}

 

댓글수0