람다식에 관하여
2022. 9. 23. 17:25ㆍJAVA
728x90
람다식이란?
메서드를 하나의 ‘식’으로 표현한 것이다.
람다식을 사용함으로써 자바는 객체지향언어인 동시에 함수형 언어의 기능을 갖추었다.
함수형 언어란 무엇인가??
이를 알기위해서는 메소드와 함수의 차이를 알아야한다.
객체지향개념에서 메서드는 객체의 행위나 동작을 의미하고 메서드는 반드시 클래스에 속해있어야합니다.
반대로, 함수는 클래스에 속해있을 필요가 없습니다.
따라서, 람다식을 사용함으로써 함수형언어의 기능을 사용한다고 하는 것은
클래스에 있는 메서드를 사용하지 않고도, 함수처럼 클래스 밖에서 메서드를 만들어서 사용할 수 있다는 것을 의미합니다.
(단순히 제 생각입니다)
람다식은 익명 클래스의 객체와 동일합니다.
아래의 코드를 보면 이 말이 이해가 됩니다.
interface Example{
public abstract String exam(String a)
}
Example ex = new Example() {
public String exam(String a){
return "예제" + a;
}
};
String example = ex.exam("입니다.");
Example ex = (a) -> "예제" + a;
ex.exam("입니다.");
이렇게 람다식을 이용하여서 익명객체를 대체할 수 있습니다.
인터페이스를 통해 람다식을 다루며, 람다식을 다루기 위한 인터페이스를 함수형 인터페이스라 부른다.
함수형 인터페이스
java.lang.Runnable | void run() | 매개변수도 없고, 반환값도 없음. |
Supplier<T> | void get() | 매개변수는 없고, 반환값만 있음. |
Consumer<T> | void accept() | 매개변수만 있고, 반환값 없음 |
Function<T,R> | R apply(T t) | 일반적인 함수, 하나의 매개변수르 받아서 결과를 반환 |
Predicate<T> | boolean test(T t) | 조건식을 표현하는 데 사용됨. 매개변수는 하나, 반환 타입은 boolean 타입이다. |
함수형 인터페이스들의 예시
public static void main(String[] args) {
Member member = new Member();
member.setName("sony");
member.setId("sony12");
member.setPassword("1234@");
member.setAge(24);
Runnable run1 = new Runnable() {
@Override
public void run() {
System.out.println("run()");
}
};
run1.run();
Runnable run2 = ()->System.out.println("run()");
run2.run();
Supplier<Member> sup1 = () -> new Member();
Supplier<String> sup2 = () -> member.getId();
Supplier<Integer> sup3 = () -> member.getAge();
Member reuslt = sup1.get();
String id = sup2.get();
int age = sup3.get();
System.out.printf("%s,%d",id,age);
Consumer<Member> con1 = (m) -> System.out.println(m.getPassword());
Consumer<Member> con2 = new Consumer<Member>() {
@Override
public void accept(Member m) {
System.out.println(m.getPassword());
}
};
con1.accept(member);
con2.accept(member);
Function<Member,String> fun1 = (m) -> m.getPassword();
fun1.apply(member);
Function<Member, String> fun2 = new Function<Member,String>(){
public String apply(Member m) {
return m.getPassword();
}
};
System.out.println(fun2.apply(member));
Predicate<Member> pre1 = (m) -> m.getAge()>10;
System.out.println(pre1.test(member));
}
이렇듯 함수형 인터페이스와 람다식을 사용해 자바에서 함수형 언어의 기능을 사용할 수 있습니다.
이상입니다.
728x90
'JAVA' 카테고리의 다른 글
enum 이 자식!! (2) | 2023.03.01 |
---|---|
Date, Callender 클래스 LocalDateTime 클래스 + mysql과의 연결 (0) | 2022.09.26 |
Optional<T>에 관하여 (0) | 2022.09.01 |
JDBC - Class.forName() (0) | 2022.07.17 |
java공부 - 스케줄러만들기 (수정본) (0) | 2022.05.03 |