[Java] Collection framework란?

김동욱·2023년 8월 26일
0

Java

목록 보기
6/8
post-thumbnail

컬렉션이란?

데이터를 수집하고 관리해주는 객체로 데이터 크기를 가변적으로 변경해줍니다.
배열을 직접 다룰 필요없이 값을 add(), remove(), clear(), size()해주게 됩니다.

  • 데이터 관리를 직접 할 필요가 없다.
    배열은 값을 추가할 때 배열을 늘리고 값을 복사하고 새로운 값을 담고 해야하는데 컬렉션은 알아서 관리

그래서 가변길이 배열 이라고 부르기도 합니다.

Object

실수, 정수, 사용자가 만든 자료형 등등 다양한 자료형이 존재합니다.

모든 클래스의 부모를 object라고 합니다.

모든 객체를 묶을 수 있는 범용 자료형식, 즉 공통 자료형을 위해 만든 것이 object입니다.

이로 인해 object 타입의 변수는 어떤 종류의 객체도 참조할 수 있지만 기본 자료형을 object 참조변수에 저장하려면 해당 기본 자료형의 래퍼 클래스를 사용해야 합니다.

Object[] list = new Objcet[10];

list[0] = “GOod”;

list[1] = new Exam();

list[2] = new NewlectExam();

list[3] = 3; → 참조형이 아니라 기본형이라서 담을 수 X

참조형과 기본형

object 가 참조형 변수만 담을 수 있고 기본 자료형는 담을 수 없는 이유

기본 자료형(int, double, boolean..)은 값을 참조하는 게 아니라 직접 그 값을 저장합니다.
int a = 3; 이면 a에 직접 3이란 값을 저장하게 되죠

반면 참조형 변수는 객체의 주소값을 저장합니다.
참조형 변수가 가리키는 객체는 힙 영역에 저장하고 해당 객체의 주소값은 스택 메모리에 저장합니다.
그래서 기본 자료형을 object에 담을 때 불필요한 메모리를 사용하게 되기 때문에 wrapper 클래스로 객체화 시킨 후 담는 것 입니다.

즉 Object obj =3; 이 불가능하니까 3을 공간으로 만들어서 obj가 3을 참조할 수 있도록 만드는 것 입니다.
하지만 wrapper 클래스로 객체화시키는게 메모리를 더 차지할 수도 있기때문에 적절한 사용이 필요합니다.

Wrapper

Object obj = 3; (X)

→ Boxing

Object obj = new Integer(3);

JDK 5버전 이후 오토박싱이 생겨서

→ Object obj = 3;

이렇게만 사용해도 가능합니다.

int x = 3;

Integer x =3; (박싱, 언박싱이 진행되니 메모리 효율 안좋음)

그래서 object 에 다양한 형태의 값을 저장해도 문제없어지게 됐습니다.

Collection과 Collections의 차이점?

지금까지 작성된 내용은 Collection에 관련된 내용입니다.
그렇다면 Collections는 Collection과 어떤 차이점이 있을까요?

Collections는 자바에서 제공하는 유틸리티 클래스로, 컬렉션 객체를 조작하는데 필요한 다양한 정적 메소드들을 제공합니다.
주로 컬렉션의 데이터를 검색, 정렬, 동기화 등의 연산을 수행하기 위해 사용되죠

예를 들어

Collections.sort(List)
Collections.synchronizedList(List)

는 각각 리스트를 오름차순 정렬, 동기화된 리스트로 변환하는 기능을 가지고 있습니다.

정리하자면,

  • Collection
    여러 종류의 데이터 구조가 공통으로 가져야 하는 기능을 정의해줍니다. (add(), remove()..)
  • Collections
    컬렉션 데이터를 조작하기 위한 다양한 유틸리티 함수를 제공해줍니다. (sort(), ..)

Arrays

Arrays

배열을 다루기 편리한 메서드(static) 제공해줍니다.

  1. 배열의 출력 : toString();

  2. 배열의 복사 : copyOf(), copyOfRange();

  3. 배열 채우기: fill(), setAll()

  4. 배열의 정렬과 검색(이진탐색) : sort(), binarySerarch()

    1. 이진탐색은 정렬된 상태에만 가능 sort먼저 해주고 해야함
    2. 순차 탐색: 순서대로 찾음
    3. 이진 검색: 정렬된 배열- 반 잘라서 비교-또 반 잘라서 비교함. 좀 더 빠름
  5. 다차원 배열의 출력: deepToString()

  6. 다차원 배열의 배교: deepEquals()

  7. 배열을 리스트로 변환: asList(Object…a)

    1. 가변 매개변수라서 매개변수를 여러개 넣어도 O
    2. List list = Arrays.asList(new Integer[]{1,2,3,4,5});
      List list = Arrays.asList(1,2,3,4,5);
      int[] memberList = {”첫”,”둘”,”셋”};
      List list = Arrays.asList(memberList);
      대신 읽기 전용이라서
      list.add(6); → 예외발생
      그래서 배열을 내용으로 하는 새로운 리스트를 만들어줘야함
    3. List list = new ArrayList(Arrays.asList(1,2,3,4,5));
  8. parallelXXX(),stream().. 람다와 스트림관련

profile
안녕하세요. 공부해요

0개의 댓글