Lambda(람다)
(1) 1930년대, 알론조 처치라는 수학자가 제시한
함수의 수학적 표기법
=> Lambda Calculus(람다 대수)에 기초
Java 8(2014)부터 지원
객체 지향 프로그래밍에
함수형 프로그래밍의 특징이 추가
(2) 함수형 프로그래밍
일반적으로 메서드끼리 **데이터**를 주고 받는다.
함수형 프로그래밍은 데이터는 이미 존재,
함수를 넘겨주는 방식
Java의 함수(메서드)는 기본적으로
어떤 클래스의 소속이어야 함
=> 나보고 정의하라는 것도 짜증나는데
클래스도 만들어야 되냐??
=> 심지어 일회성이냐?
=> 미안해 그럼 익명 객체로 하게 해줄께
(3) 익명 객체(Anonymous Object)
첫 번째, 데이터 개수는 고정이니 선언은 할 수 있네
=> 인터페이스
두 번째, 객체를 생성할 때(클래스를 안 만들고)
메서드를 구현
=> 사용자가 메서드를 만들어야 하는데,
메서드 정의가 너무 긴거 아님?
=> 줄여야겠다 => 람다식
(4) 정리
무슨 타입인지를 사용자에게 맡김
=> Generic
무슨 함수를 사용할지를 사용자에게 맡김
=> 함수형 프로그래밍
함수를 ( )에 다 넣으려니 길고 복잡
=> 람다식
(5) 기본 형식
Method(매개변수들.....){
실행문;
}
(매개변수들.....) -> { 실행문; }
☆ Code
★ Calcuable
public interface Calculable {
public void calculate(int x, int y);
}
★ CalcuableClass
public class CalculableClass implements Calculable {
public void calculate(int x, int y) {
System.out.println("[일반객체] " + (x+y));
}
}
★ CalcuableReturn
public interface CalculableReturn {
public double calculate(int r);
}
★ LambdaMain
import java.util.ArrayList;
public class LambdaMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 1. Standard
CalculableClass cc = new CalculableClass();
cc.calculate(100, 1000);
// 2. Anonymous Instance(익명객체)
Calculable c1 = new Calculable() {
public void calculate(int x, int y) {
System.out.println("[익명객체-일반] " + (x*y));
}
};
c1.calculate(100, 1000);
// 3. Lambda I : 람다식으로 정의하면 자동으로 메서드와 매핑
Calculable c2 = (x, y) -> { System.out.println("[람다정식] " + (x*y)); };
c2.calculate(100, 1000);
// 4. Lambda II : return 값이 있는 경우
CalculableReturn c3 = (x) -> { return 3.14 * x * 2; };
System.out.println("[람다리턴] " + c3.calculate(100));
// 5. 인풋이 1개 뿐이면 괄호 생략
CalculableReturn c4 = x -> { return 3.14 * x * 2; };
System.out.println("[람다리턴] " + c4.calculate(100));
// 6. 리턴이 한 줄이면 중괄호도 생략
CalculableReturn c5 = x -> 3.14 * x * 2;
System.out.println("[람다리턴] " + c5.calculate(100));
// 7. 인터페이스
// UnaryOperator : 1개 입력, 1개 출력
// BinaryOperator : 2개 입력, 1개 출력
// Consumer, forEach
// 8. 람다식의 대표적인 예제 -> forEach
ArrayList<String> ar = new ArrayList();
ar.add("Steak");
ar.add("Striper");
ar.add("Rock Group");
for(String name : ar) {
System.out.println(name);
}
ar.forEach(name -> System.out.println(name));
ar.forEach(System.out::println);
}
}
'JAVA' 카테고리의 다른 글
Spring 게시판 검색기능 (1) | 2024.12.29 |
---|---|
JAVA 크롤링 (0) | 2024.11.17 |
JAVA 제네릭 (0) | 2024.11.17 |
JAVA 컬렉션 프레임워크 (1) | 2024.11.16 |
JAVA 예외 (2) | 2024.11.16 |