자바에서 자료구조를 배우는 목적은 현실을 프로그래밍적으로 표현하기 위함에 있습니다.
현실에는 데이터들이 매우 큰 크기로 존재하기 때문에,
이러한 큰 데이터를 표현하기 위해서는 자료구조를 이해할 필요가 있는 것입니다.
자바에 대표적인 자료구조에는 다음과 같은 것들이 있습니다.
- 스택
- 가장 최근에 저장한 자료를 가장 먼저 출력하는 자료구조
- LIFO(Last In First Out) 방식
- 자료를 저장하는 것 : push, 자료를 꺼내는 것 : pop
- 큐
- 가장 먼저 저장한 자료를 가장 먼저 출력하는 자료구조
- FIFO(First In First Out) 방식
- 자료를 저장하는 것 : put, 자료를 꺼내는 것 : get
- 배열
: 특정 데이터가 메모리 공간에 연속적으로 저장되어있는 자료구조 - 연결리스트
: 메모리에 여러 개의 노드들이 흩어져, 노드들이 연결된 형태의 자료구조
오늘은 이러한 자료구조 중
배열과 연결리스트에 대해 자세히 알아보려고 합니다.
간단한 배열 예를 우선 들어보겠습니다.
반을 관리한다고 할 때,
1학년 1반 학생들을 묶고 싶을 때 배열을 이용할 수 있습니다.
현실에서는 1번부터 번호가 시작되지만
자바에서는 0번부터 번호가 시작됩니다.
이러한 시작번호를 자바에서는 인덱스(Index)라 부릅니다.
0번 학생이 김유신이라고 할 때,
0번에 해당하는 학생의 이름을 값(Value)이라고 합니다.
이것을 간단하게 그림으로 표현하면 다음과 같습니다.
0번에 이라고 쓰여져 있는 곳이 Index,
김유신 이라고 쓰여져 있는 곳이 Value
그리고 이 둘을 합쳐 Element라고 합니다.
배열을 사용하면 데이터 값을 그룹으로 관리할 수 있다는 장점이 있습니다.
1학년 1반의 데이터를 배열로 관리한다면 그룹으로 관리가 되는 것처럼요.
또한 그룹으로 관리되고 있는 데이터는 반복문을 이용해 쉽게 데이터를 처리할 수 있습니다.
이러한 배열을 사용할 때 주의해야 할 점이 있습니다.
배열은 크기가 정해져 있기 때문에 인덱스 범위를 넘어서는
값을 가져오거나 대입할 경우 오류가 발생합니다.
이때 발생하는 오류는 'ArrayIndexOutOfBoundsException'입니다.
다음과 같이 간단한 예제를 통해 확인할 수 있습니다.
이러한 배열과 비슷한 리스트(List)라는 것이 있습니다.
배열과 리스트의 공통점은 다음과 같습니다.
- 값이 순서대로 저장된다.
- 데이터가 중복하여 저장이 가능하다.
배열과 리스트의 차이점은 다음과 같습니다.
- 배열은 인덱스값이 중요하다.
- 리스트는 데이터가 저장된 순서가 중요하다.
- 배열은 메모리에 연속적으로 저장된다.
- 리스트는 메모리에 분산되어 저장된다.
- 배열은 데이터의 렌덤 엑세스가 가능하다.
- 리스트는 데이터의 렌덤 엑세스가 불가능하다.
- 배열은 중간에 데이터 삽입, 삭제가 어렵다.
- 리스트는 중간에 데이터 삽입, 삭제가 쉽다.
- 배열은 중간에 값이 삭제되어도 기존 설정된 인덱스에 따른 값이 일정하다.
- 리스트는 중간에 값이 삭제되면 그 뒤에 인덱스가 변화한다.
이러한 배열과 리스트의 차이점을 이해한다면
자바의 Collection을 이해하실 수 있습니다.
자바의 Collection에는 List와 Set, Map, Queue가 있습니다.
오늘은 List와 Set 그리고 Map을 간단히 알아보려고 합니다.
우선 리스트에는 대표적으로 다음과 같은 두 가지 구현 클래스가 존재합니다.
- LinkedList
- ArrayList
이 둘의 차이점은 다음과 같습니다.
- ArrayList는 각 데이터의 index를 가지고 있어 검색이 빠르지만,
LinkedList는 앞에 있는 데이터부터 차례로 검색하므로 검색이 느리다. - LinkedList는 데이터를 추가하거나 삭제할 때 과정이 단순하여 속도가 빠르지만,
ArrayList는 추가할만큼 배열을 늘리거나, 삭제할만큼 배열을 당기능 등의 작업이 필요해 속도가 느리다.
어떠세요? 앞서 얘기한 배열과 리스트의 차이점과 비슷하죠?
또한 ArrayList는 앞서 배열을 설명할 때 설명드렸던 구조(index, value, element)와 동일하지만,
LinkedList는 조금 다릅니다. 개념은 비슷하지만 LinkedList는 연결성과 관련이 있기 때문에
데이터셋을 Element가 아닌 'Node' 혹은 'Vertex'라고 표현합니다.
그렇다면 Map과 Set은 어떨까요?
Map의 특징은 다음과 같습니다.
- Map은 키(Key)와 값(Value)이 쌍으로 이루어진 집합이다.
- 키가 중복되지 않으나 값은 중복될 수 있다.
- HashMap, LinkedHashMap 등의 구현 클래스가 존재한다.
Set의 특징은 다음과 같습니다.
- Set은 순서를 유지하지 않는 데이터의 집합이다.
- 순서가 유지되지 않으므로 데이터의 중복이 허용되지 않는다.
- HashSet, LinkedHashSet과 같은 구현 클래스가 존재한다.
이렇듯 List와 Map, Set은 각 특징을 살려
데이터의 집합, 그룹을 처리할 때 사용됩니다.
이러한 자바의 컬렉션에 대한 간단한 사용예제와 메소드 사용법에 대한
실습 클래스들을 깃에 올려두었으니
이러한 자료구조의 실제 활용법을 간단하게 알아보고 싶으신 분들은
다음 주소를 확인해주세요!!
깃허브 주소
'내가 공부하려고 올리는 > 자바' 카테고리의 다른 글
자바 - 자바 초짜 프로젝트 MVC 패턴으로 수정하기 (1) | 2021.10.23 |
---|---|
자바 - 배열로 석차 구하기 (0) | 2021.10.13 |
자바 - 추상클래스 vs 인터페이스 쉽게 알아보기 (0) | 2021.09.16 |
자바 - 클래스 타입변환 (0) | 2021.09.14 |
댓글