-
JAVA - 2 (변수타입과 컬렉션)study/java 2020. 7. 15. 20:50
변수
- DataType에 따른 구분
1. 기본형 변수 : 자료의 실제 값을 저장
2. 참조형 변수 : 값이 저장되어 있는 주소 값을 저장 ( String 등 기본형 변수를 제외한 나머지 )
- 선언 위치에 따른 구분
1. 멤버 변수 : 클래스 영역에 선언된 변수
- 인스턴스 변수 : 인스턴스 생성 시에 만들어지는 변수. 인스턴스마다 값이 다름
- 클래스 변수 : 인스턴스 변수에 static을 붙인 변수. 모든 값이 같음
2. 지역 변수 : 메소드 내에서 선언되어 메소드 호출 시 생성되고 종료 시 소멸됨.
컬렉션
1. List : 순서가 있는 데이터의 집합으로 중복을 허용
- ArrayList : 비동기식. 여러 스레드가 ArrayList를 동시에 작업 가능. 인덱스를 가지고 있어 데이터를 조회할 때 효율적
- LinkedList : 링크를 통해 데이터를 연결하기 때문에 삽입, 삭제를 할 때 효율적임. 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 사용됨.
- Stack : FILO(First In Last Out) 구조의 컬렉션
- Vector : ArrayList와 비슷하나 ArrayList와는 달리 동기화를 보장하기 때문에 한 스레드가 Vector 작업 중이면 다른 스레드가 Vector를 보유할 수 없음.
2. Set : 순서가 없는 데이터 집합(LinkedHashSet 제외)으로 중복이 허용되지 않음.
- HashSet : List와 Map과 달리 순서가 없다.
- LinkedHashSet : 순서가 있는 HashSet
- TreeSet : 이진 탐색 트리로 데이터를 저장하는 컬렉션. 데이터 추가/삭제는 오래걸리지만 탐색은 빠름.
3. Map : Key:Value 형태의 자료구조
- HashMap : HashTable보다 빠르며 동기화를 보장하지 않는다.
- LinkedHashMap : 입력한 순서대로 데이터를 저장한다.
- TreeMap : 이진 탐색 트리로 데이터를 저장하는 컬렉션. Key를 기준으로 오름차순
- HashTable : HashMap보다 느리지만 동기화가 보장된다.
컬렉션을 사용하는 이유
1. 다수의 Data를 다루는데 표준화된 클래스들을 제공해주기 때문에 직접 Data Structure를 직접 구현하지 않고 편하게 사용할 수 있음
2. 배열과 다르게 객체를 보관하기 위한 공간을 미리 정하지 않으므로 상황에 따라 객체의 수를 동적으로 정할 수 있고 공간적인 효율도 높여줌.
ArraysList vs LinkedList
1. ArraysList는 값이 메모리에 저장될 때 한 지역에 모여서 저장되는 반면 LinkedList는 어디에 저장이 되는지 보장하지 않음
2. ArraysList는 조회, LinkedList는 갱신, 삭제에 효율적이다.
제네릭
: 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 방식 ( Type Safe )
public class GenericExample<T> { public T info; } //T에 String과 StringBuilder를 넣어 외부에서 타입을 지정해주었다. GenericExample<String> genericString = new GenericExample<>(); GenericExample<StringBuilder> animalStringBuilder = new GenericExample<>();
제네릭을 사용하는 이유는 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다.
장점
1. 컴파일 시에 미리 타입을 체크해서 에러를 사전에 방지
2. 타입 변환을 제거. 비제네릭 코드는 불필요하게 타입 변환을 하기 때문에 성능에 악영향을 미침
Wrapper Class
: primitive data type을 객체로 변환시키는 클래스
Wrapper 클래스는 산술 연산을 위해 정의된 클래스가 아니므로 인스턴스에 저장된 값을 변경할 수 없다.
단지 값을 참조하기 위해 새로운 인스턴스를 생성하고 생성된 인스턴스의 값만을 참조할 수 있다.
- 박싱 : 기본 타입 -> Wrapper 클래스의 인스턴스로 변환
- 언박싱 : Wrapper 클래스의 인스턴스에 저장된 값 -> 기본 타입의 데이터로 변환
사진 출처:
자바 컬렉션
https://gangnam-americano.tistory.com/41
ArrayList vs LinkedList
https://medium.com/@govinda_raj/arraylist-vs-linkedlist-f8c5099153b5
박싱과 언박싱
https://junhyunny.blogspot.com/2019/03/wrapper-boxing-unboxing.html
'study > java' 카테고리의 다른 글
[JAVA] Try-with-resources (0) 2020.07.30 JAVA - 5 (0) 2020.07.20 JAVA - 4 ( 객체지향 ) (0) 2020.07.16 JAVA - 3 (0) 2020.07.16 JAVA - 1 ( JAVA 기초 ) (0) 2020.07.13