JAVA API

Boaz Kang·2024년 5월 1일

Object[]

Object 클래스를 사용화면 확장성이 좋아진다.

배열 처럼 동작하는 클래스
1. 생성 동작(array)
2. 저장 동작(add)
3. 가져오는 동작(get)
4. 크기를 구하는 동작(size)

import java.util.Arrays;

public class ObjectArray {

    private static final int DEFAULT_CAPACITY = 5; // 수정불가(final) = 상수

    private Object[] elements; // 핵싱 -> [Object 배열]을 가지고 있기 때문에, [Object 객체]를 저장 할 수 있다. 즉, 다형성 배열
    private int size = 0;

    // 생성 동작
    public ObjectArray() {
        elements = new Object[DEFAULT_CAPACITY]; // 5개 크기 배열
    }

    // 
    public int size() {
        return size;
    }
    
    // 저장 동작
    public Object get(int index) {
        if(index<0 || index >= size) {
            throw new IndexOutOfBoundsException("범위 초과");
        }
        return elements[index];
    }

    public void add(Object element) {
        if(size==elements.length) {
            ensureCapacity();
        }
        elements[size++] = element;
    }
    
    public void ensureCapacity() {
        int newCapacity = elements.length*2;
        elements = Arrays.copyOf(elements, newCapacity);
    }
}
import java.util.List;

public class MyObjectArrayTest {
    public static void main(String[] args) {

        // A, B, C객체를 배열(Object[])에 저장하고 출력.
        ObjectArray list = new ObjectArray();
        list.add(new A()); // Upcasting Obejct element = new A();
        list.add(new B()); // Upcasting Obejct element = new B();
        list.add(new C()); // Upcasting Obejct element = new C();

        A a = (A) list.get(0); // DownCasting A <= Object
        a.display();

        B b = (B) list.get(1); // DownCasting B <= Object
        b.display();

        C c = (C) list.get(2); // DownCasting C <= Object
        c.display();

        for (int i=0; i<list.size(); i++) {
            if(list.get(i) instanceof A) {
                ((A)list.get(i)).display();
            } else if(list.get(i) instanceof B) {
                ((B)list.get(i)).display();
            } else {
                ((C)list.get(i)).display();
            }
        }
    }
}

위의 Object는 서로 다른 타입들을 다룰 수 있도록 하여 범용성이나 확장성에 유리 하지만 이는 한계를 가지고 있으므로 더 많이 사용하는 ArrayList를 사용해 보도록 하겠다.

ArrayList[]

자바에서 제공해주는 배열처럼 동작하는 ArrayList API

배열의 가장 취약점은 크기에 민감하다는 것이다.
자바에서 기본적으로 제공하는 ArrayList에는 배열을 다룰 때에 민감할 수 있는 크기의 문제를 해결해준다.

profile
Just Do It

0개의 댓글