더북(TheBook)

4.1.12 super를 이용한 메서드 표현식


3장 인터페이스와 람다 표현식에서 메서드 표현식을 object::instanceMethod 형태로 사용할 수 있다고 배웠다. 이때 객체 참조 대신 super를 사용할 수도 있다. 다음 메서드 표현식은 this를 기준으로 주어진 메서드의 슈퍼클래스 버전을 호출한다.

super::instanceMethod


다음은 이 메커니즘을 보여 주려고 만든 예다.

public class Worker {

    public void work() {

        for (int i = 0; i < 100; i++) System.out.println("Working");

    }

}


public class ConcurrentWorker extends Worker {

    public void work() {

        Thread t = new Thread(super::work);

        t.start();

    }

}


ConcurrentWorkerwork 메서드는 run 메서드에서 슈퍼클래스(Worker)의 work 메서드를 호출하는 Runnable로 스레드를 생성한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.