인터페이스의 default & static 메서드

2021. 12. 9. 17:39·자바/기본적인 개념

1. static 메서드는 원래 인터페이스에서 사용 불가였다?

- JDK 1.8 전에는 불가능했지만, 이제는 default와 static 메서드를 사용할 수 있게

되었다.

 

- 옛날에는 java.util.Collection이라는 인터터페이스에 static 메서드가 있었는데 추상 메서드만

선언이 가능하다는 이유로 같이 넣지 못해서 Collections라는 클래스가 생성되게 되었다.

 

- static 메서드 역시 앞에 public 접근 제어자가 있고, 생략 또한 가능하다.

 

 

 

 

2. 디폴트 메서드가 등장하게 된 배경

- 인터페이스에 새로운 메서드를 추가한다는 것은 엄청나게 까다롭다. 그 이유는 

인터페이스로 구현한 클래스들이 전부 다시 구현해야 하기 때문이다.

 

- 그러한 이유 때문에, default 메서드를 고안하여 구현할 필요없는 것을 만들어냈다.

 

- default 메서드 역시 앞에 public 접근 제어자가 있고, 생략 또한 가능하다.

 

- 충돌을 해결하는 규칙

(1) 여러 인터페이스의 디폴트 메서드 간의 충돌

--> 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야한다.

 

(2) 디폴트 메서드와 조상 클래스의 메서드 간의 충돌

--> 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.

 

 

 

 

3. 이해를 돕기위한 예제(1)

 

 

 

 

4. 이해를 돕기 위한 예제(2)

 

( 주의할 점은 두 인터페이스의 default 메서드들이 이름이 같다면, 구현하는 클래스에서는

무조건 구분지어 abstract 처럼 구현해주어야 한다. )

'자바 > 기본적인 개념' 카테고리의 다른 글

익명 클래스(anonymous class)  (0) 2021.12.16
내부 클래스(inner class)  (0) 2021.12.10
인터페이스 다형성  (0) 2021.12.08
인터페이스  (0) 2021.12.08
추상 클래스(abstract class)  (0) 2021.12.07
'자바/기본적인 개념' 카테고리의 다른 글
  • 익명 클래스(anonymous class)
  • 내부 클래스(inner class)
  • 인터페이스 다형성
  • 인터페이스
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      코드트리
      자바 개념
      java.lang패키지
      중간연산
      outputstream
      snail
      InputStream
      안정 정렬
      코딩테스트
      file
      불안정 정렬
      스트림
      java.time 패키지
      Collections Framework
      선택 정렬
      소켓 프로그래밍
      map()
      역직렬화
      Arrays
      유용한 클래스
      serializable
      ServerSocket
      안드로이드 스튜디오
      코딩트리조별과제
      문자 기반 스트림
      제자리 정렬
      다형성
      알고스팟
      람다식
      TCP 소켓 프로그래밍
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    인터페이스의 default & static 메서드
    상단으로

    티스토리툴바