람다 표현식 (Lambda Expression)
복잡한 메서드들을 나열하지 않아도 계산을 간결한 코드 조각(함수 이름 없음)으로 처리하는 함수형 프로그래밍이 가능한 표현식.
컬렉션 라이브러리가 더욱 풍성하게 사용할 수 있고 새로운 스트림 API를 부담없이 사용할 목적으로, 병렬 처리도 쉽게 할 수 있다.
자바에서 스레드를 이용할 때 많이 사용. (스레드를 생성하기 위해 Run 메서드를 오버라이드할 때 유용하다.)
1. 인터페이스의 객체를 생성하는 방법
(매개변수=파라미터값이 없는 경우)
1) Anonymous(익명클래스)를 이용해 오버라이딩으로 메서드를 재정의해서 사용
2) 람다 표현식으로 정의
package com.model;
// 인터페이스는 안에 추상 메서드(public static)로만 정의 가능.
// public static 클래스를 대신하여 인터페이스를 쓸 수 있다.
interface Xyz {
public void a();
}
public class Lambda {
public static void main(String[] args) {
// 인터페이스는 new를 통해 객체를 생성할 수 없다.
// Xyz xyz = new Xyz(); (틀린 문법)
// 대신 Anonymous(익명클래스) 방법으로 인터페이스의 객체를 생성할 수 있다.
// 1. Anonymous 방법 (오버라이딩으로 재정의해서 사용)
Xyz xyz = new Xyz() {
@Override
public void a() {
System.out.println("익명클래스");
}
};
xyz.a();
// 2. 람다 표현식을 이용하는 방법
// 메서드 형식으로 ()를 표시, 관련 기능은 ->로 정의
Xyz xyz2 = () -> System.out.println("람다표현식");
xyz2.a();
}
}
2. 인터페이스의 객체를 생성하는 방법
(매개변수=파라미터값이 있는 경우)
package com.model;
interface Xyz_Param {
public void a(int x, int y);
}
public class Lambda2 {
public static void main(String[] args) {
// 1. 익명 클래스 이용
Xyz_Param xyz = new Xyz_Param() {
@Override
public void a(int x, int y) {
System.out.println("익명클래스: " + (x+y));
}
};
xyz.a(10, 20);
// 2. 람다 표현식 이용
Xyz_Param xyz2 = (x,y) -> System.out.println("람다표현식: " + (x+y));
xyz2.a(20, 30);
}
}
스레드에서 람다 표현식 활용
스레드를 생성하기 위해 Run 메서드를 오버라이드할 때 람다 표현식으로 대처할 수 있어 유용하다.
package com.model;
public class Lambda3 {
public static void main(String[] args) {
System.out.println("Anonymous 표현");
new Thread(){
public void run() { // run 메서드를 오버라이딩하여 사용
while(true) {
try {
Thread.sleep(1000);
System.out.println("익명클래스.." + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
System.out.println("Lambda 표현식");
new Thread(
() -> {
while(true) {
try {
Thread.sleep(1000);
System.out.println("람다표현식.." + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
'자바의 기초문법' 카테고리의 다른 글
NIO의 Path, URI, Files 클래스 (0) | 2016.05.19 |
---|---|
자바의 Varargs (가변인자) (0) | 2016.05.19 |
import static (0) | 2016.05.18 |
싱글톤 패턴 (0) | 2016.05.18 |
이클립스에서 HTML 코딩하기 (0) | 2016.02.01 |