57. 지역변수의 범위를 최소화하라
지역 변수는 선언된 지점부터 사용되는 곳까지의 범위를 최소로 줄여야 코드의 가독성과 유지보수성이 좋아진다.
📌 1. 발표 전 알아야 할 개념
지역 변수(Local Variable)
메서드, 생성자, 또는 블록 내부에 선언된 변수
해당 블록이 실행되는 동안에만 메모리에 존재하고 사용할 수 있는 변수
public void greet() {
String message = "Hello, world!"; // 지역 변수
System.out.println(message);
}
📕 2. 지역 변수의 범위를 최소화하자
2-1. 왜 최소화 해야 할까?
변수의 용도와 사용 범위가 명확해지면서, 가독성 향상
변수의 상태를 추적하기가 쉬워 버그 예방
변수 이름 재사용 가능
코드 리팩토링 용이
2-2. 어떻게 최소화할까?
🔗 테스트 코드 : https://github.com/s0ooo0k/STUDY-CODE/tree/main/src/item42
☝🏼 1. 변수를 사용하는 가장 가까운 지점에 선언하자
변수를 너무 앞에 선언하면, 변수가 어디서 쓰이는지 추적이 어렵다
조건문, 반복문 안에서만 쓰이는 변수라면 블록 안에서 선언하는 것이 명확하다
변수의 범위(scope, 스코프)를 최소화할 수 있고, 불필요한 사용을 방지한다.
public void cook(Food food){
// 1. 사용하는 가장 가까운 지점에서 선언하자
// String name = food.getName(); // 선언이 너무 빠름
if(food.isFinished()){
String name = food.getName();
System.out.println("조리 완료 : " + name);
}
}
☝🏼 2. 선언과 동시에 초기화하라
변수 선언 시 초기화하는 습관을 들이자
만약, 초기화에 필요한 정보가 충분하지 않다면, 충분해질 때까지 선언을 미뤄야 한다.
try-catch는 예외
```java
public void cook(Food food){
if(food.isFinished()){
String name = food.getName();
// 2. 선언과 동시에 초기화하자.
int price = food.getPrice();
System.out.println("조리 완료 : " + name);
}
}
☝🏼 3. 루프 변수는 루프 내부에 선언하자
반복문 안에서만 사용하는 변수는 반복문 안에서만 선언하자
반복문 내부에 선언할 경우 해당 반복문 내에서만 유효, 코드 안정성이 높아진다다
바깥에서 선언할 경우 스코프가 넓어지고 추후 재사용에서 오류가 발생할 가능성이 높다
while문 보다는 for문을 활용하자
```java
public void cook(Food food){
for(String ingredient : food.getIngredients()){
System.out.println(ingredient); // loop 안에서만 ingredient 존재
}
}
☝🏼 4. try-finally에서 변수 범위에 주의하자
변수를 초기화하는 표현식이 예외를 던질 가능성이 있다면, 변수 초기화는 try 블록 안에서 초기화
변수의 스코프를 좁히는 것이 좋지만, 예외적으로 리소스(I/O Stream 등)를 다룰 땐 범위를 넓게 선언해야 한다
BufferWriter
,InputStream
등은 fianlly 블록에서 반드시 close() 해야 하기 때문에, try 바깥에서 미리 선언하는 것이 정석이다. 그렇지 않으면 fianlly에서 닫을 수 없거나 컴파일 오류 발생.
// finally에서 사용해야 하므로 try 바깥에 선언언
BufferedWriter writer = null;
try {
// writer 초기화는 try 안에서서
writer = new BufferedWriter(new FileWriter("output.txt"));
writer.write("Hello, Food!");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
// close 필수수
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
💨 향후 확장 포인트
멀티 스레드 환경에서의 변수 범위
멀티 스레드 환경에서는 변수 범위가 넓어지면 여러 스레드에서 해당 변수에 동시에 접근할 가능성이 높아진다
멀티스레드 환경에서는 공유 상태를 줄이고, 지역 변수 스코프를 최소화하는 것이 중요하다
스레드 안정성 측면에서 스코프 최소화는 필수
🤖 최종 결론
지역 변수는 꼭 필요한 지점에 선언하고, 선언 동시에 초기화하라 반복문, 조건문, try-finally 등 컨텍스트에 맞게 스코프를 설계하라.
😶🌫️ 느낀점
변수 선언이나 초기화는 의식하지 않고 습관적으로 해왔던 경험이 많은 거 같은데, 앞으로 스코프를 신경쓰면서 작성해야겠다.
Last updated