TIL
TIL - 2024/09/05
기석김
2024. 9. 5. 16:16
배열의 특징은 ?
- 고정 크기: 배열은 초기화 시 크기가 고정되며, 이후 크기를 변경할 수 없습니다.
- 동일한 타입: 배열은 동일한 데이터 타입의 요소만 저장할 수 있습니다.
- 인덱스 접근: 배열 요소는 인덱스를 사용하여 빠르게 접근할 수 있습니다.
- 간단한 구조: 배열은 구조가 간단하여 메모리 효율이 좋고 성능이 빠릅니다.
컬렉션이란? ( 배열과 반대 )
- 동적 크기: 컬렉션은 필요에 따라 크기가 자동으로 조정됩니다.
- 유연한 데이터 타입: 제네릭을 사용하여 다양한 타입의 데이터를 저장할 수 있습니다.
- 다양한 데이터 구조: 다양한 요구사항에 맞는 여러 데이터 구조를 제공합니다.
- 풍부한 메서드: 데이터 조작을 위한 다양한 메서드를 제공합니다 (삽입, 삭제, 검색 등).
인터페이스 주요 특징
인터페이스 | 구현 클래스 | 특징 |
List | LinkedList ArrayList |
순서가 있는 데이터의 집합, 데이터의 중복을 허용. |
Set | HashSet TreeSet |
순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않음. |
Map | HashMap TreeMap |
키(key)와 값(value)의 쌍으로 이루어진 데이터의 집합 순서는 유지되지 않고, 키는 중복을 허용하지 않으며 값의 중복을 허용. |
주요 인터페이스 간략하게 설명
List
순서가 있는 데이터의 집합을 표현하며, 중복된 요소를 허용
List<String> myList = new ArrayList<>();
myList.add("Apple");
myList.add("Banana");
myList.add("Orange");
System.out.println(myList); // [Apple, Banana, Orange]
Set
순서가 없고 중복을 허용하지 않는 데이터의 집합을 표현
Set<String> mySet = new HashSet<>();
mySet.add("Apple");
mySet.add("Banana");
mySet.add("Orange");
System.out.println(mySet);
// 순서는 유지되지 않음, [Apple, Banana, Orange] 또는 [Banana, Apple, Orange] 등 가능
Map 인터페이스
키-값 쌍을 저장하며, 중복된 키는 허용X, 키를통해 값을 검색, 추가, 삭제 가능
Map<String, Integer> myMap = new HashMap<>();
myMap.put("One", 1);
myMap.put("Two", 2);
myMap.put("Three", 3);
System.out.println(myMap); // {One=1, Two=2, Three=3}
주요 구현 클래스
ArrayList
배열 기반의 동적 배열로, 크기를 동적으로 조절가능
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("Python");
arrayList.add("JavaScript");
System.out.println(arrayList);
HashSet
해시 테이블을 기반으로 중복을 허용하지 않는 집합을 구현한 클래스
List<String> arrayList = new ArrayList<>();
arrayList.add("Java");
arrayList.add("Python");
arrayList.add("JavaScript");
System.out.println(arrayList);
HashMap
해시 테이블을 기반으로 키-값 쌍을 저장하는 클래스
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("One", 1);
hashMap.put("Two", 2);
hashMap.put("Three", 3);
System.out.println(hashMap);
특징 | 배열 | 컬렉션 |
크기 | 고정 | 동적 |
데이터 타입 | 동일 | 제네릭으로 다양한 타입 지원 |
데이터 구조 | 단일 구조 | 다양한 구조 |
사용법 | 단순 | 복잡&유연 |
성능 | 인덱스 접근이 빠름 | 데이터 구조에 따라 다름 |
메모리 사용 효율 | 효율적 | 덜 효율적일 수 있음 |
기본 기능 | 제한적 | 풍부한 메서드 제공 |
원시 타입과 래퍼 타입
원시 타입
- 정수형: byte, short, int, long
- 실수형: float, double
- 문자형: char
- 논리형: boolean
int number = 10;
char letter = 'A';
boolean flag = true;
래퍼 타입
- 정수형: Byte, Short, Integer, Long
- 실수형: Float, Double
- 문자형: Character
- 논리형: Boolean
Integer number = 10;
Character letter = 'A';
Boolean flag = true;
래퍼 타입은 박싱, 원시 타입은 언박싱, 래퍼 타입은 랩, 랩 감싸다 박싱 이렇게 외우면 편하다
컬렉션에서 래퍼 클래스를 사용하는 이유
- 객체 지향 설계: 자바의 컬렉션 프레임워크는 객체를 다루도록 설계되었습니다. 원시 타입은 객체가 아니기 때문에, 컬렉션 프레임워크에서 사용할 수 없습니다.
- 기능 확장: 래퍼 클래스는 원시 타입에 없는 여러 메서드들을 제공합니다. 예를 들어, Integer 클래스는 **parseInt**와 같은 유용한 메서드를 제공합니다.
- 제네릭 사용: 자바의 제네릭은 객체 타입을 요구합니다. 원시 타입은 제네릭 타입 파라미터로 사용할 수 없으므로, 래퍼 클래스를 사용해야 합니다.
- 값의 불변성: 래퍼 클래스는 불변 객체입니다. 한 번 생성된 값은 변경할 수 없으며, 이는 다중 스레드 환경에서 안전하게 사용할 수 있는 장점이 있습니다.