github.com/taemin-kwon93 Github 보러가기 ->

Data Structures and Algorithms/Concepts techniques

JAVA 자료형, 컬렉션 프레임 워크 설명 메모

태민Kwon 2024. 7. 28. 12:37

자바 알고리즘 인터뷰 책을 보며 학습한 내용.

 

자바는 어떤 자료형을 제공하는가?

자바의 자료형은 크게 원시 자료형(Primitive Data Type)과 원시가 아닌 자료형(Non-Primitive Data Type)으로 구분할 수 있다. Non-Primitive data type 은 데이터가 저장되는 위치를 참조한다 하여, 참조 자료형 Reference data type이라고도 한다. 자바에서는 클래스 형태로 되어 있다.

 

원시 자료형

byte, short, int, long, float, double, boolean, char 1 byte = 8 bit, bit 수 만큼의 제곱

byte 1 바이트 -128 ~ 127 (-2^7 ~ 2^7 - 1)
short 2 바이트 -32,768 ~ 32,767 (-2^15 ~ 2^15 - 1)
int 4 바이트 -2,147,483,648 ~ 2,147,483,647 (-2^31 ~ 2^31 - 1)
long 8 바이트 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (-2^63 ~ 2^63 -1)
float 4 바이트 4바이트 실수를 표현한다.
double 8 바이트 8바이트 실수를 표현한다(자바의 기본 실수형).
boolean 1 비트 참 또는 거짓
char 2 바이트 단일 문자를 저장한다.

자료형 크기 설명

int a = 7;

이렇게 하면 메모리 특정 영역에 4바이트를 할당하고, 그곳에 7 이라는 값을 채워 넣게 된다.

 

참조 자료형

참조형은 원시형과 비교해 다음과 같은 차이가 있다.

  • 원시형은 자바 메모리 모델에서 훨씬 더 빠른 영역에 할당된다. 반면 참조형은 좀 더 느린 영역에 할당된다.
  • 원시형은 자료형에 따라 크기가 제각각이며, 자료형 크기만큼의 메모리만 할당된다. 반면 참조형은 일정한 크기의 메모리가 할당된다. 대신 크기가 훨씬 더 크다.
  • 참조형은 메소드 호출을 통해 여러 편리한 작업을 수행할 수 있다.
  • 원시형은 항상 값이 존재해야 하며, 널(null)이 될 수 없다. 반면 참조형은 널이 될 수 있다.
  • 컬렉션의 엘리먼트는 참조형만 가능하다.
  • 원시형을 선언하는 키워드는 소문자로 시작하며, 참조형은 대문자로 시작한다.

원시형이 자바에서 미리 정의한 가장 기본적인 자료형이라면, 참조형은 별도로 정의하며 부가 기능을 제공하는 편리한 자료형이라 할 수 있다. (원시형은 쓰기에 다소 불편해도 공간과 속도를 최적화할 수 있다.)

Wrapper Class는 클래스 객체이면서 원시형을 감싸고 있다. 예시: Byte, Short, Integer, Long, Float, Double, Boolean, Character 사용시 주의사항은 아래와 같다.

  • 참조형은 메모리 점유를 많이하게 된다.
  • 참조형은 대부분 16바이트이기 때문에 원시형에 비해 크기가 훨씬 더 크다. 또한 속도도 느려진다.
  • 참조형은 해당 메모리 주소에 실제로 값이 포함된 또 다른 주소가 기입되어 있고, 다시 그 주소를 찾아서 값을 조회하는 명령을 내리는 등 값을 알아내기 위한 여러 부가 작업이 추가로 필요하다.
  • 그래서 자바에서 원시형을 이용한 산술 연산은 C와 유사한 속도를 낼 수 있어도 참조형으로 계산하면 C에 비해 훨씬 느리다.

int[] 과 Integer[] 에 각각 1억개의 값을 삽입한 후 반복문을 통해 검색을 실행할 때, 원시형에 비해 참조형이 훨씬 오래 걸리는것을 확인할 수 있다. 대략 삽입 6배, 찾기 1.5배 정도 걸렸다.

 

자바 컬렉션 프레임워크의 등장

복수 개의 값을 처리하는데에 배열을 사용한다. 정적 배열은 사용 제약이 따르고 무엇보다 크기를 마음대로 조절할 수 없다. 배열의 기능을 뛰어넘어, 자유로운 삽입과 삭제가 가능하면서 크기에 신경 쓸 필요가 없으며 여러 가지 편리한 부가기능을 함께 제공하는 목록형이 필요했다. 자바 1.2 버전(1998)에 이르러 자바 컬렉션 프레임워크(Java Collections Framework)라는 이름으로 컬렉션 자료구조를 구현한 공식 라이브러리가 포함됐다. 자바 컬렉션 프레임워크의 주요 이점은 다음과 같다.

  1. 일관성 있는 API: 동일한 기능을 하는 자료형은 공통 인터페이스를 제공한다. 예를 들어, List나 Set 모두 엘리먼트를 삽입하는 메소드는 add()로 동일하다.
  2. 개발 비용 절약: 필수 데이터 구조와 알고리즘을 미리 구현하여 제공하므로 개발자가 일일이 알고리즘을 구현할 필요가 없다.
  3. 고성능 구현 제공: 잘 만든 고성능 구현을 제공하므로 개발자가 직접 개발할지라도 이보다 더 잘 만들기는 어렵다.
  4. 재사용 가능: 공통 표준을 제공하므로 재사용이 가능하다. 한 예로 자바 5버전(2004년)에 작성한 리스트 예제를 지금도 동일하게 사용할 수 있다.