더북(TheBook)

어찌 되었든 이 기능을 사용할 때는 주의해야 한다. 만약 참조 지역 변수가 단일 메서드 내에서 다른 변수를 다시 참조해야 하는 상황이라면, 차라리 해당 메서드를 더 단순하게 리팩터링해볼 것을 제안한다.

 

 

참조 필드는 없음. 지역 변수는 메서드를 벗어나면 사용할 수 없음

필드를 이용하여 참조 지역 변수를 초기화할 수는 있지만, 참조 필드를 선언할 수는 없다. 이는 짧은 기간 동안 다른 변수에 별칭을 부여하는 형태로 동작하는 참조 변수의 특징을 보호하기 위한 것이다. 그리고 메서드 내에서만 사용되는 지역 변수에 별칭을 지정하여 참조 필드를 만들 수 있다면 문제가 될 수 있다. 메서드가 반환되고 나면 해당 필드는 어떻게 되야 할까?

다음 세 가지의 경우에도 지역 변수의 수명과 관련된 문제로 인해 참조 지역 변수를 사용할 수 없다.

이터레이터 블록은 참조 지역 변수를 포함할 수 없다.

비동기 메서드는 참조 지역 변수를 포함할 수 없다.

참조 지역 변수는 익명 메서드나 지역 메서드 내에서 캡처될 수 없다(지역 메서드는 14장에서 살펴볼 것이다).

이 세 가지는 지역 변수가 해당 변수를 선언한 메서드를 벗어나는 경우에도 수명이 연장되는 경우다. 사실, 이러한 상황에서 참조 지역 변수를 사용할 때 문제가 발생할 가능성이 있는지의 여부는 컴파일러 수준에서 충분히 판단할 수 있다. 그럼에도 불구하고 매우 단순한 언어 규칙만을 사용하도록 정의되었다(이에 대한 또 다른 예로 지역 메서드가 있다. 지역 메서드는 메서드 그룹 변환에서는 사용되지 않지만 포함 메서드에 의해서는 호출 가능하다).

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