java8 - 인터페이스의 default, static

회사 코드를 보던 중 발견한 default...?

바로 코드로 보자

1. 기본 선언

Test Interface

public interface Test {
    default void callDefault() {
    	System.out.println("I'm default");
    }
    
    static void callStatic() {
    	System.out.println("I'm static");
    }
}

TestImpl Class

public class TestImpl implements Test {
	
}

Main Class

public class TestMain {
	public static void main(String[] args) {
    	Test test = new TestImpl();
        test.callDefault();		//"I'm default"
        Test.callStatic();		//"I'm static"
    }
}

2. 특이점

  • interface의 method들이 body를 가질 수 있다!
  • 구현체인 TestImpl class에서 override를 하지 않아도 에러가 나지 않는다!

3. 추가 테스트

TestImpl Class

public class TestImpl implements Test {
	@Override
    public void callDefault() {
    	System.out.println("I'm overrided default!");
    }
}

Main Class

public class TestMain {
	public static void main(String[] args) {
    	Test test = new TestImpl();
        test.callDefault();		//"I'm overrided default!"
        Test.callStatic();		//"I'm static"
    }
}

4. 그럼 abstract class와의 차이는...?

  • 말 그대로 interface 와 class의 차이!
    - 다수의 interface를 구현(implements)할 수 있지만, 하나의 클래스만을 상속(extends)해야 한다.
    - 생성자 차이도 존재
  • interface의 멤버 변수는 상수(constant)만을 가져야 하지만, abstract class는 아니다.
  • 접근제어자의 차이도 존재

좋은 웹페이지 즐겨찾기