Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 객체 배열 생성 방법과 주의해야 할 단점 완벽 정리

배열(Array)은 고정된 개수의 항목을 저장할 수 있는 컨테이너이며, 배열에 담기는 모든 항목은 반드시 동일한 타입이어야 합니다. 대부분의 자료구조는 알고리즘을 구현할 때 배열을 활용합니다. 배열의 개념을 이해하려면 다음 두 가지 핵심 용어를 알아두는 것이 좋습니다.

  • 요소(Element): 배열에 저장되는 각각의 항목을 의미합니다.
  • 인덱스(Index): 배열 내 각 요소의 위치를 나타내는 숫자 값으로, 특정 요소를 식별하는 데 사용됩니다.

객체 배열 생성하기

Java에서 클래스 역시 하나의 데이터 타입(참조 타입)으로 취급되기 때문에, 특정 클래스 타입의 배열을 선언하고 그 안에 해당 클래스의 인스턴스들을 저장할 수 있습니다. 즉, 객체 배열(Object Array)을 만드는 것이 가능합니다.

예제 코드

다음 Java 예제에서는 Std라는 이름의 클래스를 정의한 뒤, Std 타입의 배열을 생성하고 객체들로 채운 후, 배열의 모든 요소에 대해 메서드를 호출하는 과정을 보여줍니다.

class Std {
    private static int year = 2018;
    private String name;
    private int age;
    public Std(String name, int age){
        this.name = name;
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void display(){
        System.out.println("Name: "+this.name);
        System.out.println("Age: "+this.age);
        System.out.println("Year: "+Std.year);
    }
}
public class Sample {
    public static void main(String args[]) throws Exception {
        // Std 타입 객체를 저장할 배열 생성
        Std st[] = new Std[4];
        // 배열 초기화 (객체로 채우기)
        st[0] = new Std("Bala", 18);
        st[1] = new Std("Rama", 17);
        st[2] = new Std("Raju", 15);
        st[3] = new Std("Raghav", 20);
        // 배열의 각 객체에 display 메서드 호출
        for(int i = 0; i<st.length; i++) {
            st[i].display();
            System.out.println(" ");
        }
    }
}

실행 결과

Name: Bala
Age: 18
Year: 2018

Name: Rama
Age: 17
Year: 2018

Name: Raju
Age: 15
Year: 2018

Name: Raghav
Age: 20
Year: 2018

위 예제에서 볼 수 있듯이 new Std[4]로 배열을 먼저 선언한 후, 각 인덱스에 new Std(...)를 통해 생성한 객체를 할당하는 방식으로 객체 배열을 구성합니다. 배열이 완성되면 반복문을 통해 각 요소의 메서드를 손쉽게 호출할 수 있습니다.

객체 배열의 단점

객체 배열은 유용하지만, 실무에서 사용할 때는 다음과 같은 한계점을 반드시 고려해야 합니다.

  • 크기 사전 파악 필요: 배열에 객체를 저장하려면 대체로 배열의 길이를 미리 알아야 하는데, 상황에 따라 데이터의 개수를 미리 예측하기 어려운 경우가 많습니다.
  • 크기 변경 불가: 객체 배열을 한 번 생성하면 내부 구조나 크기를 수정할 수 있는 메서드가 제공되지 않습니다. 컬렉션(Collection) 프레임워크와 달리 유연성이 떨어집니다.
  • 메모리 비효율: 메모리 사용 측면을 고려하면 객체 배열의 사용은 권장되지 않습니다. 고정 크기만큼 메모리가 미리 할당되므로 낭비가 발생할 수 있습니다.

따라서 크기가 가변적이거나 데이터 추가·삭제가 잦은 경우에는 배열보다 ArrayList, LinkedList 같은 컬렉션 클래스를 사용하는 것이 더 효율적인 선택입니다.