반응형
지연실행
-> 람다를 이용하면 필요할때만 호출해서 사용할 수 있는 Lazy Programming을 구현 할 수 있다.
기존에 다음과 같이 사용하면
당장 사용하지 않아도 실행이 되는 문제가 있었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class Heavy { Heavy() { System.out.println("Heavy created"); } } Hodler 클래스 Holder 클래스는 heavy 클래스를 포함하고 있다. public class Holder { public Holder() { System.out.println("Holder created"); } Heavy heavy = new Heavy(); public Heavy getHeavy() { return heavy; } } public static void main(String[] args) { Holder holder = new Holder(); System.out.println("Get Heavy instance"); } | cs |
Holder 클래스를 선언 할 때 다음과 같은 순서로 실행된다.
==> 출력겨로가
Heavy created
Holder created
Get Heavy instance
Heavy 클래스를 가지고 있지만 당장 사용하지 않는데 Holder클래스가 생성될 때 먼저 생성되는 문제가 있다.
이런 문제를 람다식을 사용하여 필요할 때 호출하여 사용하는 Lazy 방식으로 변경 할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class Lazy<T> { private Optional<T> instance = Optional.empty(); private Supplier<T> supplier; public Lazy(Supplier<T> theSupplier) { supplier = theSupplier; } public T get() { if(!instance.isPresent()) { instance = Optional.of(supplier.get()); } return instance.get(); } } | cs |
먼저 하나의 Lazy방식에 사용할 클래스를 선언한다.
그리고 Holder 클래스를 다음과 같이 변경한다.
1 2 3 4 5 6 7 8 9 10 | public class Holder { public Holder() { System.out.println("Holder created"); } Lazy<Heavy> heavy = new Lazy<Heavy> (() -> new Heavy()); public Heavy getHeavy() { return heavy.get(); } } | cs |
다시한번 실행해 보면
Heavy 클래스가 미리 생성되지 않는것을 확인 할 수 있다.
1 2 3 4 | public static void main(String[] args) { Holder holder = new Holder(); System.out.println("Get Heavy instance"); } | cs |
반응형
'JAVA > Java 8' 카테고리의 다른 글
기타 자바8에 추가된 편리기능 (0) | 2018.05.31 |
---|---|
Java8 함수형 인터페이스 만들어서 사용하기 (0) | 2018.05.31 |
자바 8에서 java.util.function 패키지에 추가된 기본 함수형 인터페이스 정리 (0) | 2018.05.31 |
Java8 스트림을 이용한 데이터 추출 (0) | 2018.05.31 |
Java8 스트림(stream) 연산 (0) | 2018.05.31 |