반복문 Scope 내부에 변수 선언 괜찮을까?

개발연습생log·2024년 2월 16일
0

Java

목록 보기
2/2
package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx3 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int sum = 0;
        int count = 0;

        System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요:");
        while (true) {
            int num = scanner.nextInt();
            scanner.nextLine();

            if (num == -1) {
                break;
            }

            sum += num;
            count++;
        }

        System.out.println("입력한 숫자들의 합계: " + sum);
        System.out.println("입력한 숫자들의 평균: " + ((double) sum / count));
    }
}

입력한 숫자들을 모두 더하는 while문 코드를 작성했다. 코드를 보면서 문득 이러한 생각이 들었다.
입력을 받는 num 변수를 while문 내부에 선언해도 될까?
반복문 Scope 내부에 선언한 지역 변수는 반복문이 종료될 때까지 생명 주기에 남아있다. 그러면 반복문이 실행될 때마다 계속 변수가 선언되면서 메모리를 많이 사용하는 것이 아닌가 의문이 들었다.

김영한의 자바 입문 커뮤니티에 답이!

인프런 자바 입문 강의 커뮤니티에 나와 비슷한 의문을 가지신 분이 질문을 올리셨고 답변이 올라왔다.

GC가 잘 관리해준다!

답변은 아래와 같았다.

메모리 관리: 자바는 가비지 컬렉터를 사용하여 더 이상 사용되지 않는 객체나 변수를 자동으로 관리합니다. 따라서 반복문 내에서 변수를 생성하고 사용한 뒤에는 가비지 컬렉터가 적절한 시점에 자동으로 메모리를 정리합니다. 이로 인한 성능상의 부담은 대부분의 경우에 무시할 수 있습니다.

성능 최적화 고려사항: 매우 높은 성능이 요구되는 상황에서는 변수 선언의 위치가 중요할 수 있습니다. 예를 들어, 매우 빈번하게 실행되는 반복문에서는 변수를 반복문 밖에서 선언하고 반복문 내부에서 재사용하는 방식이 성능에 미묘한 영향을 줄 수 있습니다. 하지만 이런 경우는 특별한 상황에서만 필요하며, 대부분의 일반적인 애플리케이션 개발에서는 큰 차이가 없습니다.
자바에서는 일반적으로 변수를 그 사용 범위에 맞게 가능한 한 근접한 곳에 선언하는 것이 권장됩니다. 이러한 방식은 코드의 가독성과 유지보수성을 향상시키는 동시에, 현대의 자바 가상 머신(JVM)이 제공하는 메모리 관리 기능과 잘 어울립니다. 따라서 반복문 내에서 변수를 선언하고 사용하는 것은 자바에서 일반적으로 좋은 관행으로 볼 수 있습니다.

  • 빈번하게 재사용되는 반복문에서는 반복문 밖 변수 선언이 미묘한 성능 영향을 줄 수 있지만 특별한 케이스이다.
  • 따라서 사용 범위에 맞게 가능한 근접한 범위에서 변수를 선언하는 것이 가독성 측면에서 좋다는 답변이었다.

자바 공부.. 너무 얕게 공부한 것이 아닌가…

솔직히 자바 공부 이번이 처음이 아니다. 자바 스크립트를 사용하다가 처음부터 복습하고자 자바 공부를 시작했는데 이전에 깊이 생각하지 않고 대충 사용법만 공부했구나라는 것이 느껴졌다.

이번에 다시 자바 공부를 시작한 만큼 깊이 생각해보고 정리하고자 한다!

참고

profile
주니어 개발자를 향해서..

0개의 댓글