Java

chapter 13 배열(Array)

보리콩 2022. 1. 28. 18:31

배열은 '자료형이 같은 둘 이상의 값'을 저장할 수 있는 메모리 공간을 의미한다.

 

1차원 배열

"타입이 같은 둘 이상의 데이터를 저장할 수 있는 1차원 구조의 메모리 공간"

 

자바에서는 배열도 인스턴스이다.

int[] ref;			// 참조변수의 선언
ref = new int[5];		// 배열 인스턴스의 생성

int[] ref = new int[5];		// 한 줄로도 가능

// 배열의 인스턴스 변수 접근
System.out.println(ref.length);	// 5 (배열의 길이)

 

- int[]에서 int는 배열의 자료형을 나타낸다.

- int형 외에도 다양한 자료형의 배열을 생성할 수 있다.

- 인스턴스를 저장할 수 있는 배열의 생성도 가능하다.

Box[] ar = new Box[5];

 

배열은 인덱스를 통해 값을 저장하고 참조할 수 있다.

String[] sr = new String[7];
sr[0] = new String("Java");
sr[1] = "System";
...

for(int i = 0; i < sr.length; i++)		// 반복문을 통한 접근도 가능
	System.out.println(sr[i]);

 

배열을 생성과 동시에 초기화하기

int[] arr = new int[]{1, 2, 3};		// 초기화할 값들의 수로 배열 길이 정보 계산 가능(길이 입력하면 컴파일 오류)
intp[ arr = {1, 2, 3};

 

참조변수 선언의 두 가지 방법

int[] ar = new int[3];;		// 조금 더 선호
int ar[] = new int[3];

 

배열의 초기화

배열이 생성되면 모든 요소는 0 또는 null로 초기화된다. 그러나 0 이나 null 이외의 값으로 배열을 초기화 해야하는 경우 반복문을 이용해서 원하는 값을 배열에 저장할 수도 있지만 fill 메소드를 호출해 원하는 값을 배열에 저장할 수도 있다.

public static void fill(int[] a, int val)	// val 값으로 a배열 초기화
public static void fill(int[] a, int fromIndex, int toIndex, int val)	// from이상 to미만의 범위를 val 값으로 a배열 초기화

 

배열의 복사

배열의 복사도 반복문을 구성해 복사를 진행할 수 있지만 arraycopy 메소드를 통해서 복사를 할 수도 있다.

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)	
// 배열 src의 인덱스 srcPos부터의 값을 배열 dest의 인덱스 destPos에 length만큼 복사

 

enhanced for문

- 코드의 양이 절대적으로 줄어든다.

- 반복문 구성 과정에서 배열의 길이 정보를 직접 확인하고 입력할 필요가 없다.

int[] ar = {1, 2, 3, 4, 5};
for(int e : ar) {
	System.out.println(e);
}

 

 

다차원 배열

배열의 논리적 메모리 구조가 2차원 이상의 형태를 보이는 배열을 가리켜 '다차원 배열'이라 한다.

 

2차원 배열의 생성과 접근

int[][] arr = new int[3][4];	// 세로 길이가 3, 가로 길이가 4인 int형 2차원 배열
ㅁㄱㄱ[1][0] = 5;	// 세로, 가로의 인덱스가 1, 0인 요소에 5저장

 

2차원 배열의 구조

2차원 배열의 각 원소는 1차원 배열을 참조하는 참조변수이다. 각 배열의 길이는 다를 수 있다.(권장하지는 않음)

 

2차원 배열의 초기화

int[][] arr = new int[][]{
	{11, 22, 33},
    	{44, 55, 66},
    	{77, 88, 99}
};