본문 바로가기
내가 공부하려고 올리는/자바

자바 - 자료구조 / Java Collection Framework(JCF) 초간단 쉽게 알아보기

by 결딴력 2021. 11. 15.
반응형

자바에서 자료구조를 배우는 목적은 현실을 프로그래밍적으로 표현하기 위함에 있습니다.

현실에는 데이터들이 매우 큰 크기로 존재하기 때문에,

이러한 큰 데이터를 표현하기 위해서는 자료구조를 이해할 필요가 있는 것입니다.

 

자바에 대표적인 자료구조에는 다음과 같은 것들이 있습니다.

  • 스택
    • 가장 최근에 저장한 자료를 가장 먼저 출력하는 자료구조
    • 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'입니다.

 

다음과 같이 간단한 예제를 통해 확인할 수 있습니다.

ArrayIndexOutOfBoundsException 오류 예제

 

이러한 배열과 비슷한 리스트(List)라는 것이 있습니다.

 

배열과 리스트의 공통점은 다음과 같습니다.

  • 값이 순서대로 저장된다.
  • 데이터가 중복하여 저장이 가능하다.

 

배열과 리스트의 차이점은 다음과 같습니다.

  • 배열은 인덱스값이 중요하다.
    • 리스트는 데이터가 저장된 순서가 중요하다.
  • 배열은 메모리에 연속적으로 저장된다.
    • 리스트는 메모리에 분산되어 저장된다.
  • 배열은 데이터의 렌덤 엑세스가 가능하다.
    • 리스트는 데이터의 렌덤 엑세스가 불가능하다.
  • 배열은 중간에 데이터 삽입, 삭제가 어렵다.
    • 리스트는 중간에 데이터 삽입, 삭제가 쉽다.
  • 배열은 중간에 값이 삭제되어도 기존 설정된 인덱스에 따른 값이 일정하다.
    • 리스트는 중간에 값이 삭제되면 그 뒤에 인덱스가 변화한다.

 

이러한 배열과 리스트의 차이점을 이해한다면

자바의 Collection을 이해하실 수 있습니다.

 

자바의 Collection에는 List와 Set, Map, Queue가 있습니다.

오늘은 List와 Set 그리고 Map을 간단히 알아보려고 합니다.

 

우선 리스트에는 대표적으로 다음과 같은 두 가지 구현 클래스가 존재합니다.

  1. LinkedList
  2. 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은 각 특징을 살려

데이터의 집합, 그룹을 처리할 때 사용됩니다.

 

 


 

이러한 자바의 컬렉션에 대한 간단한 사용예제와 메소드 사용법에 대한

실습 클래스들을 깃에 올려두었으니

이러한 자료구조의 실제 활용법을 간단하게 알아보고 싶으신 분들은

다음 주소를 확인해주세요!!

 

깃허브 주소

 

반응형

댓글