package ex0726;

public class Ex07_interface {
	public static void main(String[] args) {
		int s = Demo7.sum(10);
		System.out.println(s);
		
		Demo7 dm = new DemoImpl7();
		int x = dm.max(5, 10);
		dm.write(x);
	}
}
// interface는 순수하게 선언하는 것만 하는 게 더 좋을 것 같다 = 쌤
interface Demo7 {
	public void write(int n);
	
	// JDK 8부터 가능. 인터페이스를 이용하여 바로 접근 가능
	public static int sum(int n) {
		int s = 0;
		for( int i=1; i<=n; i++) {
			s+=i;
		}
		return s;
	}

	// JDK 8부터 가능. 
	// default 키워드를 이용하여 메소드 구현 가능
	// 구현 클래스에서 재정의 가능
	public default int max(int m, int n) {
		return m > n ? m : n;
	}
}

class DemoImpl7 implements Demo7 {
	@Override
	public void write(int n) {
		System.out.println("결과 : " + n);
		
	}
}

원래 interface는 추상클래스의 일종이므로 선언된 것을 다른 클래스에서 재정의를 하고 그 클래스를 생성해서 재정의된 메소드를 부르는 식 or 다른 클래스에 있는 static 메소드는 객체 생성없이 접근 가능임 여기서는 인터페이스에 구현된 static 클래스도 바로 접근이 가능함을 보았다. 또 default키워드를 이용해 메소드 구현이 가능하다. (이 전에는 틀을 만들어주었기 때문에 굳이 메소드를 구현하지 않고 다른 클래스에서 재정의해서 사용했었다) 물론 구현클래스에서 재정의도 가능하다. 

원래 interface클래스에 선언된 메소드를 구현 클래스에서 재정의를 하지 않으면 안됐는데 default로는 interface에 있는 메소드를 재정의하지 않고도 접근할 수 있다.  

 

+ Recent posts