티스토리 뷰
지연실행은 코드를 바로 실행하지 않고 코드 실행을 필요로 할 때 실행하도록 하는 것이다.
코드를 나중에 실행하는 이유는 다음과 같다.
- 별도의 스레드에서 코드 실행
- 코드를 여러번 실행
- 적절한 시점에 실행
- 어떤 일이 발생(이벤트)했을 때 실행
책의 예제를 보자면
logger.info("x : " + x + ", y : " + y );
이 코드를 실행하면 먼저 문자열을 조립하고 info 메소드를 호출하면서 조립된 문자열을
인자로 전달한다.
하지만 로그레벨이 info 메세지를 기록하지 않도록 로그레벨이 설정되어 있다면
문자열을 조립하는 불필요한 연산을 수행하게 된 것이다.
이 예제를 필요할 때(로그에 기록될 때)에만 코드를 실행하게 하려면
1. 람다를 받는다
2. 호출해야 하는지 검사한다.
3. 필요할 때 람다를 호출한다
책의 예제를 예제1) 이라 부르겠다
위의 조건에 만족하는 메소드이다.
public static void info(Logger logger, Suppiler<String> str){
if(logger.isLoggable(Level.INFO))
logger.info(str.get());
}
이렇게 하면 isLoggable 메소드로 로그를 남길지의 여부를 알 수 있고, 로그를 남길 수 있으면 함수를 나타내는 Supplier의 get() 메소드로 조립된 문자열을 넘긴다.
즉 로그를 기록 가능할 때(필요한 때)에만 문자열을 조립하는 연산을 수행한다.
하지만 이해가 되질 않는게 예제1)은 지연연산에 람다를 왜 써야하는지에 설명이 되질 않는다.
if(logger.isLoggable(Level.INFO))
logger.info( "x : " + x + ", y : " + y );
따로 메소드를 만들고, 람다를 인자로 받는 것 외에는 위의 예제와 다를 것이 없다.
필요로 할때에만 연산하는게 람다의 용도라고 하는데 예제1)은 람다가 없어도 지연실행을 할 수 있다.
물론 여러 줄의 코드블록을 전달 가능하고 사용하기 편한 것은 사실이지만
그것은 람다의 지연연산에 대한 설명이 되질 않는다.
즉 지연연산의 필요성과 효과에 대해선 알겠지만 이 예제로는 지연연산에 람다를 사용해야하는 이유를
이해할 수가 없다.
다른 예제도 보면서 필요성을 찾아봐야겠다.
'JAVA' 카테고리의 다른 글
[날짜시간] JAVA8의 Instant와 Duration 날짜계산 (0) | 2015.04.04 |
---|---|
[날짜시간] JAVA8의 Instant 클래스 (0) | 2015.04.04 |
[Stream] 간단 리덕션(Reduction) 메소드들 (0) | 2015.04.02 |
[실험] reduce 메소드로 평균값 구하기 (0) | 2015.04.02 |
[Stream] 효과적인 병렬화하기 (0) | 2015.04.02 |
- Total
- Today
- Yesterday
- 자바 성능
- 프로세서
- rambda
- 퍼포먼스
- 알람
- RAMDA
- Jackson
- Java8
- opensource
- 람다
- 리액트
- 날짜
- Clojure
- 자바
- 성능
- Java
- 성능개선
- javascript
- react
- Stream
- json
- 코어
- gitlab
- 클로저
- Docker
- 시간
- 메모리
- 컴퓨터 시간
- 자료구조
- Swift 2.0
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |