새소식

반응형
Programming Language/Java

[Java] 자바 배열(Array)

  • -
반응형

 

자바 배열(Array)


 

만약 우리가 동일한 유형의 데이터를 여러 개를 만들어야 한다면 어떻게 해야 할까? 만약 배열을 아직 배우지 않았더라면 우리는 다음과 같이 코드를 작성할 것이다.

int a = 1;
int b = 2;
int c = 3;
...
int z = 26;

1~2개라면 각각 변수를 만들어 위와 같이 선언할 수 있겠지만 만약 생성해야 하는 데이터가 100개, 1,000개, 10,000개가 된다면 어떨까? 이는 정말 비효율적일 것이다. 그래서 필요한 게 오늘 우리가 학습할 배열이다.

 

자바에서 배열(Array)은 동일한 데이터 유형의 여러 값을 저장할 수 있는 데이터 구조이다. 배열은 메모리 내에서 연속된 위치에 할당되며, 각 요소는 인덱스를 사용하여 접근한다. 배열은 고정된 크기를 가지며, 한 번 생성되면 크기를 변경할 수 없다. 자바 배열의 특징은 다음과 같다.

 

  1. 고정된 크기 - 배열의 크기는 생성될 때 지정되며, 이 크기는 변경할 수 없다. 따라서 배열의 크기를 동적으로 조정할 수 없다. 
  2. 동일한 데이터 유형 - 배열은 하나의 데이터 유형만을 저장할 수 있다. 예를 들어, 정수 배열은 정수 값만을 저장할 수 있다. 
  3. 인덱스 - 배열의 각 요소는 0부터 시작하는 정수 인덱스를 가진다. 이를 통해 배열 요소에 접근할 수 있다.
  4. 연속적인 메모리 할당 - 배열의 요소는 연속된 메모리 위치에 저장된다. 이로 인해 배열 요소에 빠르게 접근할 수 있다.

 

배열 선언과 초기화

자바에서 배열을 선언하는 기본 문법은 아래와 같다.

데이터_유형[] 변수이름;

위의 문법은 데이터_유형으로 배열을 선언하는 문법이다. 선언만 되었을 뿐이지 아직 초기화는 되지 않은 상태이다.

 

변수이름 = 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

실행 결과

 

 

 

읽어주셔서 감사합니다.

 

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.