자바 배열(Array)
만약 우리가 동일한 유형의 데이터를 여러 개를 만들어야 한다면 어떻게 해야 할까? 만약 배열을 아직 배우지 않았더라면 우리는 다음과 같이 코드를 작성할 것이다.
int a = 1;
int b = 2;
int c = 3;
...
int z = 26;
1~2개라면 각각 변수를 만들어 위와 같이 선언할 수 있겠지만 만약 생성해야 하는 데이터가 100개, 1,000개, 10,000개가 된다면 어떨까? 이는 정말 비효율적일 것이다. 그래서 필요한 게 오늘 우리가 학습할 배열이다.
자바에서 배열(Array)은 동일한 데이터 유형의 여러 값을 저장할 수 있는 데이터 구조이다. 배열은 메모리 내에서 연속된 위치에 할당되며, 각 요소는 인덱스를 사용하여 접근한다. 배열은 고정된 크기를 가지며, 한 번 생성되면 크기를 변경할 수 없다. 자바 배열의 특징은 다음과 같다.
- 고정된 크기 - 배열의 크기는 생성될 때 지정되며, 이 크기는 변경할 수 없다. 따라서 배열의 크기를 동적으로 조정할 수 없다.
- 동일한 데이터 유형 - 배열은 하나의 데이터 유형만을 저장할 수 있다. 예를 들어, 정수 배열은 정수 값만을 저장할 수 있다.
- 인덱스 - 배열의 각 요소는 0부터 시작하는 정수 인덱스를 가진다. 이를 통해 배열 요소에 접근할 수 있다.
- 연속적인 메모리 할당 - 배열의 요소는 연속된 메모리 위치에 저장된다. 이로 인해 배열 요소에 빠르게 접근할 수 있다.
배열 선언과 초기화
자바에서 배열을 선언하는 기본 문법은 아래와 같다.
데이터_유형[] 변수이름;
위의 문법은 데이터_유형으로 배열을 선언하는 문법이다. 선언만 되었을 뿐이지 아직 초기화는 되지 않은 상태이다.
변수이름 = new 데이터_유형[배열의 길이];
배열의 초기화는 위와 같이 new 연산자로 하며 위에서 [] 안에는 배열의 길이를 설정해 준다. 이때 설정했던 배열의 길이는 변경할 수 없다.
혹은 아래와 같이 선언과 동시에 배열을 초기화시킬 수 있다.
데이터_유형[] 변수이름 = new 데이터_유형[배열의 길이];
이제 배열을 선언하고 초기화하는 방법을 알아보았으니 예제를 살펴보며 배열을 어떻게 사용하는지 살펴보자.
int[] numbers = new int[5];
numbers 배열은 5개의 정수를 저장할 수 있는 공간을 확보한다. 배열은 0부터 시작하는 인덱스를 사용하며 각 요소에 접근할 수 도 있다. 예를 들어, 첫 번째 요소에 접근하려면 numbers[0]을 사용한다.
위의 예제처럼 5개의 정수를 저장할 수 있는 배열을 만들었지만 각 공간의 데이터는 전부 0으로 되어있다. 방금 각 요소에 접근하는 방법을 배웠으니 for 루프를 통해 배열에 데이터를 담아보자.
for (int i = 0; i < numbers.length; i++) {
numbers[i] = i; // 각 요소에 데이터 할당
}
코드를 실행하면 i는 0부터 배열의 길이보다 작을 때까지(위의 예제의 경우 4) 반복문이 실행된다. 그래서 numbers[i]를 통해 각 요소에 접근하고 그 공간을 i로 초기화하게 된다.
사용자 정의 클래스 배열
배열은 원시 데이터 유형뿐만 아니라 사용자가 작성한 클래스에 대해서도 배열을 사용할 수 있다.
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
먼저 간단하게 Person이라는 클래스를 작성하였다. Person 클래스는 기본적으로 name과 age 필드를 가지고 있으며 생성자를 통해 필드를 초기화한다. getName()과 getAge() 메서드는 name과 age 필드를 반환하는 메서드이다. 외부에서 객체를 만들고 그 객체의 필드에 접근할 때 쓰이는 메서드들이다.
Person[] people = new Person[3];
// 배열의 각 요소에 데이터 할당
people[0] = new Person("Alpah", 25);
people[1] = new Person("Bravo", 30);
people[2] = new Person("Charlie", 22);
// 배열 요소에 접근하여 데이터 출력
for (Person person : people) {
System.out.println("Name : " + person.getName() + ", Age : " + person.getAge());
}
처음 배열의 선언과 초기화를 배웠을 때 가장 앞에 데이터 유형을 작성하면 된다고 했다. 사용자 정의 클래스 배열도 마찬가지로 클래스명을 데이터 유형 부분에 작성해서 선언과 초기화를 해주면 된다.
Name : Alpah, Age : 25
Name : Bravo, Age : 30
Name : Charlie, Age : 22
실행 결과
읽어주셔서 감사합니다.