Burninghering's Blog
article thumbnail

인터페이스(interface)

1. 인터페이스란?

  • 모든 메서드가 추상 메서드로 선언됨 public abstract (내가 선언하지 않아도 abstract로 컴파일됨)
  • 모든 변수는 상수로 선언됨 public static final (구현코드가 없기 때문에 멤버 변수를 가질 수 없음)
interface 인터페이스 이름{

    public static final float pi = 3.14F;
    public void makeSomething();
}

 

2. 인터페이스 정의와 구현

클래스가 인터페이스를 "구현"한다

Calc.java

package ch11;

public interface Calc {
	double PI=3.14;
	int ERROR=-999999999;
	
	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 { //Calculator를 상속받고, Calc 인터페이스의 타입이다. 

	@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

package ch11;

public class CalculatorTest {

	public static void main(String[] args) {
		
		int num1=10;
		int num2=2;
		Calc calc = new CompleteCalc(); //Calc 인터페이스 타입을 가진 CompleteCalc의 인스턴스
		//타입이 Calc이기 때문에 clac 객체는 Calc 안의 변수만 사용 가능 
		
		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));
		
		CompleteCalc calc2 = new CompleteCalc();
		calc2.showInfo();
	}
}

결과

 

3. 인터페이스 구현과 형 변환

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

profile

Burninghering's Blog

@개발자 김혜린

안녕하세요! 반갑습니다.