본문 바로가기

Programming/JAVA

java : 배열은 참조변수!

자바의 정석에 보면 밑의 예제가 있습니다.

class ArrayEx6{
   public static void main(String[] args){
      int[] number = new int[10];
      int[] counter = new int[10];
      for(int i=0; i < number.length; i++)
          System.out.println(number[i] = (int)(Math.random() * 10));
      System.out.println();
      for(int i=0; i<number.length; i++)
         counter[number[i]]++;
      for(int i=0; i<number.length; i++)
         System.out.println(i+"의 개수 : "+counter[i]);
   }


위의 출력결과가 어떻게 될까요?? 난수를 생성해서 출력하고 있는데, 질문이 어처구니 없다고 생각하시겠죠 ㅎㅎ;;;
 
사실 저 코드중에 제가 좀 당황하고 있던 부분은

counter[number[i]]++;

이 부분입니다.
반복문을 통해서 i가 10까지 증가하게 하면서 number[i] 의 위치에 있는 counter 배열을 증가시킨다라..

뭔 말인가 생각하고 구현해서 소스를 보고도 이해를 잘 못하고 있던 중에
내가 counter가 기본타입의 변수로 오해하고 있구나라는 생각을 하였습니다.
counter는 특정 주소를 가리키고 있는 integer타입의 변수입니다.
integer타입의 변수는 default 초기화는 0이죠.

counter[n] 은 counter 참조변수가 가리키고 있는 4byte의 메모리 블록들의 가장 선두로부터 n번째에 위치한
value 입니다. (integer는 4byte의 메모리를 가집니다.)

따라서 counter[n]++ 는 value 자체를 1 증가시키는 것입니다.

와... 이 쉬운 기초를 또 너무 어렵게 해석해서 풀이하고 있네요 ㅎㅎ.
작성자가 심각한 초보임을 이해해주세요 ㅠㅠ

결과는 직접 작성해서 확인해보셔요 :)