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;

 

래퍼 타입은 박싱, 원시 타입은 언박싱, 래퍼 타입은 랩, 랩 감싸다 박싱 이렇게 외우면 편하다

 

 

컬렉션에서 래퍼 클래스를 사용하는 이유

  1. 객체 지향 설계: 자바의 컬렉션 프레임워크는 객체를 다루도록 설계되었습니다. 원시 타입은 객체가 아니기 때문에, 컬렉션 프레임워크에서 사용할 수 없습니다.
  2. 기능 확장: 래퍼 클래스는 원시 타입에 없는 여러 메서드들을 제공합니다. 예를 들어, Integer 클래스는 **parseInt**와 같은 유용한 메서드를 제공합니다.
  3. 제네릭 사용: 자바의 제네릭은 객체 타입을 요구합니다. 원시 타입은 제네릭 타입 파라미터로 사용할 수 없으므로, 래퍼 클래스를 사용해야 합니다.
  4. 값의 불변성: 래퍼 클래스는 불변 객체입니다. 한 번 생성된 값은 변경할 수 없으며, 이는 다중 스레드 환경에서 안전하게 사용할 수 있는 장점이 있습니다.