본문 바로가기
Java/Java 활용 개념 정리

<Java> ArrayList 를 객체 지향 관점으로 이해하기.

by Dev dreamer 2023. 2. 6.

 

💡 1. ArrayList 를 살펴보자.


 

ArrayList는 java.util 이라는 Java 에서 제공해주는 API이다.

 

메소드로는 다음과 같이 있다.

 

➡add();

배열에 값을 추가해 주는 메소드.

➡get();

배열에 데이터를 조회해 값을 반환하는 메소드

➡size();

배열에 몇개의 데이터가 담겨있는지 크기를 반환하는 메소드

 

ArrayList 객체를 생성하면 Object 배열을 담을 공간과 메서드들이 함께 heap영역에 생긴다.

 

ArrayList 안에 Book 이라는 사용자 정의 객체를 넣는다고 해보자.

 

 

book 이라는 객체를 생성해 메모리에 만들어지고 해당 번지(주소)를 ArrayList 에 담아준다.

 

 

get을 통해 책의 정보를 조회하고자 할때 빠져나오는 값이 Object 타입으로 나오기 때문에

BookDTO 값을 조화하기 위해서는 BookDTO로 downcasting을 해줘야만 한다.

 

Object 배열은 값을 받을때 object로 받아야 하므로 upcasting을 해야하고

조회할 때 Object 타입으로 나오는 값을 원하는 타입의 정보로 받기위해 downcasting을 해줘야 한다.

 

 

💡 2. 코드로 학습하는 ArrayList 객채지향 관점


 

 

ArrayList의 경우 Object 들을 받는 배열로서 여러가지 타입의 객체를 저장하는것이 가능하다.

 

단 실무를 할때 ArrayList로 여러가지 타입을 저장할 일은 없다. 

 

그래서 보통 하나의 타입을 정해놓고 사용하는데 이를 제약할 수 있는 타입을 generic 타입이라고 한다.

 

이렇게 <> 안에 원하는 타입을 넣으면 ArrayList안에 BookDTO 값만 넣는다고 선언을 한것이다.

 

이렇게 BookDto 제네릭 타입을 선언하고 나면

 

Object[] 에서 BookDTO[] 로 바뀐다.

 

자기 타입의 배열에 자기 타입의 정보를 넣는것이므로

 

add를 통해 데이터를 넣을 때 upcasting이 일어나지 않고 바로 데이터를 넣어준다.

 

 

upcasting이 일어나지 않았다? -> downcasting도 일어나지 않아도 된다. 

즉 바로 데이터를 꺼내서 조회할 수 있는것이다.

 

이렇게 제네릭 타입을 <BookDto>로 선언하기 전에는 BookDTO 클래스로 downcasting을 해줬어야 했는데

 

이렇게 바로 이용이 가능한 것이다.

 

ArrayList가 Object 타입을 받을수 있는 배열이며 왜 ArrayList에 항상 generic 타입을 썼는지 알아볼 수 있는 수업이었다.

 

 

 


Java 관련 개념을 알려주실 때 그 내부 동작이 어떻게 구현되는지 자세하게 알수 있는 강의입니다.

출처: Java TPC (생각하고, 표현하고, 코딩하고) 대시보드 - 인프런 | 강의 (inflearn.com)

댓글