람다 표현식 (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
Posted by netyhobby
,