민서네집

Interface로 다중상속을 대체할 수 있음을 보여주는 예제 본문

Java

Interface로 다중상속을 대체할 수 있음을 보여주는 예제

브라이언7 2015. 1. 7. 16:06

Java 에서는 다중 상속이 허용되지 않고, 단일 상속만 허용되지만 인터페이스로 다중 상속의 기능을 대신할 수 있다고 한다. 어떤 경우에 그렇게 사용할 수 있는지 소스로 표현해 봤다.


아래와 같이 어떤 Framework를 만들고, 실행되는 실제 동작은 프로그래머마다 필요에 따라 다르게 적용하고 싶은 경우, 외부에 제공하는 껍데기 역할을 하는 추상 클래스를 만들어서 상속받아서 만들어도 되고, 인터페이스를 구현해서 만들어도 된다. 이 두 가지는 똑같은 역할을 하기 때문에 이런 경우 상속을 인터페이스로 대체할 수 있다.


프로그램 설계를 이와 같이 하면 상속을 받아서 오버라이딩(Overriding) 하지 않고, 인터페이스를 구현(Implements) 하는 것으로 해서 동일한 역할을 할 수 있다.



package framework;

public class Framework {

	private int a = 10;

	private int b = 5;

	// 인터페이스를 이용하는 경우
	public void print(CalculatorInterface calcInterface) {
		System.out.println(calcInterface.calculate(a, b));
	}

	// 상속을 이용하는 경우
	public void print(BaseCalculator baseCalculator) {
		System.out.println(baseCalculator.calculate(a, b));
	}
}

package framework;

public interface CalculatorInterface {

	public int calculate(int a, int b);

}

package framework;

public abstract class BaseCalculator {

	abstract public int calculate(int a, int b);

}


package application;

import framework.BaseCalculator;
import framework.CalculatorInterface;
import framework.Framework;

public class App {

	public static void main(String[] args) {

		Framework framework = new Framework();

		// Interface 이용
		CalculatorInterface calcInterface = new MulitiplyCalculator();

		framework.print(calcInterface);

		// 상속을 이용
		BaseCalculator baseCalculator = new MulitiplyCalculator2();

		framework.print(baseCalculator);
	}

}

package application;

import framework.CalculatorInterface;

public class MulitiplyCalculator implements CalculatorInterface  {

	@Override
	public int calculate(int a, int b) {
		return a * b;
	}

}

package application;

import framework.BaseCalculator;

public class MulitiplyCalculator2 extends BaseCalculator {

	@Override
	public int calculate(int a, int b) {
		return a * b;
	}

}



Comments