inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

문제와 풀이4

반복문에서 사용되는 변수 선언 위치

해결된 질문

678

파프리카

작성한 질문수 1

0

[질문 내용]
강사님, 안녕하세요!

반복문에서 사용되는 변수의 선언 위치에 대해 질문 드립니다.

반복문에서 반복 사용될 변수의 경우에 저는 위의 코드처럼 반복문이 시작하기 전에 선언하는 편이었는데요, 반복문이 실행될 때마다 변수가 선언되면 메모리 낭비가 아닐까 해서였어요.

 

그런데 교안 정답을 보니 productName, price, quantity를 반복문 내에서 선언하고 바로 사용하는 식으로 사용하시는 것을 보고 궁금해져 질문 드립니다!

유익한 강의 감사합니다! :)

java 객체지향

답변 1

5

김영한

안녕하세요. 박소영님

자바는 메모리 관리와 변수 스코프 관리에 있어 명확한 규칙과 효율적인 시스템을 갖추고 있습니다. 이러한 관점에서 반복문 내부에서 변수를 선언하는 것을 고려할 때 몇 가지 중요한 포인트가 있습니다.

 

스코프 관점

스코프 제한: 자바에서 변수를 반복문 내부에서 선언하면, 그 변수는 반복문의 블록 내에서만 존재합니다. 이는 변수의 스코프를 제한하여 코드의 가독성을 높이고, 실수로 다른 부분에서 해당 변수를 잘못 사용하는 것을 방지합니다.

가독성 및 유지보수: 변수를 그것이 사용되는 가장 근접한 범위 내에서 선언하는 것은 좋은 프로그래밍 관행입니다. 이렇게 하면 코드의 명확성이 높아지고, 다른 개발자들이 코드를 이해하고 유지보수하기 쉬워집니다.

 

성능과 메모리 관점

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

성능 최적화 고려사항: 매우 높은 성능이 요구되는 상황에서는 변수 선언의 위치가 중요할 수 있습니다. 예를 들어, 매우 빈번하게 실행되는 반복문에서는 변수를 반복문 밖에서 선언하고 반복문 내부에서 재사용하는 방식이 성능에 미묘한 영향을 줄 수 있습니다. 하지만 이런 경우는 특별한 상황에서만 필요하며, 대부분의 일반적인 애플리케이션 개발에서는 큰 차이가 없습니다.

 

자바에서는 일반적으로 변수를 그 사용 범위에 맞게 가능한 한 근접한 곳에 선언하는 것이 권장됩니다. 이러한 방식은 코드의 가독성과 유지보수성을 향상시키는 동시에, 현대의 자바 가상 머신(JVM)이 제공하는 메모리 관리 기능과 잘 어울립니다. 따라서 반복문 내에서 변수를 선언하고 사용하는 것은 자바에서 일반적으로 좋은 관행으로 볼 수 있습니다.

 

감사합니다.

4

파프리카

이해가 되었습니다. 상세한 답변 감사드려요!

문제와 풀이4 문제점

0

50

2

문제풀이 시간마다 방향성

0

46

2

피라미드 문제 풀이

0

73

1

ScannerWhile3 예제 코드 질문

0

58

1

짝수 출력 문제 질문

0

53

1

Array 연습 문제 5번 질문입니다.

0

85

2

단축어가 이상하게 나옵니다

0

133

2

Sql강의

0

91

1

array 문제풀이 2번 질문입니다.

0

57

1

JAVA입문 / 메서드편 문제와 풀이2

0

48

1

인텔리제이 무료버젼이 통합되었다는데 30일 무료버전이면 어떻게 사용하나요

1

818

3

OperationEx3에서 꼭 boolean을 써야 하나요?

0

63

1

for, while문 작성

0

66

1

68강 ArrayEx6 클래스 질문

0

61

1

IO.println(String.format("Hello and welcome!"));

0

153

2

소스코드 실행이 안돼요

0

120

2

메서드 문제와 풀이2에서 마지막 문제 이렇게 풀어도 괜찮은 건가요..?

0

80

1

While과 for 스코프 질문

0

64

1

김영한 java 입문 설치 질문

0

139

2

버퍼문제?

0

56

1

for문 피라미드 찍는거 질문

0

79

1

21버전이 없고, 강의 메뉴얼 확인해보면 된다는 김영한 선생님 답변 확인했습니다.

0

378

1

3번 문제 질문 있습니다.

0

100

2

sout에는 변수가 하나만 들어가야 하나요?

0

136

1