본문 바로가기

Java/알고리즘

[자바 알고리즘 인터뷰] 4장 자료형

1. 자바 자료형 

 

1) 원시 자료형 

 

- 원시형은 메모리에 정확하게 형(Type) 크기만큼의 공간을 할당하고 그 공간을 오로지 값으로 채워 넣는다. 

 

자료형 크기 설명
byte 1바이트 -2^7 ~ 2^7-1
1short 2바이트 -2^15 ~ 2^15-1
int 4바이트 -2^31 ~ 2^31-1
long 8바이트 -2^63~ 2^63 -1
float 4바이트 4바이트의 실수를 표현
double 8바이트 8바이트의 실수를 표현(자바의 기본 실수형)
boolean 1비트 참 또는 거짓
char  2바이트 단일 문자를 저장 

 

 

ex)

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

int a = 7;

 

 

2) 참조 자료형 

 

- 원시형이 아닌 자료형

 

- 원시형은 자바 메모리 모델에서 훨씬 더 빠른 영역에 할당된다. 반면 참조형은 좀 더 느린 영역에 할당된다, 

- 원시형은 자료형에 따라 크기가 제각각이며, 자료형의 크기만큼의 메모리만 할당된다. 반면 참조형은 일정한 크기의 메모리가 할당된다. 대신 크기가 훨씬 더 크다. 

- 참조형은 메소드 호출을 통해 여러 편리한 작업을 수행할 수 있다. 

- 원시형은 항상 값이 존재해야 하며, 널이 될 수 없다. 반면 참조형은 널이 될 수 있다. 

- 컬렉션의 엘리먼트는 참조형만 가능하다. 

- 원시형을 선언하는 키워드는 소문자로 시작하며, 참조형은 대문자로 시작한다. 

 

 

래퍼 클래스 (Wrapper Class)

 

- 자바의 원시형과 이에 대응하는 참조형 

원시형 참조형(래퍼 클래스)
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
char Character

 

ex)

//원시형 선언
int a = 7;

//첨조형 선언 가능(오토박싱)
Integer b =7;

 

 

2. 자바 컬렉션 프레임워크 

 

1) List

 

- 순서대로 엘리먼트를 모아두는 모음집

- 순서대로 엘리먼트를 추출하거나 또는 임의의 위치를 추출할 수도 있으며 검색도 가능 

 

ArrayList

- 리스트의 가장 기본이 되는 구현

- 동적 배열로 구현되어 있음 

List<Integer> a = new ArrayList<>();
a.add(1);
a.add(2);

 

LinkedList

- 리스트를 연결 리스트로 구현한 자료형

- 이중 연결 리스트(Doubly Linked List)로 구현 되어 있음 

List<Integer> b = new LinkedList<>();
b.add(1);
b.add(2);

 

 

2) Map

 

- Collection을 확장하지 않고 별도로 구현되어 있음

- 키/값을 모두 갖는 자료형

 

HashMap 

- 기본적인 해시 테이블 구조의 자료형

- 입력 순서를 보장하지 않음 

Map<String,Integer> a = new HashMap<>();
a.put("a",1);
a.put("b",2);

 

LinkedHashMap

- 입력 순서가 유지됨 

 

TreeMap

- 값에 따라 순서를 정렬

- 내부적으로는 자가 균형 이진 탐색 트리인 레드-블랙 트리로 구현되어 있음 

Map<String,Integer> b = new TreeMap<>();
b.put("a",1);
b.put("b",2);

 

 

- 맵 내부를 순회하여 추출할 때는 entrySet()을 이용해 내부의 키/값 형태를 Entry<K,V>를 지닌 집합 자료형, 즉 Set으로 만든 다음에 순회할 수 있음.

Map<String,Integer> map = new HashMap<>();
map.put("a",1);
map.put("b",2);

//Map.Entry로 순회하여 내용 출력
for(Map.Entry<String,Integer> entry : map.entrySet()) {
	System.out.println(entry.getKey()+" "entry.getValue());

 

 

3) Set

 

- List와 유사하지만 중복을 허용하지 않음 

 

Set<Integer> a = new HashSet<>();
a.add(1);
a.add(2);
a.add(2);

//[1,2]

 

 

4) Queue

 

- 큐 자료구조 인터페이스 

 

Deque

- 양쪽에서 삽입과 삭제를 처리할 수 있는, 스택과 큐의 특징을 모두 갖고 있는 인터페이스로 Queue를 확장해 정의되어 있음

 

 

3. 무한대 크기의 숫자를 저장할 수 있는 자료형 

 

BigInteger

 

- 임의 정밀도(Arbitrary Precision) 정수 

- 무제한 자릿수를 제공하는 정수형 

- 정수를 숫자의 배열로 간주하여 큰 수를 보관 

 

- BigInteger에서 지원하는 연산 

연산  메소드
덧셈(+) add()
뺄셈(-) subtract()
곱셈(*) multiply()
나눗셈(/) divide()
나머지(%) remainder()