public class ThreadExample {
public static void main(Stringp[ args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello World");
}
});
thread.start();
}
}
new Runnable()
은 익명 클래스의 선언 부분이다. Thread의 생성자 parameter는 이미 Runnable 인터페이스가 유일하므로, 생략하더라도 컴파일러가 자체적으로 Runnable, 또는 이를 구현한 클래스라고 예측할 수 있다.Thread thread = new Thread(
@Override
public void run() {
System.out.println("Hello World");
}
);
Thread thread = new Thread(
{ System.out.println("Hello World"); }
);
Thread thread = new Thread( () -> System.out.println("Hello World") );
Runnable
의 메서드 void run()
은 받는 parameter가 없어 비어있지만, parameter가 존재한다면 ->
앞부분에 존재하는 ()
에 parameter가 들어갈 것이다.->
을 기준으로 왼쪽에 parameter, 오른쪽이 body(implement) 영역Runnable runImpl = () -> System.out.println("Hello World");
Thread thread = new Thread(runImpl);
public Runnable getRunnable() {
return () -> System.out.println("Hello World");
}
Runnable runImpl = getRunnable();
Thread thread = new Thread(runImpl);
return
뒤에 있는 람다 표현식은 함수형 인터페이스인 Runnable
인터페이스를 정의하는 부분이고, System.out.println
이 실행되는 부분은 아니다.runImpl
에서 run()
메서드가 호출되어야 실행된다.Consumer<T\>
void accept(T t)
Function<T, R>
R apply(T t)
Predicate<T\>
boolean test(T t)
Supplier<T\>
T get()
추상 메서드와 일반 메서드
- 추상메서드는 interface에 선언된 구현이 완료되지 않은 메서드, 일반 메서드는 class에서 구현 완료된 메서드
기본형 데이터와 참조형 데이터
- 참조형 데이터는 박싱/언박싱의 과정때문에 쓸데없는 리소스 사용이 있을 수 있다. 이를 위해 Int~ Double~ 등의 하위 클래스를 자바에서 제공하고 있음 (ex. 함수형 인터페이스로 제공되는
IntToLongFunction
이나, 스트림API의IntStream
등)