엔지니어로 가는 길

JAVA 디폴트 메소드 본문

프로그래밍/Java

JAVA 디폴트 메소드

탐p슨 2020. 8. 30. 20:01
728x90

http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

 

우리는 컴퓨터로 조종하는 자동차 소프트웨어 프로그래머다. 우리는 자동차를 조종하는데 사용하는 메소드를 가진 인터페이스를 만들었고 잘 사용중이다. 근데 만약 자동차에 새로운 기능을 추가해야 한다면 어떨까? 그냥 기존의 인터페이스에 메소드를 추가하면 될까?

기존의 인터페이스에 메소드를 추가하면, 인터페이스를 구현한 클래스도 수정해야만 한다. 인터페이스를 구현하는 클래스는 abstract 클래스가 아닌 이상, 인터페이스의 모든 메소드를 구현해야만 하기 때문이다.

static 메소드로 추가한다면, 동료들이 새로운 메소드를 필수적인 메소드가 아니라 유틸리티성 메소드로 여길지 모른다.

이럴 땐 default methods를 쓸 수 있다. 자바8부터 지원한다.Default Methods

 

디폴트 메소드는 구버전의 인터페이스가 쓰인 코드와 binary compatibility를 보장하면서 새로운 기능을 추가할 수 있게 해준다. 그러니까 인터페이스를 구현한 클래스가 새롭게 추가된 디폴트 메소드를 구현하지 않아도 된다는 말이다. 다시 말해서, 기존에 인터페이스를 구현한 클래스를 수정할 필요가 없다는 뜻이다.

* binary compatibility

https://stackoverflow.com/questions/14973380/what-is-binary-compatibility-in-javahttps://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html

 

  • 디폴트 메소드는 인터페이스 안에서 구현을 가질 수 있다.
  • 디폴트 메소드를 포함해서 인터페이스의 모든 메소드 선언은 암묵적으로 public이다.
  • 디폴트 메소드 A를 가진 인터페이스를 상속받는 인터페이스
    • A를 명시하지 않는 경우 부모의 A를 상속받는다.
    • 이름이 A이지만 디폴트 키워드를 사용하지 않는 경우 abstract 메소드가 된다.
    • 이름이 A이며 디폴트 키워드를 사용한 경우 부모의 A 메소드를 override한다.
728x90
Comments