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}
};