두둥.. 다시 코테를 준비하기로 마음 먹었다.!
그래서 다시 초심으로 돌아가서 공부일지를 쓰려고 하고, 그 시작은 자료구조란?
뭘까??
데이터를 저장하고 관리하는 방식
컴퓨터 구조 관점에서 생각해보기로 하자!
데이터를 저장하는 곳은 어디일까?
메모리(Memory)
HDD, RAM이 대표적이라고 볼 수 있다.
코딩을 막 짜고
스프링 부트에서 Application을 실행시킬때의 코드이당. -> 요즘 하고 있는 사이드 플젝
public class BoardBackApplication {
public static void main(String[] args) {
SpringApplication.run(BoardBackApplication.class, args);
}
}
저장버튼을 누르면 코드들이 하드디스크에 저장이 되는 것!
코드를 실행하면 RAM 메모리에 데이터가 올라가게 된다.
RAM 은 비싸다.
컴퓨터를 직접 부품을 모아 구매해보신 분들은 아실 거에요! 이 작은 부품이 얼마나 비싼지..
우리가 롤하면서 멜론을 켜서 노래를 듣는다고 치면, 여러 프로그램이 실행되고 있는 것을 뜻하고, RAM메모리에 프로그램 일부가 올라가 있는 형태에 실행을 하면 CPU가 읽어 우리는 여러가지의 프로그램을 돌릴 수 있게 됩니다.
즉, 비효율적인 자료구조를 사용하면 RAM메모리 낭비를 초래하고 프로그램 성능이 저하의 원인이 되게 됩니다.!
예를들어 배열과 링크드리스트를 비교해보면?
배열의 경우 데이터가 메모리상에 연속되게 저장이 됩니다.
링크드리스트이 경우 메모리상에 불연속적으로 저장이 되지만 다음 데이터의 위치를 가리킴으로써 연속성을 유지할 수 있습니다.
배열은 데이터 접근이 쉽고,
링크드 리스트는 데이터 추가 및 삭제가 쉽습니다.
왜 배열이 데이터의 접근이 쉽냐고 이야기 하시면 앞서 말씀드렸듯이 데이터가 메모리상에 연속되게 저장이 되어 바로 메모리상에서 원하는 데이터에 접근할 수 있게 됩니다.
반대로 추가 삭제는 어려움이 있습니다.
맨 앞의 데이터를 삭제한다고 할 때 배열의 경우 각 배열을 한칸씩 이동해야 합니다.
O(N)의 시간복잡도를 가질 수 있다고 볼 수 있네요.
반면 링크드 리스트는 자신의 앞 뒤(양방향)의 주소값을 가지고 연결되어 있기 때문에 그 연결을 끊어버리면 삭제나 데이터 추가를 손 쉽게 할 수 있습니다.O(1)의 시간복잡도를 가질 수 있습니다.
링크드리스트는 조회할 때는 맨 앞에서부터 계속 주소값을 따라가면서 원하는 값을 찾을 때까지 조회가 실행되므로 O(N)의 시간복잡도를 가진다고 이야기할 수 있습니다.
이렇듯, 용도에 따라 적절한 자료구조를 선택해야 하는 이유를 찾을 수 있었습니다.
작은 데이터에는 괜찮을 수 있어도, 대용량의 데이터를 다룰 때 이런 자료구조를 고려하지 않는다면 ~~ 큰일이 날 수도 있겠죠..
즉, 자료구조 공부합시다.!
'자료구조 & 알고리즘 관련 > 자료구조&알고리즘' 카테고리의 다른 글
[BOJ 2346] 백준 풍선 터뜨리기 자바 (0) | 2024.07.21 |
---|---|
Queue 2개로 Stack구현하기 (0) | 2024.02.03 |
Stack 두개를 이용하여 Queue구현하기 (0) | 2024.02.03 |
링크드리스트 노드의 구현 (0) | 2022.11.28 |
단방향 링크드리스트 구현 (0) | 2022.11.28 |