소스 코드가 컴파일되거나 실행될 때에 컴파일러 및 다른 프로그램에게 필요한 정보를 전달해주는 문법 요소
식별자가 없는 일회용 객체
public class IJ2 {
public static void main(String[] args) {
Person hurk = new Person() {
private void work() {
System.out.println("근무 시작!");
}
@Override
public void live() {
super.wake();
super.eat();
work();
super.sleep();
}
}
}
}
class Person {
public void wake() {
System.out.println("기상!");
}
public void eat() {
System.out.println("냠냠");
}
public void sleep() {
System.out.println("쿨쿨");
}
public void live() {
this.wake();
this.eat();
this.sleep();
}
}
public class IG2 {
public static void main(String[] args) {
Workable hurk = new work() {
@Override
public void work() {
System.out.println("수업중....")
}
}
hurk.work();
}
}
interface Workable {
void work();
}
메서드를 하나의
식(expression)
으로 표현한 것
;
으로 끝나는 코드
public class LambdaExample {
public static void main(String[] args) {
Hello hello = () -> System.out.println("hello!");
hello.sayHello();
}
}
@FunctionalInterface
interface Hello {
void sayHello();
}
// 출력값
// hello!
@FunctionalInterface
라는 표준애너테이션을 붙일 수 있다public class LambdaCaculator {
public static void main(String[] args) {
Caculable add = (a, b) -> a + b;
Caculable substract = (a, b) -> a - b;
Caculable multiply = (a, b) -> a * b;
Caculable devide = (a, b) -> a / b;
operate(add, 10, 2);
operate(substract, 10, 2);
operate(multiply, 10, 2);
operate(devide, 10, 2);
}
private static void operate(Caculable caculable, int a, int b) {
System.out.println(caculable.calculate(a, b));
}
}
@FunctionalInterface
interface Calculable {
int calculate(int a, int b);
}
// 출력값
// 12
// 8
// 20
// 5
람다식에는 변수의 타입을 알아서 추론해주는 기능이 있으므로 괄호 안에 타입을 입력할 필요 x
이런 기법을 함수형 프로그래밍
이라고 한다