[Day 4 | Java] 참조 자료형 배열

y♡ding·2024년 10월 17일
0

데브코스 TIL

목록 보기
15/163

📌 참조 자료형 배열

참조 자료형 배열은 객체를 배열로 저장하는 방법으로, 배열의 각 요소가 객체를 참조한다. 기본 자료형 배열과 달리 참조 자료형 배열은 객체에 대한 참조를 저장하며, 배열을 통해 객체의 필드와 메서드에 접근할 수 있다.

즉, 배열이 가리키는 대상은 객체의 메모리 위치이고, 그 위치를 통해 객체의 필드나 메서드에 접근할 수 있다.


Book 클래스와 배열

class Book {
    String title;
    String author;
    String price;

    Book(String title, String author, String price) {
        this.title = title;
        this.author = author;
        this.price = price;
    }
}

✔️ 기본 자료형 배열

int[] intArray = new int[3];
intArray[0] = 10;
intArray[1] = 20;
intArray[2] = 30;

for (int data : intArray) {
    System.out.println(data);
}
  • 배열의 각 요소는 직접적으로 값을 저장한다.

✔️ 참조 자료형 배열

Book[] bookArray = new Book[3];
bookArray[0] = new Book("java", "홍길동", "1000");
bookArray[1] = new Book("JSP", "박문수", "2000");
bookArray[2] = new Book("spring", "이몽룡", "3000");
  • 배열의 각 요소는 Book 객체를 참조하며, 배열을 통해 각 객체의 필드(title, author, price)에 접근할 수 있다.

객체 필드 출력

for (Book book : bookArray) {
    System.out.println(book.title);
    System.out.println(book.author);
    System.out.println(book.price);
}

🥊 데이터 저장 방식 비교

1️⃣ 2차원 배열을 사용하는 방법

각 행(row)이 하나의 데이터를, 각 열(column)이 데이터의 속성을 나타낸다.

Object[][] peopleData = {
    {1001, "홍길동", 20, 180.5, 80.0},
    {1002, "박문수", 22, 170.0, 75.0},
    {1003, "임꺽정", 24, 175.0, 70.0}
};
  • 각 행은 한 사람의 정보를 나타내며, 열은 각각의 속성(번호, 이름, 나이, 키, 몸무게)을 나타낸다.
  • 배열을 통해 데이터를 쉽게 접근하고 반복문으로 출력할 수 있다.
// 2차원 배열 출력
for (int i = 0; i < peopleData.length; i++) {
    System.out.println("번호: " + peopleData[i][0]);
    System.out.println("이름: " + peopleData[i][1]);
    System.out.println("나이: " + peopleData[i][2]);
    System.out.println("키: " + peopleData[i][3]);
    System.out.println("몸무게: " + peopleData[i][4]);
}

✔️ 장단점

  • 👍🏻 : 코드가 간단하고, 속성 수가 적을 경우 쉽게 관리할 수 있다.
  • 👎🏻 : 데이터 타입이 일관성이 부족할 수 있다. 즉, 배열은 한 데이터 타입에만 최적화되어 있으므로, 다양한 타입의 데이터를 담기 위해서는 Object 배열을 사용해야 하고, 타입 캐스팅 문제가 발생할 수 있다.

2️⃣ 클래스를 이용한 1차원 배열 방식

데이터를 더 구조화하고, 각 데이터의 의미를 명확히 하기 위해 클래스를 이용할 수 있다. 이 방법에서는 클래스가 각 데이터 항목을 정의하며, 그 클래스의 객체들을 배열로 관리한다.

class Person {
    int id;
    String name;
    int age;
    double height;
    double weight;

    Person(int id, String name, int age, double height, double weight) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.height = height;
        this.weight = weight;
    }
}

public class Main {
    public static void main(String[] args) {
        Person[] peopleArray = new Person[3];
        peopleArray[0] = new Person(1001, "홍길동", 20, 180.5, 80.0);
        peopleArray[1] = new Person(1002, "박문수", 22, 170.0, 75.0);
        peopleArray[2] = new Person(1003, "임꺽정", 24, 175.0, 70.0);

        // 데이터 출력
        for (Person person : peopleArray) {
            System.out.println("번호: " + person.id);
            System.out.println("이름: " + person.name);
            System.out.println("나이: " + person.age);
            System.out.println("키: " + person.height);
            System.out.println("몸무게: " + person.weight);
        }
    }
}

✔️ 장단점

  • 👍🏻:
    • 데이터 구조를 명확하게 정의할 수 있으며, 각 데이터 항목에 의미 있는 이름을 부여할 수 있다.
    • 데이터 타입에 대한 안전성(타입 안정성)을 보장한다. 각 필드가 명확한 데이터 타입을 가지므로, 잘못된 타입의 데이터를 실수로 저장할 가능성이 적다.
    • 유지보수가 쉬워지며, 객체 지향적인 설계에 맞게 코드의 재사용성이 높아진다.
  • 👎🏻:
    • 2차원 배열에 비해 코드가 복잡해질 수 있다.
    • 초기화 시 클래스 정의가 필요하여, 간단한 작업에는 다소 무거울 수 있다.

  • 2차원 배열은 간단하게 다차원 데이터를 저장하고 관리할 수 있지만, 타입 안정성이 떨어지고 구조가 직관적이지 않을 수 있다.
  • 클래스를 활용한 배열은 데이터 구조를 명확하게 정의하고, 타입 안정성을 보장하며 유지보수가 용이하지만, 약간의 복잡성이 추가된다.

0개의 댓글

관련 채용 정보