글 작성자: 취업중인 피터팬
728x90
JDK : 1.8.0_261 버전
JRE : 1.8.0_261 버전
JAVA VERSION : 8 업데이트 261
Eclipse IDE VERSION : 2020-06버전

 

목표

기초 배열(1)과 기초 배열(2)에 대한 이해도가 있어야 합니다.

자바의 배열에서 사용하는 참조값을 이해한다.

배열을 매개변수로 보내는 원리를 이해한다.


 

 

코드
package ex06array;

public class E02ArrayAndMethod {

	public static void main(String[] args) {
		
		//배열을 선언과 동시에 초기화. 요소의 갯수의 의해 크기 결정됨
		int[] arr = {1, 2, 3, 4, 5};
		//배열 변수만 선언한 상태로 아직 참조하는 배열이 없음.
		int[] ref;
		
		System.out.println("초기화 직후 출력");
		for(int i = 0; i<arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		
		/*
		 배열명을 매개변수로 전달하는 것은 배열의 참조값(주소값)을 전달하는
		 것이다. 정수의 경우는 해당값이 그대로 전달된다.
		 */
		ref = addAllArray(arr, 7);
		
		/*
		addAllArray() 메소드에서 반환하는 값은 처음에 전달했던 배열의
		주소값이므로, 결과적으로 ref도 동일한 배열을 참조하게 된다.
		 */
		
		//동일한 참조값이 출력됨
		System.out.println("arr = " + arr);
		System.out.println("ref = " + ref);
		
		/*
		 arr과 ref는 동일리한 참조값을 가지게되었으므로 출력결과도 동일함.
		 */
		System.out.println("메소드 호출후 출력");
		for(int i = 0; i<ref.length; i++) {
			System.out.println(ref[i] + "  ");
		}
		System.out.println();
		for(int i = 0; i < arr.length; i++) {
			System.out.println(arr[i] + "  ");
		}
		
	}
	
	/*
	매개변수로 전달된 참조값을 ar이 받게 되므로 결국 동일한 배열을
	참조하게 된다. 즉 main()함수 지역은 arr과 같은 배열이다.
	 */
	
	static int[] addAllArray(int[] ar, int addVal) {
		for(int i = 0; i<ar.length; i++) {
			/*
			 배열의 각 요소값에 7을 더한후 결과값을 다시 저장함.
			 즉 7씩 증가시키는 연산이 수행됨.
			 */
			ar[i] += addVal;
		}
		return ar;
	}

}

 

배열(1)에서 변수 값은 heap 영역에 주소값을 가지고 있다고 했습니다. 만약 함수의 매개변수로 배열을 전달하게 된다면 주소값이 전달이 됩니다. 이건 규칙입니다. 그냥 외우시면 됩니다. 주소값이 전달이 되므로 addAllArray의 매개변수로 arr의 주소값이 전달이 됩니다. 그러므로 addAllArray 함수에서 배열을 처리하면(배열의 값을 +1한 값) arr의 배열도 똑같이 바뀌게 됩니다. 처음에 알고 굉장히 신기했습니다.

 

결과 값

 

'Java > Java_기초부터 _끝까지' 카테고리의 다른 글

Java 기초 배열(3-2) - 응용  (0) 2020.10.22
Java 기초 배열(3-1) - 응용  (0) 2020.10.22
Java 기초 배열(2)  (0) 2020.10.21
Java 기초 배열(1)  (0) 2020.10.21
Java 기초 함수 - 연습문제(4)  (0) 2020.10.19