[JAVA] 인터페이스 static메서드와, default메서드

YuLim·2023년 2월 16일
1

💻 인터페이스(Interface)

일종의 추상클래스이다. 하지만 추상클래스보다 추상화 정도가 높아서 오직 추상메서드와 상수만을 멤버로 가질 수 있다.

인터페이스 멤버들의 제약사항

  • 모든 멤버변수는 public static final이어야 하며, 이는 생략 가능하다.
  • 모든 메서드는 public abstract 이어야 하며, 이는 생략 가능하다.
  • 단, static메서드와 default메서드는 예외(JDK1.8 부터)

📝 static 메서드

인스턴스와 관계가 없는 독립적인 메서드
static메서드 역시 접근 제어자가 항상 public이며, 이는 생략 가능하다.

interface Myinterface {
	static void staticMethod() {
    	System.out.println("staticMethod() of interface"); // 구현부 존재
    }
}

사용
인터페이스명.static메서드명
Myinterface.staticMethod();

static멤버의 상속
static멤버들은 자신들이 정의된 클래스에 묶여있다고 생각해야 한다.
호출할 때 꼭 클래스이름.static멤버이름으로 호출


📝 default 메서드

default메서드 역시 접근 제어자가 항상 public이며, 이는 생략 가능하다.

interface Myinterface {
	default void defaultMethod() {
    	System.out.println("defaultMethod() of interface"); // 구현부 존재
    }
}

인터페이스의 default메서드는 구현 클래스에서 직접 구현하지 않아도 된다.
인터페이스의 구현 클래스에 default메서드가 자동으로 구현된다.(마치 상속처럼)

  • default메서드가 기존의 메서드와 이름이 중복되어 충돌하는 경우 충돌 해결 규칙
    • 여러 인터페이스의 default메서드 간의 충돌
      • 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 한다.
    • default메서드와 조상 클래스의 메서드 간의 충돌
      • 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.

참고
Java의 정석_남궁성

profile
개인 공부 기록장

0개의 댓글