728x90
자바 8이 되면서 기존 자바와 다른 점은 람다표현식을 사용할 수 있다는 것이다.
람다표현식은 간결하게 표현할 수 있어 코드의 가독성을 높일 수 있다.
람다표현식은 함수형 인터페이스의 인스턴스를 만드는 방법으로 사용할 수 있다.
따라서 간단하게 함수형 인터페이스와 람다표현식에 대해 공부해보자!!
함수형 인터페이스
- 추상 메서드가 1개만 있는 인터페이스
- @FunctionalInterface 에노테이션으로 표현할 수 있다.
@FunctionalInterface
public interface RunSomething {
void doit();
}
** 추상메서드 - 메서드가 선언은 되어있지만 내용은 채워지지 않은 메서드
** 자바 8 부터 abstract를 생략할 수 있다.
** 인터페이스 안에 static 함수를 선언할 수 있다.
람다표현식
package functional_interface_rambda;
public class Foo {
public static void main(String[] args) {
// 익명 내부 클래스
RunSomething runSomething = new RunSomething() {
@Override
public void doit() {
System.out.println("출력1");
}
};
RunSomething runSomething2 = () -> System.out.println("출력2");
RunSomething runSomething3 = () -> {
System.out.println("출력3-1");
System.out.println("출력3-2");
};
runSomething.doit();
runSomething2.doit();
runSomething3.doit();
}
}
- 첫번째로 나온 방법이 기존에 추상메서드를 사용하는 방법이다.
- 두번째와 세번째는 한줄로 표현할 수 있고 없고의 차이다.
## 주의
- 쉐도잉, final
package functional_interface_rambda.third;
import java.util.function.Consumer;
import java.util.function.IntConsumer;
public class Foo {
public static void main(String[] args) {
Foo foo = new Foo();
foo.run();
}
private void run(){
int baseNumber = 10;
//로컬 클래스
class LocalClass{
void printBaseNumber(){
System.out.println(baseNumber);
}
}
//익명 클래스
Consumer<Integer> integerConsumer = new Consumer<Integer>() {
@Override
public void accept(Integer integer) {
System.out.println(baseNumber);
}
};
//람다
IntConsumer printInt = (i) ->{
System.out.println(i+baseNumber);
};
/*
// baseNumber가 선언되어 있으므로 매개변수로 가져올 수 없다.
IntConsumer printInt = (baseNumber) ->{
System.out.println(baseNumber);
};
*/
//baseNumber++; -> final값이 아니므로 람다식에서 사용할 수 없는 값이 된다.
}
}
- run메소드 안에 baseNumber는 로컬 클래스와 익명 클래스에 재선언될수 있다. 즉 로컬 클래스와 익명 클래스는 baseNumber를 가릴수 있다.
-> 람다표현식에서 baseNumber를 매개변수로 가져올 수 없다.
- 람다식에서 매개변수로 사용되는 값은 final로 선언된 것이므로 값이 변할 수 없다.
728x90
'자바' 카테고리의 다른 글
자바 8 stream 기본 (0) | 2021.07.23 |
---|---|
인터페이스 기본 메소드(Default Methods) (0) | 2021.07.16 |
람다식 매소드 레퍼런스 (0) | 2021.07.13 |
문자열 자르기 substring (0) | 2021.02.04 |
compare 메소드 (0) | 2021.01.26 |
댓글