Developer/JAVA

JAVA, 배열

단님 2024. 8. 1. 00:00
728x90
배열의 정의

 

여러개의 데이터를 한번에 담아놓고 꺼내기 편리하게 사용하기 위한공간

타입이 같은 변수들을 연속된 메모리 공간에 담아 놓고 사용.

중요한 부분은 타입이 같아야 한다는 점이 있음.

공간이 필요하다는 것은 공간의 크기가 있어야 한다.

→ 타입을 선언하는 즉시 공간을 할당 받는 다는 것을 의미.

→배열도 마찬가지로 같은 타입을 담아 둔다면 거기에 맞는 공간을 할당 받을 수 있음.

→배열의 크기도 명시 해야 할당 받을 수 있음

 

배열의 장점과 , 특징
  • 배열의 장점

일괄 처리가 가능하다. (= 반복문 처리가 가능하다)

  • 배열의 특징

동일한 타입의 , 모든 자료형에 적용이 가능하다. (기본자료형 또는 참조자료형)

 

배열의 필요성

예를 들어 학생들의 성적을 처리하자.

학생들의 수가 방대하다면 , 처리를 어떻게 해야할까 ? 처리에 대한 불편함을 느낄 수 있다.

즉 배열의 필요성을 느낄 수 있다.

배열로 동일한 특성을 가진 자료들을 하나의 묶음으로 처리를 할 수 있다.

 

배열의 선언방법

 

  • 명시적인 선언 (new 연산자를 사용)

- 크기를 반드시 지정해야한다.

- [] 의 위치는 변수의 뒤에도 사용 가능하다.

- 배열의 크기를 변수의 값을 참조하여도 사용 가능하다.

int[] score1 = new int[5];
int score2[] = new int[5];

int score[] ; //변수명만 먼저 정의.
int len = 5;
//배열을 사용전에 크기를 명시.
score = new int [len];// 크기 정의.

score[0]=11; // 사용
//score[0]="11"; 타입이 맞지 않은 컴파일 오류
//score[5]=55; 
// 컴파일 오류(문법상의 오류)는 아니지만 런타임 오류가 발생.
//(Index 5 out of bounds for length 5)

 

  • 묵시적 선언 (new 연산자를 사용하지 않음)

선언과 동시에 초기화한다.

char[] grade = {'A' , 'B', 'C' , 'D' , 'E'};

배열을 표기하는것은 [] 이지만 , 데이터를 표현하기위해서는 {}를 사용한다.

자바스크립트나 리액트에서는 데이터를 [] 로 표기하였지만 자바에서는 {} 를 사용함에 헷갈릴 수 있다.(내가 그랬다..)

 

배열의 사용
int score[] ; //변수명만 먼저 정의.
score = new int [5];
score[0]=11;
score[1]=14;
score[2]=21;
score[3]=41;
score[4]=54;

sum=0;
for (int i = 0; i < score.length; i++) {
	sum += score[i];
}
System.out.println("score 는  "+score+", score의 길이는 "+score.length);
System.out.println("score 배열의 합계는 "+sum);
System.out.println("Arrays 의 래퍼클래스 활용 :  "+Arrays.toString(score));

 

배열은 참조자료형에 해당한다

score라는 변수는 주소를 가지고 있게 됨으로

score를 출력하게되면 주소값이 나오게 된다.

즉, 주소값을 참조하여 각 index 값을 가져온다.

score 에 출력하기 위헤서 Arrays 의 wrapperClass의 메서드를 통해 출력이 가능하다.

또는 반복문을 사용하여 각 인덱스 값에 접근하여 하나씩 꺼낼 수 있다.

 

 

배열의 순회 forEach

 

  • 사용 방법
for (int s : score) {
	System.out.println(s);
}
for (변수타입 변수명 : 배열이름 ) { 실행부 }

배열의 요소의 갯수(배열의 크기) 만큼 반복 하며

배열 score 가 가지고 있는 값을 순차적으로 변수(s) 에 전달

변수(s)와 배열(score)의 타입은 같아야 한다.

for (int s : score) {
	System.out.println(s);
	sum+=s;
	System.out.println("순차합계"+sum);
}

 

  • forEach의 주의사항

배열의 값만 순차적으로 사용가능하며 read만 가능. write 불가능(순차처리, readOnly)


다차원 배열

 

  • 다차원 배열의 정의

1차원이 2개 모이면 2차원 배열이라 하고,

1차원이 3개 모이면 3차원 배열이라고 함. 2차원 이상은 쓰는 경우가 드물다.

 

  • 선언 방법
  • 명시적 정의(new 연산자의 사용)
//1) 명시적 정의
int [][] mul = new int[2][3];
// mul = { {10, 20, 30} , { 11 , 22 , 33} } 
//1차원 배열(길이가 3인 배열)이 2개 있다.
mul[0][0] = 10;
mul[0][1] = 20;
mul[0][2] = 30;
		
mul[1][0] = 11;
mul[1][1] = 22;
mul[1][2] = 33;
  • 묵시적 정의 (new 연산자 사용 안함)
int [][]mul2 = {{100, 200, 300}, {111, 222} , {777}};

명시적으로 배열의 크기를 정하지 않았기 때문에 , 각각의 크기를 가질 수 있음.

(크기 지정과 동시에 값 지정.)

 

 

  • 다차원 배열의 출력 (for 문을 이용)
for (int i = 0; i < mul.length; i++) {
	for (int j = 0; j < mul[i].length; j++) {
		System.out.printf("mul [%d , %d] = %d %n" , i , j , mul[i][j] );
	}
}

int [][]mul2 = {{100, 200, 300}, {111, 222} , {777}};
		
for (int i = 0; i < mul2.length; i++) {
	for (int j = 0; j < mul2[i].length; j++) {
		System.out.printf("mul2 [%d , %d] = %d %n" , i , j , mul2[i][j] );
	}
}

  • 다차원 배열의 출력 (forEach 문을 이용)
for(int[] i: mul2) {
            for(int j:i) {
                System.out.println(j);
            }
        }
  • 다차원 배열의 출력 (Arrays 래퍼 클래스를 이용)
System.out.println(Arrays.deepToString(mul2));  
//결과 : [[100, 200, 300], [111, 222], [777]]