해결된 질문
작성
·
84
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
안녕하세요, 자바 입문 강의를 수강하고 있는 병아리 입문자입니다. 일단 지나치게 기초적인 질문이라면 죄송합니다. 다만 강의와 수업 자료에 설명이 생략되어 있어 질문 드립니다.
자바 입문 강의의 ScannerWhileEx3 문제에서(7. 훈련 파트)
int input에 scanner.nextint() 기능으로 사용자 입력을 받는다는 것은 이해했습니다.
그런데 어차피 매개변수 input에 사용자 값을 입력 받을 텐데 굳이
int input = 0;으로 초기화하는 이유는 무엇인가요?
강의를 듣기 전에 제가 input를 선언하기만 하고 바로 사용자 값 입력을 받았을 때는 무탈히 프로그램이 작동된 것 같아 더 의문이 듭니다. 답변 기다리겠습니다.
강의 잘 듣고 있습니다. 감사합니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 자바재밌당님!
질문해주신 내용에 대해 답변드리겠습니다.
변수를 초기화하는 이유는 프로그래밍에서 매우 중요한 개념입니다. int input = 0;
라고 초기화하는 이유는 변수를 선언할 때 그 초기값을 명시적으로 설정하는 것입니다. 이는 여러 측면에서 중요할 수 있습니다:
명시적 초기화: 변수를 선언하면서 즉시 초기화하면, 다른 코드에서 해당 변수를 사용하기 전 상태에 대해 명시적으로 알 수 있습니다. 이는 잠재적인 오류를 줄이는 데 도움을 줍니다.
안전성: 입문자들이 변수를 사용하기 전에 초기화하지 않아 발생할 수 있는 문제를 예방할 수 있습니다. 초기화되지 않은 변수를 사용할 경우, 예기치 않은 동작이 발생할 수 있습니다.
가독성: 코드의 가독성을 높이며 다른 개발자가 코드를 이해하는 데 도움을 줍니다.
편의성: 때에 따라 변수를 반복문 실행 전 초기화해야 하는 경우, 입력값이 들어오기 전 변수를 초기화 상태로 유지할 수 있습니다.
실제로, 여러분이 경험하신 것처럼, Java에서는 특정 상황에서 (특히 지역 변수가 아닌 경우) 초기화를 생략해도 문제 없이 작동할 때가 많습니다. 하지만 초기화를 통해 명확성을 제공하는 것이 좋습니다.
이 질문과 유사한 질문이 이전에 논의된 적이 있습니다. 관련 링크를 참고하시길 바랍니다.
해당 게시물에서 추가적인 정보와 예시를 제공하고 있으니 확인해보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
안녕하세요 우연히 질문글을 보게 되어서 댓글 남깁니다.
Scanner scanner = new Scanner(System.in);
int sum = 0;
int count = 0;
int input;
System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요:");
//반복문 예제1
while (true) {
input = scanner.nextInt();
if (input == -1) {
break;
}
sum += input;
count++;
}
//반복문 예제2
/*
while ((input = scanner.nextInt()) != -1) {
sum += input;
count++;
}
*/
double average = (double) sum / count;
System.out.println("입력한 숫자들의 합계: " + sum);
System.out.println("입력한 숫자들의 평균: " + average);
}
위와 같이 input을 초기화를 안해도
scanner.nextInt() 메서드를 통해 입력된 정수를 받고 해당 값이 변수에 할당되어서
동작에는 문제가 없습니다.
그러나 AI 인턴이 말한것과 같이 명시적 초기화와 안전성, 가독성의 이유로
int input=0; 으로 초기화를 합니다.
이렇게 되면 초기화를 안했을때와 다르게 해당 주소값에는 0이라는 값이 있게 되며
어떤 값이 있는지 모르는 상태가 아닌 안전성이 있는 변수가 됩니다.
또한 현재 코드의 경우 간단한 코드라서 가독성이 문제 없지만 만일 복잡한 코드일 시에는
다른 개발자가 보기에 해당 초기값이 무엇인지 확인이 힘드니. 위와같이 초기화를 진행하여
0으로 명시를 주게된다면 다른 개발자가 보기에도 이해하기 쉬운 코드가 될 것입니다!
변수를 초기화하지 않으면 프로그램 오류가 발생할 수 있다는 것은 이해했습니다. 하지만
이 문제의 경우에는 int input = scanner.nextint();에서 이미 input이 사용자 입력값으로 초기화 된 상황이 아닌가요? input 값을 sout 기능으로 출력하는 것도 초기화한 다음이기 때문에 오류가 발생할 여지가 어디에 있는 것인지 이해가 잘 가지 않습니다...ㅠ 더불어 7. 훈련 단원의 다른 문제들에서는 매개변수를 굳이 0으로 초기화하지 않고 바로 사용자 입력값으로 초기화하는 방식으로 해설되어 있어서 더 헷갈리는 것 같습니다. 이 문제만 굳이 0으로 먼저 초기화해야 하는 이유가 있을까요...?
제시해주신 링크의 답변도 읽어 보았는데, 제가 입문자라 아직 배움이 부족해서인지 여전히 의문이 해소되지 않았습니다. 답변 기다리겠습니다. 감사합니다...!