Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

5.6 배열(Array) 타입 본문

이것이 자바다/05 참조 타입

5.6 배열(Array) 타입

빌드이너프 2024. 3. 31. 18:21

배열 변수 선언

타입[] 변수; //더 많이 사용

타입 변수[];

 

배열의 변수는 참조 변수

배열도 객체이므로 힙 영역에 생성되고 배열 변수는 힙 영역의 배열 주소를 저장한다

참조할 배열이 없다면 배열 변수도 null로 초기화할 수 있다

 

만약 배열 변수가 null 값을 가진 상태에서 변수[인덱스]로 값을 읽거나 저장하게 되면 NullPointerException이 발생한다

타입[] 변수 = null;

 

 

값 목록으로 배열 생성

타입[] 변수 = { 값0, 값1, 값2, 값3, ... };

 

중괄호 {}는 나열된 값들을 항목으로 가지는 배열을 힙에 생성하고, 번지를 return 한다

배열 변수는 return된 번지를 저장함으로써 참조가 이루어진다

 

예제

package ch05.sec06;

public class ArrayCreateByValueListExample1 {
	public static void main(String[] args) {
		//배열 변수 선언과 배열 생성
		String[] season = { "Spring", "Summer", "Fail", "Winter" };
		
		//배열의 항목값 읽기
		System.out.println("season[0]: " + season[0]);
		System.out.println("season[1]: " + season[1]);
		System.out.println("season[2]: " + season[2]);
		System.out.println("season[3]: " + season[3]);
		
		//인덱스 1번 항목의 값 변경
		season[1] = "여름";
		System.out.println("season[1]: " + season[1]);
		System.out.println();
		
		//배열 변수 선언과 배열 생성
		int[] scores = { 83, 90, 87 };
		
		//총합과 평균
		int sum = 0;
		for(int i=0; i<scores.length; i++) {
			sum += scores[i];
		}
		System.out.println("총합: " + sum);
		
		double avg = (double) sum/3;
		System.out.println("평균: " + avg);
	}
}
season[0]: Spring
season[1]: Summer
season[2]: Fail
season[3]: Winter
season[1]: 여름

총합: 260
평균: 86.66666666666667

 

 

중괄호 {}로 감싼 값의 목록을 배열 변수에 대입할 때, 배열 변수를 미리 선언한 후에는 값 목록을 변수에 대입할 수 없다

타입[] 변수;
변수 = { 값0, 값1, 값2, 값3, ... }; //컴파일 에러

 

배열 변수를 선언한 시점과 값 목록이 대입되는 시점이 다르다면

new 타입[]을 중괄호 앞에 붙여주면 된다

타입[] 변수;
변수 = new 타입[] { 값0, 값1, 값2, 값3, ... };
String[] names = null;
names = new String { "A", "B", "C" };

 

메소드의 매개변수가 배열 타입일 경우에도 new를 사용하면 된다

printItem() 메소드를 호출할 때 매개값으로 중괄호를 감싼 값 목록을 주면 에러가 발생

//메소드 선언
void printItem(int[] scores) { ... }

//잘못된 메소드 호출
printItem( {95, 85, 90} ); //컴파일 에러

 

매개변수가 이미 선언되어 있고, 호출 시 값 목록을 제공하므로 다음에 같이 호출해야 함

//메소드 선언
void printItem(int[] scores) { ... }

//올바른 메소드 호출
printItem(new int[] {95, 85, 90} );

 

예제

package ch05.sec06;

public class ArrayCreateByValueListExample {
	public static void main(String[] args) {
		//배열 변수 선언
		int[] scores;
		
		//배열 변수에 배열을 대입
		scores = new int[] {83, 90, 87};
		
		//배열 항목의 총합
		int sum = 0;
		for(int i=0; i<scores.length; i++) {
			sum += scores[i];
		}
		System.out.println("총합: " + sum);
		
		//배열을 매개값으로 주고, printItem() 메소드 호출
		printItem(new int[] {83, 90, 87, 90});
	}
	
	//printItem() 메소드 선언
	public static void printItem(int[] scores) {
		for(int i=0; i<scores.length; i++) {
			System.out.println("scores[" + i + "]: " + scores[i]);
		}
	}
}
총합: 260
scores[0]: 83
scores[1]: 90
scores[2]: 87
scores[3]: 90