안녕하세요! 자바에서 객체를 다룰 때 Map, List, HashMap, Array와 같은 다양한 자료구조를 사용하는 경우가 많죠. 이 자료구조들이 각각 어떤 상황에서 사용되는지, 이들 자료구조를 비교하고, 각각 어떻게 사용하는지 알아볼게요.
1. Array (배열)
배열은 자바에서 가장 기본적인 자료구조예요. 간단히 말해 같은 타입의 데이터를 순차적으로 저장하는 구조입니다. 배열은 크기가 고정되어 있고, 메모리 상에서 연속적인 공간에 저장되기 때문에 인덱스를 사용해 빠르게 데이터를 조회할 수 있어요.
배열의 특징:
- 크기가 고정된다.
- 인덱스를 사용하여 순차적으로 접근.
- 한 번 크기를 설정하면 변경할 수 없다.
배열 예시:
public class ArrayExample {
public static void main(String[] args) {
// String 타입의 배열 선언 및 초기화
String[] fruits = {"사과", "배", "귤"};
// 배열에 접근하여 출력
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
배열의 장점:
- 빠른 접근 속도.
- 메모리 상에서 연속적인 공간을 사용하므로, 메모리 관리가 효율적일 수 있다.
배열의 단점:
- 크기가 고정되어 있어, 데이터의 수가 변할 때마다 새로운 배열을 만들어야 한다.
2. List (리스트)
List는 자바의 인터페이스로, 배열처럼 순차적으로 데이터를 저장하지만 크기가 동적으로 변할 수 있는 특징이 있어요. 자주 사용하는 ArrayList와 LinkedList가 List를 구현한 클래스들이에요. 여기서는 ArrayList를 예로 들어보죠.
List의 특징:
- 동적으로 크기가 변한다.
- 중복을 허용한다.
- 순서를 보장한다.
ArrayList 예시:
import java.util.ArrayList;
public class ListExample {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
// 요소 추가
fruits.add("사과");
fruits.add("배");
fruits.add("귤");
// 리스트에 접근하여 출력
for (String fruit : fruits) {
System.out.println(fruit);
}
// 리스트에 요소 추가
fruits.add("딸기");
System.out.println("추가된 리스트:");
for (String fruit : fruits) {
System.out.println(fruit);
}
}
}
List의 장점:
- 크기가 동적으로 늘어나기 때문에 유연하다.
- 데이터를 삽입하고 삭제하는 데 유용하다.
List의 단점:
- 내부적으로 배열을 사용하기 때문에, 크기를 늘릴 때 성능에 약간의 영향을 줄 수 있다.
3. HashMap (해시맵)
HashMap은 키와 값의 쌍으로 데이터를 저장하는 자료구조로, 빠른 검색, 추가, 삭제가 필요한 경우에 유용해요. Map 인터페이스를 구현한 클래스 중 하나인 HashMap은 데이터를 키로 접근할 수 있다는 큰 특징이 있어요. 순서가 중요하지 않으며 중복된 키를 허용하지 않아요.
HashMap의 특징:
- 키-값 쌍으로 데이터를 저장한다.
- 키는 중복을 허용하지 않으며, 값은 중복을 허용한다.
- 순서는 보장되지 않는다.
- 검색과 추가가 빠르다.
HashMap 예시:
import java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
// 데이터 추가
map.put("사과", 1000);
map.put("배", 2000);
map.put("귤", 1500);
// 키를 이용한 값 접근
System.out.println("사과의 가격: " + map.get("사과"));
// 전체 출력
for (String key : map.keySet()) {
System.out.println(key + ": " + map.get(key));
}
}
}
HashMap의 장점:
- 키로 빠르게 값에 접근할 수 있다.
- 중복 키를 허용하지 않으므로, 키 중복을 자동으로 처리할 수 있다.
- 데이터를 순차적으로 저장하지 않기 때문에 순서가 중요하지 않으면 유용하다.
HashMap의 단점:
- 순서가 보장되지 않기 때문에, 데이터를 순차적으로 출력하려면 정렬이 필요하다.
- null을 키로 사용할 수 있지만, null 값을 여러 개 넣을 수 없다.
4. Map (맵)
Map은 키와 값의 쌍으로 데이터를 저장하는 인터페이스입니다. HashMap, TreeMap, LinkedHashMap 등이 Map을 구현한 클래스들이죠. Map은 순서가 보장되지 않거나, 키를 이용한 빠른 검색이 필요한 경우에 유용하게 사용돼요.
Map의 특징:
- 키와 값의 쌍으로 데이터를 저장한다.
- 순서는 보장되지 않는다 (예: HashMap).
- 키는 중복을 허용하지 않지만, 값은 중복을 허용한다.
Map은 HashMap 같은 구체적인 클래스를 통해 사용되는 인터페이스라서, 실제 사용은 HashMap이나 TreeMap으로 하는 경우가 많아요.
언제 무엇을 쓰면 좋을까?
자료구조 |
사용 예시 | 장점 | 단점 |
Array | 고정 크기의 데이터 저장 | 빠른 접근 속도 | 크기 변경 불가능 |
List | 동적으로 크기가 변하는 데이터 저장 | 요소 추가/삭제 용이 | 성능에 약간 영향 |
HashMap | 키와 값 쌍으로 저장, 빠른 검색 필요 | 키로 빠르게 값에 접근, 중복 키 없음 | 순서 보장 안 됨 |
Map | 키-값 쌍 자료구조 필요 | 키로 값에 빠르게 접근 | 순서 보장 안 됨 |
- **배열(Array)**은 고정된 크기의 데이터를 다룰 때 가장 간단하고 빠르지만, 크기가 변할 때 불편합니다.
- List는 크기가 동적으로 변하는 데이터를 저장할 때 유용하고, 삽입과 삭제가 쉬운 장점이 있습니다.
- HashMap은 키를 통해 데이터를 빠르게 검색하거나, 중복 키를 허용하지 않고 데이터를 관리할 때 적합합니다.
- Map은 여러 구현체가 있으며, 키-값 쌍으로 데이터를 저장하는 구조에서 사용할 수 있습니다.
이렇게 자료구조의 특성을 이해하고, 각 상황에 맞는 자료구조를 선택하는 것이 중요해요. 자주 쓰는 것부터 익혀가면서, 코드에서 활용해 보세요! 😊
'IT&DEV - IT & 개발 > Backend' 카테고리의 다른 글
[SpringBoot] application.properties를 application.yml로 변경하는 방법 (0) | 2025.01.23 |
---|---|
POJO (Plain Old Java Object) 에 대한 정리 (0) | 2025.01.08 |
[OMV6] Docker에 Ubuntu와 Mysql 설치 (ifconfig/mysql 패스워드) (0) | 2023.05.25 |
댓글