배열
배열이란?
배열(array)은 인덱스(index)와 인덱스에 대응하는 데이터들로 이루어진 연속적인 자료 구조로서, 같은 종류의 데이터들이 순차적으로 저장합니다.

int i = new int[10]; // 10개의 정수 공간 배열 생성. 배열의 이름은 i
배열을 사용하는 큰 이유 중 하나는 반복문의 활용에 있습니다.
for (sum = 0, n = 0; n < 10; n++)
sum += i[n];
배열의 선언 및 생성
배열의 생성은 다음 두 단계로 이루어집니다.
- 배열에 대한 레퍼런스 변수 선언
- 배열 생성 - 배열의 저장 공간 할당

배열에 대한 레퍼런스 변수 선언
다음은 배열 선언문으로 레퍼런스 변수 intArray를 선언합니다.
int intArray[];
이 선언만으로 배열 공간이 할당되지 않습니다. intArray는 배열 공간에 대한 주소 값(레퍼런스 값)을 가지며 그 자체가 배열은 아닙니다.
아직 정수를 저장할 배열 공간이 생성되지 않았으므로 intArray 값은 null입니다.
배열의 주소를 레퍼런스라고 부르며, 배열에 대한 주소 값을 가지는 변수를 레퍼런스 변수라고 부릅니다.
배열의 타입은 배열을 구성하는 원소의 타입이며, 배열의 레퍼런스 변수는 두가지 방법으로 선언할 수 있습니다.
int inrArray[];
int [] intArray;
배열 선언 시 []에 크기를 지정하면 안 됨
배열 선언 시 [] 안에 배열의 크기를 지정해서는 안됩니다.
int intArray[10]; // 컴파일 오류. 배열의 크기를 지정할 수 없음
배열 생성
데이터를 저장할 배열 공간을 할당받는 과정입니다. 반드시 new 연산자를 이용하여 배열을 생성하며 [] 안에 생성할 원소 개수를 지정합니다.
intArray = new int[5];
배열의 선언과 동시에 생성
배열의 선언과 생성을 동시에 할 수 있습니다.
int intArray[] = new int[5];
배열의 초기화
배열 선언문에서 { } 원소를 나열하면 초기화된 배열을 만들 수 있습니다.
int intArray[] = {4, 3, 2, 1, 0};
double doubleArray[] = {0.01, 0.02, 0.03, 0.04};
생성되는 원소 개수는 { }에 나열된 값의 개수로 정해지므로 [ ]에 크기를 주어서는 안됩니다.

배열 인덱스와 배열 원소 접근
배열의 인덱스는 정수만 가능합니다. 인덱스는 0부터 시작하여 마지막 원소의 인덱스는 (배열 크기 -1)입니다. 배열의 원소는 인덱스를 이용하여 접근합니다.
int intArray[] = new int[5]; // 원소가 5개인 배열 생성. 인덱스는 0 ~ 4까지 가능
intArray[0] = 5; // 원소 0에 5 저장
intArray[3] = 6; // 원소 3에 6 저장
int n = intArray[3]; // 원소 3의 값을 읽어 n에 저장. n이 6이 됨
n = intArray[-2]; // 실행 오류. 인덱스로 음수 사용 불가.
n = intArrray[5]; // 실행 오류. 5는 인덱스의 범위(0~4)를 선언함.
배열의 원소를 접근하려면 반드시 배열이 생성(공간 할당)되어 있어야 합니다. 배열이 생성되지 있는 않는 상태에서 배열을 사용하면 배열이 초기화가 되지 않았다는 파일 오류가 발생하거나, 실행시간 오류가 발생합니다.
int intArray[]; // 배열에 대한 레퍼런스만 선언
intArray[1] = 0; // 오류. 생성되지 않은 배열 사용
레퍼런스 치환과 배열 공유
레퍼런스 변수와 배열 공간이 분리되어 있기 떄문에 다수의 레퍼런스가 하나의 배열 공간을 가리키는 배열 공유가 쉽게 이루어집니다.
int intArray[] = new int[5];
int myArray[] = intArray; // 레퍼런스 치환. myArray는 intArray와 동일한 배열 첨조
앞의 코드에서 두 번쨰 라인은 레퍼런스 변수를 myArray를 생성하고 intArray 변수 값을 myArray에 치환하는 코드입니다.
이 치환으로 intArray 배열이 복사되는 것이 아니라, 레퍼런스 즉 배열에 대한 주소만 복사합니다.
그 결과 myArray는 intArray와 동일한 레퍼런스 값을 가지게 되어 myArray는 intArray의 배열을 공우하게 되고, myArray로 intArray의 배열 원소를 마음대로 접근할 수 있습니다.
int intArray[] = new int[5];
int myArray[] = intArray;

