인프런 커뮤니티 질문&답변

core12님의 프로필 이미지

작성한 질문수

김영한의 실전 자바 - 기본편

문제와 풀이

자바메모리구조와 static 파트 관련 질문드립니다.

24.07.06 08:40 작성

·

172

·

수정됨

1

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
문제2. 수학 유틸리티 클래스 관련 몇가지 질문 드립니다.

1)아래 코드와 같이 sum 등을 따로 private static 변수로 만들어도 되나요?

public class MathArrayUtils {
private static int sum = 0;
private static int
min = 0;

private static int
max = 0;
private static int
[] values;

private
MathArrayUtils(){

}
public static int sum(int[] values){
int sum = 0;
for
(int value : values) {
sum += value;
}
return sum;
}
public static double average(int[] values){
return (double) sum / values.length;
}
public static int min(int[] values){
min = values[0];
for
(int value : values) {
if (value < min){
min = value;
}
}
return min;
}
public static int max(int[] values){
max = values[0];
for
(int value : values) {
if(value > max){
max = value;
}
}
return max;
}
}

2) 기존 답 코드의 sum, average 등 static method는 MathArrayUtilsMain에 따로 그 값을 받아줄 변수가 없는데 public static int와 같이 따로 return type을 지정해야 하는 이유가 궁금합니다.

static이어서 생성자를 생성하지 않고, 클래스에서 바로 값을 가져오기 때문에 따로 반환 값을 받아줄 변수를 지정하지 않아도 되는 것인가요?

답안 예시처럼 MathArrayUtils.sum(values)이라면 따로 method 결과값을 받아줄 변수가 없다면 없어도 되는 건 아닌지 질문드립니다.

3) MathArrayUtils 클래스에 private int[] values와 같이 array변수를 생성하지 않아도 되나요? 바로 Main메서드에서 array 변수를 생성 및 초기화하고 그 값이 클래스 메서드의 매개변수로 전달될 수 있는 건가요?

답변 1

0

David님의 프로필 이미지

2024. 07. 06. 18:27

안녕하세요. core12님, 공식 서포터즈 David입니다.

  1. 이런 경우에는 클래스 변수를 사용하시면 안 됩니다. 여러 곳에서 해당 클래스를 사용할 시, 클래스 변수의 값은 여러 곳에서 호출되는 메서드로 인해 값이 섞이게 되어 원하는 결과가 나오지 않게 됩니다.

  1. 반환 값이 있어야 println 문에서 호출시 값을 출력할 수 있습니다. 만약 반환값이 없다면 println 문에서 해당 메서드를 호출하여도 결과를 알 수 없습니다.

  2. 네, 메인 메서드에서 생성하여 메서드의 매개변수로 전달 가능합니다. 본 강의 배열도입 부분, 기본형과 참조형 섹션을 참고해 주세요.

감사합니다.

core12님의 프로필 이미지

작성한 질문수

질문하기