default 메서드


CharSequence 인터페이스를 까보다가 왠 메서드명 앞에 default 키워드가 있길래 처음보는거라 정리해둔다. 

코드는 아래와 같다.

public default IntStream chars() {
        class CharIterator implements PrimitiveIterator.OfInt {
            int cur = 0;

            public boolean hasNext() {
                return cur < length();
            }

            public int nextInt() {
                if (hasNext()) {
                    return charAt(cur++);
                } else {
                    throw new NoSuchElementException();
                }
            }

            @Override
            public void forEachRemaining(IntConsumer block) {
                for (; cur < length(); cur++) {
                    block.accept(charAt(cur));
                }
            }
        }

        return StreamSupport.intStream(() ->
                Spliterators.spliterator(
                        new CharIterator(),
                        length(),
                        Spliterator.ORDERED),
                Spliterator.SUBSIZED | Spliterator.SIZED | Spliterator.ORDERED,
                false);
    }

 

코드 해석이 아직 잘 안되기는한데, 일단 default 키워드를 메서드 앞에 붙이면 인터페이스 안에서 바로 동작을 정의할 수 있게 된다.

그로 인해 오는 장점은 해당 인터페이스를 implements로 구현하려 할때 default로 정의된 메서드에 대해서는 구현을 생략할 수 있다는 것.

 

default 키워드는 JDK 1.8부터 추가되었으며, 인터페이스에 추상 클래스의 장점을 얹었다 !