프로그래밍 언어/자바(JAVA)

자바(JAVA) - Interface default & static method

나아가는중 2022. 1. 23. 17:44
반응형

 jdk 1.8(java 8)부터 인터페이스에 default method와 static method가 추가되었습니다.

이전 버전에서는 인터페이스는 오직 추상 메서드만 가질 수 있었습니다.

 

default method

인터페이스에 새로운 메서드를 추가하거나 변경하게 되면 해당 인터페이스를 구현하는 모든 클래스들이 해당 메서드를 새로 구현해야 하는 불편함이 존재하였습니다. 그래서 이를 해결하기 위해 인터페이스에 default 메서드 기능을 추가하였습니다.

 

인터페이스는 추상 메서드만을 갖는 원칙이 있었습니다.

여러 인터페이스들간의 충돌을 방지하기 위해 추상 메서드만을 사용하도록 하였습니다.

 

하지만 default 메서드는 추상 메서드가 아닌 인스턴스 메서드로 '{ }' 바디를 가질 수 있습니다(구현될 수 있다). 

default 매서드는 바디를 갖기 때문에 다른 인터페이스의 default 매서드, 부모 클래스의 메서드와 충돌이 발생할 수 있습니다. 

 

다른 인터페이스의 default 메서드 간의 충돌 시 인터페이스를 구현한 클래스에서 default 매서드를 오바라이딩해서 해결합니다.

default 매서드를 구현하는 클래스는 default 메서드를 오버라이딩 할 수 있습니다.

 

부모 클래스의 메서드와 default 메서드가 충돌시 인터페이스의 default 메서드는 무시되며, 부모 클래스의 메서드가 상속됩니다.

 

 

static method

인터페이스가 아닌 다른 클래스에서는 static 매서드가 존재하였습니다.

jadk1.8 부터 static 메서드를 사용하여 간단한 기능을 갖는 유틸리티성 인터페이스를 만들 수 있게 되었습니다.

 

static 메서드는 객체 생성없이 '인터페이스이름.메서드이름()'으로 호출해야 합니다.

default 메서드와 마찬가지로 추상 메서드와 달리 구현을 해야합니다.

하지만, 인터페이스를 구현하는 클래스에서 오버라이딩은 불가합니다.

 

반응형