배열에 입력받은 수 중 제일 큰 수 찾기
import java.util.Scanner;
public class ArrayAccess {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int intArray[] = new int[5]; // 배열 생성
int max = 0; // 현재 가장 큰 수
System.out.println("양수 5개를 입력하세요.");
for (int i = 0; i < 5; i++) {
intArray[i] = scanner.nextInt(); // 입력받은 정수를 배열에 저장
if (intArray[i] > max) { // intArray[i]가 현재 가장 큰 수보다 크면
max = intArray[i]; // intArray[i]를 max로 변경
}
}
System.out.print("가장 큰 수는 " + max + "입니다.");
scanner.close();
}
}
실행 결과
양수 5개를 입력하세요.
1
30
78
100
99
가장 큰 수는 100입니다.
배열의 크기, length 필드
배열을 객체로 다룹니다. 이 객체에는 배열의 저장 공간과 함께 배열의 크기 값을 가진 length 필드가 존재합니다.

length 필드를 이용하면 배열의 크기를 다음과 같이 간단히 알아낼 수 있습니다.
int intArray [] = new int[5];
int size = intArray.length; // size는 5
for (int i = 0; i < intArray.length; i++) // intArray 배열 크기(5)만큼 반복합니다.
System.out.println(intArray[i]);
배열 원소의 평균 구하기
import java.util.Scanner;
public class ArrayLength {
public static void main(String[] args) {
int intArray[] = new int[5]; // 배열의 선언과 생성
int sum = 0;
Scanner scanner = new Scanner(System.in);
System.out.print(intArray.length + "개의 정수를 입력하세요>> ");
for (int i = 0; i < intArray.length; i++) {
intArray[i] = scanner.nextInt(); // 키보드에서 입력받은 장수 저장
}
for (int i = 0; i < intArray.length; i++)
sum += intArray[i]; // 배열에 저장된 정수 값 더하기
System.out.print("평균은 " + (double) sum / intArray.length);
scanner.close();
}
}
실행 결과
5개의 정수를 입력하세요>> 2 3 4 5 9
평균은 4.6
배열과 for-each 문
기존의 for 문을 변형하여, 배열이나 나열(enumeration)의 크기만큼 루프를 돌면서 각 원소를 순차적으로 접근하는데 유용하게 만든 for 문을 for-each문이라고 부릅니다.

public class foreachEx {
enum Week {월, 화, 수, 목, 금, 토, 일}
public static void main(String[] args) {
int [] n = {1, 2, 3, 4, 5};
String names[] = {"사과", "배", "바나나", "체리", "딸기", "포도"};
int sum = 0;
// 아래의 for-each에서 k는 n[0], n[1], ..., n[4]로 반복
for (int k : n) {
System.out.print(k + " "); // 반복되는 k 값 출력
sum += k;
}
System.out.println("합은 " + sum);
// 아래의 for-each에서 s는 names[0], names[1], ..., names[5]로 반복
for (String s : names) {
System.out.print(s + " ");
}
System.out.println();
// 아래의 for-each에서 day는 월, 화, 수, 목, 금, 토, 일 값으로 반복
for (Week day : Week.values())
System.out.print(day + "요일 ");
System.out.println();
}
}
실행 결과
1 2 3 4 5 합은 15
사과 배 바나나 체리 딸기 포도
월요일 화요일 수요일 목요일 금요일 토요일 일요일
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| 메소드에서 배열 리턴 (0) | 2025.01.26 |
|---|---|
| 다차원 배열 (0) | 2025.01.26 |
| continue문과 break 문 (1) | 2025.01.25 |
| 반복문 (0) | 2025.01.24 |
| 조건문 (0) | 2025.01.23 |