[Java] 배열

정동아·2023년 4월 19일
0

백엔드 부트캠프

목록 보기
8/41

배열

배열이란, 동일한 타입의 값들을 하나의 묶음으로 묶은 자료 구조를 의미한다.

1차원 배열

가장 일반적인 배열의 형태이다.

String [] food;
food = new String [10]; //10개의 String형 값을 저장할 수 있는 배열이 생성된다. 
-------------------------------------------------------------------------------
String [] food = new String [10]; //으로도 생성할 수 있다. 

이때 배열의 모근 요소는 선언한 타입으로 초기화되어있다. ex) int -> 0, double -> 0.0 등등...
대입 연산자(=)에 의해 생성된 배열 첫번째 요소의 주소값이 참조변수 food에 할당되어 참조 변수 food는 배열의 맨 첫번째 요소를 가리킨다.

자바에서 배열은 참조타입에 해당한다. 따라서 배열 선언 문법으로 선언한 food는 선언 이후에 생성될 배열의 주소값을 담은 참조 변수가 된다.

배열에 실제 값을 넣어서 초기화하려면

String [] food = new String [] {"마라탕", "떡볶이", "햄버거", "중국당면",...};

//선언과 초기화를 하나의 문장으로 할 때에 한하여 new String[] 을 생략할 수 있다. 
String [] food = {"마라탕", "떡볶이", "햄버거", "중국당면",...};

2차원 배열

배열의 각 요소가 또 다른 배열인 구조이다. (1차원 배열과 크게 다르지 않다.)

int[][] kcal;
kcal = new int[31][3];
----------------------------------------------------------------------
int[][] kcal = new int[31][3]; //으로도 생성할 수 있다. 

2차원 배열의 내부 배열은 0을 3개씩 저장하고, 외부 배열은 내부배열 {0,0,0}을 31개 저장하고있다.
내부 배열은 3개의 0을 요소로 가지지만, 외부 배열의 각 요소는 내부 배열의 주소값을 저장하고 있다.

값을 넣을 때는

int[][] kcal = new int[][] { 
	{ 1111, 1234, 2133 }, 
	{ 2234, 2661, 2438 }, 	
	...
};

// 선언과 초기화를 하나의 문장으로 할 때에 한해 new int[][]를 생략할 수 있다.
int[][] kcal = { 
	{ 1111, 1234, 2133 }, 
	{ 2234, 2661, 2438 }, 	
	...
};

가변 배열

배열이 2차원 이상일 때, 마지막 차수에 해당하는 배열의 길이를 고정하지 않아도 되며, 이런 배열을 가변배열이라고 한다.

int[][] num = new int[3][]; //외부 배열만 생성된 상태이다. 

----------------------------------------------------------------------
int[][] num = new int[3][];
System.out.println("Arrays.toString(num) = " + Arrays.toString(num));

// 결과
// Arrays.toString(num) = [null, null, null]

내부 배열을 생성하려면 new int[]를 사용해서 외부 배열의 각 요소에 할당해주면 된다.

int[][] num = new int[3][];

num[0] = new int[4];
num[1] = new int[5];
num[2] = new int[6];


System.out.println("Arrays.toString(num[0]) = " + Arrays.toString(num[0]));
System.out.println("Arrays.toString(num[1]) = " + Arrays.toString(num[1]));
System.out.println("Arrays.toString(num[2]) = " + Arrays.toString(num[2]));

// 결과
// Arrays.toString(num[0]) = [0, 0, 0, 0]
// Arrays.toString(num[1]) = [0, 0, 0, 0, 0]
// Arrays.toString(num[2]) = [0, 0, 0, 0, 0, 0]

가변 배열도 일반적인 배열처럼 생성과 동시에 초기화가 가능하다.

int[][] num = {
	{ 1, 2, 3, 4 },
	{ 11, 22, 33, 44, 55 },
	{ 111, 222, 333, 444, 555, 666},
	
};

System.out.println("Arrays.toString(num[0]) = " + Arrays.toString(num[0]));
System.out.println("Arrays.toString(num[1]) = " + Arrays.toString(num[1]));
System.out.println("Arrays.toString(num[2]) = " + Arrays.toString(num[2]));

// 결과
// Arrays.toString(num[0]) = [1, 2, 3, 4]
// Arrays.toString(num[1]) = [11, 22, 33, 44, 55]
// Arrays.toString(num[2]) = [111,222, 333, 444, 555, 666]
  • 향상된 for문을 통해 배열을 순회하는 것은 배열의 값을 읽어오는 것만 가능하고, 배열의 값을 수정할 수는 없다.
int[] scores = { 100, 90, 85, 95, 100 };

// 일반적인 for문 및 while문을 사용하면 배열 요소의 값을 바꿀 수 있습니다. 
for (int i = 0; i < scores.length; i++) {
	scores[i] = 0;
}
System.out.println("for문 사용      : " + Arrays.toString(scores));

int j = 0;
while (j < scores.length) {
	scores[j++] = 1;
}
System.out.println("while문 사용    : " + Arrays.toString(scores)); 

// 향상된 for문을 사용하면 배열 요소의 값을 바꿀 수 없습니다. 
for (int score: scores) {
	score = 2;
}
System.out.println("향상된 for문 사용 : " + Arrays.toString(scores));

/*
실행 결과

for문 사용      : [0, 0, 0, 0, 0]
while문 사용    : [1, 1, 1, 1, 1]
향상된 for문 사용 : [1, 1, 1, 1, 1]
*/

배열 관련 메서드

1) 배열의 길이를 얻고싶을 때

배열참조변수_이름.length

ex) System.out.println(food.length); // 10

2) 배열의 요소를 알고싶을 때

Arrays.toString()

ex) double[] value = {3.0, 1.3, 7.2};
System.out.println(value.toString()); // [D@46a49e6 같은 값이 나온다.
System.out.println(Arrays.toString(value)); // [3.0, 1.3, 7.2] 이 출력된다.

0개의 댓글