자바 1차원 정수형 배열의 반환 질문드립니다

조회수 650회
public void getGradeMenu()
{
    int Scores[] = new int[StudentNum];
    while(MenuNum != 7)
    {
        showGradeMenu();
        MenuNum = scan.nextInt();
        switch(MenuNum)
        {
            case 1: getGradeArray(Scores);
                    break;
            case 2: getGradeList(Scores);
                    break;
            case 3: pickGradeList(Scores);
                    break;
            case 4: checkMinMaxGrade(Scores);
                    break;
            case 5: CheckAvgMinddleGrade(Scores);
                    break;
            case 6: sortGrade(Scores);
                    break;
            case 7: break;
            default : System.out.println(" 프로그램 없음! ");
        }
    }
}
public void getGradeArray(int []Array)
{
    for(int i=0; i <Array.length; i++)
    {
        System.out.println("성적을 입력하세요 : ");
        Array[i] = scan.nextInt();
    }
}

getGradeArray에서 1차원 배열을 만들었습니다.

제 머리로는 return Array 를 해서 배열을 반환 후 getGradeMenu메소드에서 해당 배열을 불러와야 한다고 생각하는데 막상 리턴을 시키면 값이 안옵니다. 배열을 리턴하면 값은 사라지지 않는다던데 제가 잘못 불러온걸까요? 배열의 값을 확인하는 메소드에서 불러오면 값만 가져오는게 아니라 입력을 새로 받게해서 무용지물이 됩니다.

더 이해가 안되는 건 위의 코드는 리턴을 하지 않았는데 Scores배열로 값이 잘 들어갔다는겁니다. Scores 배열에서 무슨 수로 반환도 안한 Array배열의 값을 가지고 있는지 도통 이해가 안갑니다. 매개 변수의 역할을 제가 잘못 알고 있는건지.. 도통 이해가 안갑니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • 음... 자바를 써본지가 굉장히 오래 되어서 잘 기억은 안나지만 이렇게저렇게 더듬어서 설명을 드리자면, 일반적으로 정수나 소수 같은 경우에는 말씀하신대로 되는 것이 맞습니다.

    하지만 배열의 경우에는 레퍼런스 변수라고 해서, parameter로 값을 전달했을 때 실제 값이 아니라 해당 값들이 저장된 주소가 전달됩니다.

    그래서 특정 함수에서 배열에 값을 저장하면, 그 함수를 빠져나왔을 때에도 동일한 주소에 여전히 그 값이 남아있게 되고, 따라서 반환값이 없어도 이미 종료된 함수에서 배열에 저장한 값을 불러올 수 있게 되는 것입니다.

    비유가 적절할지 모르겠지만 예를 들자면,

    한 친구가 질문자분께 책을 빌려달라고 부탁했다고 해볼게요.

    정수, 소수 등의 변수는 책의 복사본을 주는 거라고 생각하시면 됩니다.

    따라서 그 복사본에 필기를 하든, 낙서를 하든 질문자분께서 가지고 있는 책은 아무런 변화가 없죠.

    이와 달리 배열을 parameter로 전달하는 것은 사물함에 책을 넣어놓고 사물함 번호를 알려주는 것이라고 생각하시면 됩니다.

    그러면 친구는 질문자분께서 알려준 사물함을 찾아가서 책을 꺼내 수업을 듣게 되겠죠?

    수업을 다 듣고 나면 친구가 책을 사물함에 돌려놓을 것이고, 당연하게도 그 책에는 친구가 한 필기나 낙서가 남아있게 되는 것입니다.

    비유때문에 오히려 헷갈리시지 않을까도 싶지만.. 이런 식으로 이해하시면 될 것 같아요.

  • To return an array from a method to another method in Java, first, we have to create an array in Java and store array elements than simply return to the caller method.

    class Test{
    
      // main method
      public static void main(String[] args) {
    
        // read array from a method
        int[] a = readArray();
    
        // display array elements
        for(int i=0; i < a.length; i++){
          System.out.print(a[i] + "\t");
        }
      }
    
      // method to return array elements
      static int[] readArray(){
        int[] arr = {10,20,30,40};
        return arr;
      }
    
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)