본문 바로가기
언어/JAVA

인터페이스(interface)

by step 1 2021. 4. 19.
반응형
  • 모든 메서드가 추상 메서드로 선언됨 public abstract
  • 모든 변수는 상수로 선언됨 public static final

인터페이스 구현과 형 변환

  • 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형 변환 할 수 있음 CalcCalc calc = new CompleteCalc(); 
  • 상속에서의 형 변환과 동일한 의미
  • 클래스 상속과 달리 구현 코드가 없으므로 여러 인터페이스를 구현할 수 있음(cf. extends)
  • 형 변환되는 경우 인터페이스에 선언된 메서드만을 사용가능함
package ch32;

public interface Calc {

	double PI = 3.14;
	int ERROR = -999999;
	
	int add(int num1, int num2);
	int substract(int num1, int num2);
	int times(int num1, int num2);
	int divide(int num1, int num2);
}
package ch32;

// 모두 구현하지 않을 경우 추상 클래스가 된다
public abstract class Calculater implements Calc{

	@Override
	public int add(int num1, int num2) {
		// TODO Auto-generated method stub
		return num1 + num2;
	}

	@Override
	public int substract(int num1, int num2) {
		// TODO Auto-generated method stub
		return num1 - num2;
	}

	

	
}
package ch32;

public class CompleteCalc extends Calculater{

	@Override
	public int times(int num1, int num2) {
		// TODO Auto-generated method stub
		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("모두 구현했습니다.");
	}
}
package ch32;

public class CalculaterTest {

	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));
		
		
	}
}

결과

 

인터페이스 사용 이유

  • 클래스나 프로그램이 제공하는 기능을 명시적으로 선언
  • 일종의 클라이언트 코드와의 약속이며 클래스나 프로그램이 제공하는 명세
  • 클라이언트 프로그램은 인터페이스에 선언된 명세만 보고 이를 구현한 클래스를 사용할 수 있음
  • 어떤 객체가 하나의 인터페이스 타입이라는 것은 그 인터페이스가 제공하는 모든 메서드를 구현했다는 의미
  • 인터페이스를 구현한 다양한 객체를 사용함 - 다형성
반응형