본문 바로가기

개발언어/Java

[JAVA] JAVA 지역 변수의 범위

이전의 정적 팩터리 부분에 이어서 effective java의 내용을 정리한 글입니다.


C와 같이 역사가 깊은 프로그래밍 언어의 경우 지역 변수를 코드의 첫 블럭에 선언하는 경우가 많다.


이러한 전통이나 습관이 이어져서 자바에서도 코드의 첫 블럭에 지역변수를 선언하는 경우를 많이 볼 수 있는데, 이는 자바처럼 어디서든 변수를 선언할 수 있는 언어의 경우 좋은 습관이 아니다.


지역변수는 유효범위를 최소로 줄이면 변수의 가독성과 유지 보수에 관한 장점이 크게 올라가는데


지역변수가 코드의 첫부분에 선언된것 만으로도 코드가 어수선해져 가독성이 떨어지게 된다.

(변수를 실제로 사용하는 시점에서는 타입과 초깃 값이 기억나지 않을 수 있다.)


즉, 지역변수의 범위를 줄이는 가장 강력한 기법은 ‘가장 처음에 쓰일때 선언하기’다.


만약 이렇게 선언되지 않고, 사용되는 위치와 멀리떨어진 곳에서 선언된 코드는 해당 코드 블럭의 범위에서 계속 살아있게 되고, 실수로 이 변수를 잘못 사용하게되면 예상치 못한 결과를 일으키게 된다.


또한, 거의 모든 지역변수는 선언과 동시에 초기화 되어야 한다.(초기화에 필요한 정보가 충분하지 않다면, 충분해질 때까지 선언을 미뤄야한다.)


단, try-catch문은 이 규칙에서 예외이다. 이는, 변수 초기화 과정에서 검사 예외를 던질 가능성이 있다면 try블록 내부에서 초기화를 해주어야지 그렇지 않은 경우 예외가 블록을 넘어 메서드에까지 전파되기 때문이다.


마지막으로 이처럼 지역변수의 범위를 최소화 하기 위한 방법은 메소드를 작게 유지하고 한가지 기능에 집중하는 것이다.


한 메소드에서 여러가지 기능을 처리한다면 그 중 한 기능과만 관련된 지역변수라도 다른 기능을 수행하는 코드에서 접근할 수 있기 때문이다. 


이를 위해서는 단순히 메소드를 기능별로 쪼개면 된다.


정리하자면, 


지역변수를 사용하는 습관

1.가장 처음에 쓰일때 선언하기

2.선언과 동시에 초기화


이 습관을 돕기 위한 메소드 작성 방식

1.메소드를 작게 유지하고 한가지 기능에 집중하기