기록과 정리

기본 메서드와 스태틱 메서드 본문

IT/Java

기본 메서드와 스태틱 메서드

zepetto 2021. 8. 3. 20:28

이 글은 백기선님의 '더 자바, Java 8' 강의를 참고하였습니다.

https://www.inflearn.com/course/the-java-java8/lecture/48041?speed=1&tab=curriculum 

 

더 자바, Java 8 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

기본 메서드 (default Methods)

인터페이스의 메소드 선언이 아닌 구현체를 제공하는 방법. 보통 구현체라함은 인터페이스를 구현 받는 클래스 내부에 위치하지만 인터페이스에 위치한 것을 말한다.

Foo라는 인터페이스 내부에 printNameUpperCase

가령, printName()을 만들고 개발 도중에 다른 기능을 하는 구현체를 추가해주어야 할 때, printNameUpperCase()를 넣으면 실제 구현체에서는 해당 메서드를 오버라이딩을 하지 않았기 때문에 컴파일 에러가 날 것이다. 

 

default 키워드로 위와 같이 특정 기능을 제공을 할 수 있다. 구현체가 모르게 추가된 기능에 따라 그만큼 리스크가 따르기ㄷ 떄문에 @implSpec과 같은 자바독 태그를 사용하여 문서화를 하도록 하자.

 

참고로 Object가 제공하는 기능 (equasl , hasCode)는 기본 메서드로 제공될 수 없다. 

 

toString을 기본 메서드로 구현시 컴파일에러 발생

인터페이스에서 기본 메서드가 만들어져도 구현체에서는 얼마든지 재구현이 가능하다.

 

Foo를 구현받는 DefualtFoo Class

 

스태틱 메서드

해당 타입 관련 헬퍼 또는 유틸리티 메소드를 제공할 때, 인터페이스에서 스테틱 메서드를 사용 가능하다.

 

Foo 인터페이스에 printAnything이라는 static 메서드
Foo의 printAnything 스태틱 메서드를 사용

 

기본메서드와 스태틱메서드의 사용

자바 8에서 추가한 기본 메소드

대표적으로 Itrable의 forEach, spliterator가 있다.

forEach

forEach를 통한 List 출력

forEach를 사용하면 iterator를 사용하는 것보다 간결하게 Collection을 출력 및 순회가 가능하다.

forEach 결과

spliterator

Spliterator

쪼갤 수 있는 기능이 붙어 있는 iterator라고 생각하면 된다. 단, 순서에는 상관하지 않을 때, 사용하면 유용하다. 

결과

그외 removeIf , comparator

해당하는 조건을 제외하는 removeIf , sort에 유용한 comparator 등이 있다.

s로 시작하는 sangmoon이 사라지고 역순으로 정렬

 

'IT > Java' 카테고리의 다른 글

Java Optional  (0) 2021.08.23
Java8 Stream API (스트림 API)  (0) 2021.08.12
Iterator/ListIterator/Enumeration 란?  (0) 2021.07.30
람다표현식&메소드 레퍼런스  (0) 2021.07.26
Java 함수형 인터페이스  (0) 2021.07.20