본문 바로가기

language/자바

[java] default method 디폴트 메소드 (feat. abstract class)

default method

interface에서 내용이 있는 메소드

인터페이스는 원래 추상메소드 100퍼센트다

하지만 default 를 붙여줌으로 내용을 추가할수있다.

 

 

 

등장배경

상황 : 한 오픈소스의 인터페이스가 많이 사용되고있다.
          해당 인터페이스에 메소드를 추가하고싶어졌다.

          인터페이스 특성상 메소드가 추가되면
           이 인터페이스를 구현하고 있는 모든 클래스에서는 해당 메소드를 구현해주어야한다.
          -> 추가하지않으면 오류가 발생

해결 : 꼭 구현하지 않아도 되는 메소드를 넣자 - > default method
대신 디폴트 메소드는 추상이 아닌 무조건 내용이 있어야한다.

 

 

 

 

생각할점

 그러면 abstract class와 무엇이 다른가?

여러 메소드들 중에 골라서 구현하는 것이 꼭 추상클래스같다..

 

클래스와 결정적으로 다른점은 

자바는 클래스를 다중상속할수 없는것이고

인터페이스는 다중으로 구현이 가능하다!

 

+ 또 다른 차이 추가적인 점

Object 클래스의 equals와 hashcode는 디폴트 메소드사용

인스턴스 필드를 가질수 없다

public이 아닌 정적 맴버를 가질수 없다.

 

--> 이럴때 추상클래스를 "추상 골격 구현 클래스"로 만들어 인터페이스와 같이 사용한다.
인터페이스는 타입을 정의

메소드 구현은 추상 공격 구현 클래스에서 구현

--->템플릿 메소드 패턴