인터페이스로 다형성 구현

겨울조아·2023년 3월 15일
0
post-thumbnail

인터페이스

  • 모든 메서드가 추상 메서드로 선언됨
    • public abstract
  • 모든 변수는 상수로 선언됨
    • public static final
  • 자바 8 부터 디폴트 메서드(default method)와 정적 메서드(static method) 기능의 제공으로 일부 구현 코드가 있음
    • default 메서드 : 구현을 가지는 메서드, 인터페이스를 구현하는 클래스들에서 공통으로 사용할 수 있는 기본 메서드, 재정의 가능
    • static 메서드 : 인스턴스 생성과 상관 없이 인터페이스 타입으로 사용할 수 있는 메서드
    • private 메서드 (자바9 이후) :

인터페이스를 활용한 다형성 구현 (dao 구현하기)

인터페이스를 활용한 다형성 구현(dao 구현하기)



인터페이스 default, static, private 메서드 예시

Calc.java

// 인터페이스 -> 메서드 구현이 없다?!
// 모든 메서드가 추상 메서드로 선언됨 public abstract
// 모든 변수는 상수로 선언됨 public static final
// 자바 8 부터 디폴트 메서드(default method)와 정적 메서드(static method) 기능의 제공으로 일부 구현 코드가 있음
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);

	default void description() {
		myMethod();
		mystaticMethod(); // 가능, 인스턴스 생성과 상관없음
		System.out.println("정수를 계산합니다. ");
	}

	// 인터페이스 내부에서만 사용, default 메서드에서 호출 가능
	private void myMethod() {
		System.out.println("private method");
	}

	static int total(int[] arr) {
		// myMethod(); => 얘는 불가능
		// 왜냐면 instance가 생성이 되고 나야 불릴 수 있는 메서드임
		// private이더라도 불가능
		mystaticMethod();
		int total = 0;

		for (int i : arr) {
			total += i;
		}
		return total;
	}

	private static void mystaticMethod() {
		System.out.println("private static method");
	}
}

Calculator.java

// implements (interface 구현)
// 부모 객체는 선언만 하며 정의(내용)은 자식에서 오버라이딩해서 사용해야함
// 자바는 다중상속을 못함 => 여러 개 인터페이스올 수 있다.
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;
	}

//	@Override
//	public void description() {
//		System.out.println("사칙연산을 수행하는 계산기입니다.");
//	}
}

CompleteCalc.java

// extends 이용
public class CompleteCalc extends Calculator {

	@Override
	public int times(int num1, int num2) {
		return num1 * num2;
	}

	@Override
	public int divide(int num1, int num2) {
		return num1 / num2;
	}
}

CalculatorTest.java

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.description();

		int[] arr = { 1, 2, 3, 4, 5 };
		int total = Calc.total(arr);
		System.out.println(total);
	}
}

결과

0개의 댓글