Java_11_배열

지원·2024년 3월 23일
0

Java

목록 보기
12/13
post-thumbnail

배열 생성

(1) 선언과 동시에 빈 배열 생성

int[] intArray = new int[5]; // 크기 5의 빈 배열

(2) 선언 후, 배열 생성

int[] intArray;
intArray = new int[5]; // 크기 5의 빈 배열

(3) 리터럴로 생성

int[] intArray = {1, 2, 3, 4, 5};

이렇게 하면 5개의 원소가 있으니까 intArray는 자동으로 크기 5의 배열

그런데 이 방식은 변수를 정의할 때만 할 수 있다.
밑에 코드처럼 두 줄에 나누어서 하면 오류

int[] intArray;
intArray = {1, 2, 3, 4, 5}; // 오류

배열 사용

값을 대입하는 방법

intArray[0] = 1;
intArray[1] = 2;
intArray[2] = 3;
intArray[3] = 4;
intArray[4] = 5;

이렇게 하면 0번 인덱스에는 정수 1을 넣어주고,
1번 인덱스에는 정수 2를 넣어주고. 이런식으로 intArray 배열을 채우게 된다.

여기서 중요한 점: 인덱스는 0부터 시작!
5칸 짜리 배열이라면 인덱스가 0부터 4까지

intArray[5] = 6;

런타임에 이런 에러가 나온다:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5

런타임?

런타임이란, 코드 작성 시점이 아니라 실제 실행될 때를 뜻

intArray[5] = 6;을 적었을 때는 오류가 없다.
문법적으로 오류가 없기 때문.
그런데 실제 실행을 해서 접근하려고 하면 문제가 생기는 것이다.

변수명 뒤에 인덱스가 들어간다는 것 말고는 일반적인 변수와 사용법이 같다.

intArray[0] = 1;
intArray[1] = 2;

값을 읽을 때

System.out.println(intArray[0] + intArray[1]); // 1 + 2
3

앨리어싱 (Aliasing)

배열을 통째로 넘길 수도 있다.

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = arr1;
arr1[0] = 100;
System.out.println(arr2[0]);
100

arr1을 arr2에 지정해줬을 때,
두 변수는 같은 주소를 가리키게 된다.

사실 arr1과 arr2는 아예 똑같은 값이다.
arr2를 arr1의 'Alias(가명)'이라고 할 수 있다.

만약 arr1을 arr2에 새롭게 복사하고 싶으면 어떻게 해야할까?

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = arr1.clone();

arr1[0] = 100;
System.out.println(arr1[0]);
System.out.println(arr2[0]);
100
1

clone라는 메소드를 사용하면된다.

이렇게 하면 배열이 복사가 된 것이라, arr1과 arr2는 서로 다른 배열
그래서 arr1[0]을 수정해도 arr2[0]에는 영향을 미치지 않고,
1이 출력된다.

예제 1

100개 짜리 배열을 만들고
첫 번째 칸은 1, 두 번째 칸은 2, ..., 마지막 칸은 100으로 채워보면

int[] intArray = new int[100];
for (int i = 0; i < 100; i++) {
    intArray[i] = i + 1;
}

여기서 코드를 더 직관적으로 바꾸려면 100 대신 intArray.length를 쓰면 된다.

int[] intArray = new int[100];
for (int i = 0; i < intArray.length; i++) {
    intArray[i] = i + 1;
}

for-each

for (int i : intArray) {
    System.out.println(i);
}

이렇게 쓰면, 처음에 수행 부분으로 들어갈 때
i는 intArray의 0번 인덱스의 값(원소)을 갖게 되고,
그 다음 들어갈 때는 1번 인덱스의 값(원소)을 갖게 되고...
이런 식으로 배열의 마지막 값(원소)까지 갖게 된다.

for (double i : intArray) {
    System.out.println(i);
}

double에 int값을 넣으면 자동으로 형 변환이 되기 때문에
위의 식처럼 써도 문제 없다.

예제 2

문자열을 담는 fruitsArray을 만든 후,
원소를 저장하고, for - each문을 활용하여 원소들을 출력

String[] fruitsArray = new String[5];

fruitsArray[0] = "딸기";
fruitsArray[1] = "당근";
fruitsArray[2] = "수박";
fruitsArray[3] = "참외";
fruitsArray[4] = "메론";

for (String fruit : fruitsArray) {
    System.out.println(fruit);
}
딸기
당근
수박
참외
메론

0개의 댓글

관련 채용 정보