더북(TheBook)

icon Caution

길이가 1인 배열을 사용하면 부적절한 변경 검사를 우회할 수 있다.


int[ ] counter = new int[1];

button.setOnAction(event -> counter[0]++);


counter 변수는 사실상 최종이다(항상 같은 배열을 참조하므로 절대 변하지 않는다). 따라서 람다 표현식에서 counter에 접근할 수 있다.

물론 이런 코드는 스레드에 안전하지 않다. 단일 스레드 UI에서 콜백용으로 사용한다면 모를까 이 방법은 아주 나쁜 발상이다. 10장 병행 프로그래밍에서 스레드에 안전한 공유 카운터를 구현하는 방법을 알아본다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.