티스토리 뷰

지연실행은 코드를 바로 실행하지 않고 코드 실행을 필요로 할 때 실행하도록 하는 것이다.

코드를 나중에 실행하는 이유는 다음과 같다.


- 별도의 스레드에서 코드 실행

- 코드를 여러번 실행

- 적절한 시점에 실행

- 어떤 일이 발생(이벤트)했을 때 실행



책의 예제를 보자면


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)은 람다가 없어도 지연실행을 할 수 있다.


물론 여러 줄의 코드블록을 전달 가능하고 사용하기 편한 것은 사실이지만 

그것은 람다의 지연연산에 대한 설명이 되질 않는다.

즉 지연연산의 필요성과 효과에 대해선 알겠지만 이 예제로는 지연연산에 람다를 사용해야하는 이유를

이해할 수가 없다.


다른 예제도 보면서 필요성을 찾아봐야겠다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
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
글 보관함