java

[이것이자바다] 5.6 배열타입(1)

희구 2021. 8. 22. 19:04

배열이란

- 같은타입의 데이터를 연속된 공간에 저장하는 자료구조

- 각 데이터 저장 위치는 인덱스를 부여해서 접근할 수 있다.

배열의 인덱스는 0 부터 시작.
score[3] = 90;
스코어의 3번째인덱스에 있는 항목은 90이다.

 

 

배열의 필요성?

- 중복된 변수 선언을 줄이기 위해 사용

- 반복문을 이용해서 요소들을 쉽게 처리하기 위해

 

 

배열선언

- 배열을 사용하기 위해서는 우선 배열변수를 선언해야 한다.

- []배열문자 뒤 또는 앞에 선언하는 변수를 배열변수라고 한다.

- 타입[] 변수;      ex) int[] array ;
- 타입 변수[];      ex) int array [];

 

- 배열변수는 참조변수이므로 배열이 생성되기 전에 null로 초기화가 가능하다.

- 참조변수의 경우에는 값이 없을 땐 힙 영역의 null을 참조함.

타입[] 변수 = null;

- 배열변수가 null일 때 항목에 접근할 수 없다.

 즉 변수[인덱스]가 안된다. -> NullPointerException 발생

 값을 넣은 후 접근 가능!

 


값 목록으로 배열 생성

  • 변수 선언과 동시에 값 목록 대입
데이터타입[] 변수 = {값0, 값1, 값2, 값3 ...};

ex) String[] names = {"이호석", "김선호", "최우식"};

이 값들은 힙 영역에 인덱스번호 0부터 저장이 된다.

 

  • 변수 선언 후에 값 목록 대입
데이터타입[]  변수;
변수 = new 타입 [] {값0, 값1, 값2 ..};

ex) String[] names = null;
names = new String[] {"이호석", "김선호", "최우식"};

변수 선언 후에 값 목록을 대입하는 경우에는

대입하는 값 앞에 new와 타입[]을 넣어주어야 한다.

 

: 배열을 매개변수로 가지는 메소드를 호출할때 , 배열을 직접 생성해서 매개값으로 줄 경우 이렇게 배열을 생성한다.

 

예제1)

package review;

public class Array01 {
	
	public static void main(String[]args) {
		int[] score = {83, 90, 87};
		
		System.out.println("score[0] : " + score[0]);
		System.out.println("score[1] : " + score[1]);
		System.out.println("score[2] : " + score[2]);
		
		int sum = 0;
		for (int i=0; i<3; i++) {
			sum += score[i];
		
		}
		
		System.out.println("총합 : " + sum);
		double avg = (double) sum /3; //소수점 아래까지 정확히 출력하기 위해 실수/정수를 해준다.
		System.out.println("평균 : " + avg);
	}
	


}

 

예제2)

package review;

public class Array2 {

	public static void main(String[] args) {
		int[] scores;
		scores = new int[] {83, 90, 87}; //배열을 먼저 선언하고 배열에 값을 넣을 땐 값만 쓰지 말고 new와 배열타입[]을 붙인다.
		
		int sum1=0;
		for(int i=0; i<3; i++) {
			sum1 += scores[i];
		}
		
		System.out.println("총합 : " + sum1);
		
		int sum2 = add(new int[] {83, 90, 87});
		System.out.println("총합 : " + sum2);

	}
	
	//add라는 메소드의 매개변수로 int[] scores라는 배열변수가 선언되어있는 상황.
	//add는 배열객체의 항목들을 전부 다 더해서 
	public static int add(int[] scores) { 
		int sum1=0;
		for(int i=0; i<3; i++) {
			sum1 += scores[i]; //배열 안에 들어있는 항목 값의 누적
		}
		
		return sum1;
		
	}

}

 

 


new 연산자로 배열 생성

- 배열 생성 시 값 목록을 가지고 있지 않고 프로그램이 실행하면서 동적으로 값을 저장하고 사용하고 싶을 경우

  향후 값들을 저장할 배열을 미리 생성하고 싶을 경우

타입[] 변수 = new 타입[길이];                  ex)길이: 저장하고싶은 값의 개수
타입[] 변수 = null;
변수 = new 타입[길이];

전체 길이에서 -1 한 값이 전체 인덱스 번호이다.

 

항목의 기본값

분류 데이터타입 초기값
기본타입 (정수) byte[] 0
char[]  '\u0000'
short[] 0
int[] 0
long[] 0L
기본타입 (실수) float[] 0.0F
double[] 0.0
기본타입 (논리) boolean[] false
참조타입 클래스[] null
인터페이스[] null

 

int[] scores = new int[30];

 

String[] names = new String[30];

 

> new로 배열을 생성할 때는 항목의 기본값이 존재한다.

 

예제1 )

package review;

public class Array_new {

	public static void main(String[] args) {
		int[] arr1 = new int[3];
		
		for(int i =0; i<3; i++) {
			System.out.println("arr1[" + i + "]: " + arr1[i]);
		}
	}

}

결과창

 

> 만약 0인덱스에 10을 저장하고 싶다?

package review;

public class Array_new {

	public static void main(String[] args) {
		int[] arr1 = new int[3];
		
		for(int i =0; i<3; i++) {
			System.out.println("arr1[" + i + "]: " + arr1[i]);
		}
		System.out.println();
		
		//각 배열에 새로운 값 저장
		arr1[0] = 10;
		arr1[1] = 20;
		arr1[2] = 30;
		
		for(int i=0; i<3; i++) {
			System.out.println("arr1[" + i + "]: " + arr1[i]);
		}
	}
	

}

결과창

 

 

> 실수타입 배열 만들고 새로운 값 대입하기

//실수타입 배열 만들기
double[] arr2 = new double[3];
for(int i=0; i<3; i++) {
	System.out.println("arr2[" + i + "]: " + arr2[i]);
}
System.out.println();
		
//각 배열에 새로운 값 저장
arr2[0] = 0.1;
arr2[1] = 0.2;
arr2[2] = 0.3;
for(int i=0; i<3; i++) {
	System.out.println("arr2[" + i + "]: " + arr2[i]);
}
System.out.println();

결과창

 

 

> 스트링 타입 배열 만들고 새로운 값 대입하기

String[] arr3 = new String[3];
for(int i=0; i<3; i++) {
	System.out.println("arr3[" + i + "]: " + arr3[i]);
}
System.out.println();
		
arr3[0] = "이호석";
arr3[1] = "김선호";
arr3[2] = "최우식";
for(int i=0; i<3; i++) {
	System.out.println("arr3[" + i + "]: " + arr3[i]);
}

결과창

 

 

 

출처: 신용권님의 '이것이 자바다' 교재 및 유튜브 강의(https://youtu.be/dDD8T7fbq9k)