2021. 5. 31. 00:52 개발/Java8

#2 final, 람다

람다 표현식에서 변수를 변경하는 작업은 스레드에 안전하지 않다.

 

final을 쓰면 side effect를 줄일수 있다.변경되지 않기때문에?

 

P. 107람다에서 참고하는 지역변수는 final로 선언되거나 실질적으로 final처럼 취급되어야한다.

 

해당 내용을 찾아보다가, 아래의 글을 보게 되었다.https://www.slipp.net/questions/278

 

anonymous inner class는 final 변수에만 접근해야 하는 이유는?

오늘 자바 8에 추가된 람다와 관련한 내용을 읽다가 다음과 같이 내용이 있어 궁금증이 생겼다. 람다 표현식에서 변수를 변경하는 작업은 스레드에 안전하지 않다. - 가장 빨리 만나는 자바8 28페

www.slipp.net

2014년에 나온 이야기인데, 토비님도 이야기를 하고있어서 신기했고, 단순하다고 생각했던 final 키워드에 대해서 여러가지 의미가 있음을 알게 되었다.

 

위의 글에 이해가 안되었던 부분은

디컴파일러를 이용해서 람다, final이 어떤 방식으로 구현되었는지 역추적하는 부분이었다.

 

나의 이해 정리

final 변수 -> 변경되지 않는다.

멀티 쓰레딩 환경에서 여러 쓰레드가 처리를 할때 변경되지 않는 값이라 안전하게 사용할수 있다.

side effect가 없다. (없다? 적다?)

 

실무에서 if문 대신 filter를 사용하자.

 

https://www.popit.kr/java8-stream%EC%9D%80-loop%EA%B0%80-%EC%95%84%EB%8B%88%EB%8B%A4/

 

Stream API 덕분에 데이터 처리 과정을 병렬화하면서 스레드와 락을 걱정할 필요가 없다.

 

부족함을 느껴서 재미있다.

 

'개발 > Java8' 카테고리의 다른 글

#4 FunctionalInterface  (0) 2021.06.08
#3 Optional  (0) 2021.06.08
#1 Java8을 학습하는 이유  (0) 2021.05.24
Posted by 커다란꼬꼬마

블로그 이미지
커다란꼬꼬마

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.5
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 31

최근에 올라온 글

최근에 달린 댓글

글 보관함