인터페이스의 여러가지 요소

0

Java 공부

목록 보기
14/18
post-thumbnail

디폴트 메서드 (자바8 이후)

  • 구현을 가지는 메서드, 인터페이스를 구현하는 클래스들에서 공통으로 사용할 수 있는 기본 메서드
  • default 키워드 사용
  • 구현하는 클래스에서 재정의 할 수 있음
  • 인터페이스를 구현한 클래스의 인스턴스가 생성 되어야 사용 가능함

정적 메서드(자바8 이후)

  • 인스턴스 생성과 상관없이 인터페이스 타입으로 사용할 수 있는 메서드

private 메서드(자바9 이후)

  • 인터페이스를 구현한 클래스에서 사용하거나 재정의 할 수 없음
  • 인터페이스 내부에서만 사용하기 위해 구현하는 메서드
  • default메서드나 static 메서드에서 사용함

사용해보기

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() { // 디폴트 메서드(자바8 이후부터)
		System.out.println("정수 계산기를 구현합니다.");
		myMethod();
	}

	static int total(int[] arr) { // 정적 메서드(자바8 이후부터)
		int total = 0;
		for (int num : arr) {
			total += num;
		}
		myStaticMethod();
		return total;
	}
}
  • CalcTest
public class CalcTest {

	public static void main(String[] args) {
    
		Calc calc = new CompleteCalc();
		int num1 = 223;
		int num2 = 20;
		
		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}; //static 메서드이기에 
		System.out.println(Calc.total(arr)); // total은 인터페이스 이름으로 바로 호출되어 사용 가능하다.
	}
}

이미 제공하고 있는 디폴트메서드를 제정의 해보기

package basics14;

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;
		}else {
			return num1/num2;
		}
	}

	public void showIngo() {
		System.out.println("모두 완료하였습니다.");
	}

	@Override
	public void description() {
		System.out.println("오버라이딩된 description");
	}
}

private 메서드 사용해보기

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() { // 디폴트 메서드(자바8 이후부터)
		System.out.println("정수 계산기를 구현합니다.");
		myMethod();// static 메서드 사용해보기
	}

	static int total(int[] arr) { // 정적 메서드(자바8 이후부터)
		int total = 0;
		for (int num : arr) {
			total += num;
		}
		myStaticMethod(); // static 메서드 사용해보기
		return total;
	}
	
	// static 메서드 사용해보기
	private void myMethod() { //default 메서드에서 활용
		System.out.println("private myMethod");
	}
	private static void myStaticMethod() { // static 메서드 에서 활용
		System.out.println("myStaticMethod");
	}
}
    1. 이미 제정의된 디폴트 메서드는 오버라이딩된 description를 출력하고 있다.
    1. static 메서드는 잘 출력되는 모습.

0개의 댓글