자료 구조를 알아야 하는 이유

J.A.Y·2024년 2월 20일
0

자료구조/알고리즘

목록 보기
16/17
post-thumbnail

⭐자료 구조를 배워야 하는 이유는 뭘까요?

최근 지인으로부터 다른 것은 몰라도 자료구조는 공부해봐라는 이야길 전해듣고 자료구조와 더불어 알고리즘, cs 스터디를 시작하게 됐습니다.

공부하기 전에는 자료 구조에 대한 중요성을 미처 알지 못했었는데, 공부하면 할수록 프론트든 백이든 개발자라면 당연히 알아야 하는 지식임을 깨닫고 있습니다.


자료 구조와 그 중요성

💡자료 구조란 무엇이고 왜 알아야 할까요?

자료 구조는 단순히 말해서 데이터를 조직하는 방법입니다. 같은 데이터라도 이를 어떤 방식으로 조직하는가는 코드의 실행 속도에 많은 영향을 미치지요.

그래서 자료 구조를 공부하면 자연스레 왜 이때 이러한 방식으로 데이터를 조직하는지 이해할 수 있고, 한 줄이라도 더 효율이 좋은 코드를 짤 수 있습니다.


배열을 통해 그 증요성을 이해해보자

자료 구조를 알아야 하는 이유를 배열을 통해 한번 살펴보겠습니다.

먼저, 자료 구조와 알고리즘에는 '읽기', '검색', '삭제', '삽입'이 있습니다. 쉽게 설명하면 '읽기'는 특정 값을 찾는 것이고, '검색'은 특정 값이 존재하는지 조회하는 것이며, '삭제'는 말 그대로 특정 값을 삭제하는 것이고, '삽입'은 특정 값을 추가하는 것입니다.

배열의 읽기 vs 검색

배열에 담은 데이터를 읽거나 검색하는 방법에 대해선 아마 배열을 조금이라도 공부한 사람이라면 다 알 것입니다. 하지만 이 둘 중에서 어느 것이 시간복잡도 측면에서 더 효율적인가에 대해 질문한다면 명쾌하게 질문할 수 있는 사람이 몇이나 될까요?

이번에 공부하면서 배열을 선언하면 컴퓨터는 배열을 여러 개의 셀로 구성된 메모리 안에 저장한다는 사실을 알게 됐습니다. 자세히는 거대한 메모리 안에 존재하는 셀 각각에 배열의 원소들을 하나씩 저장하고, 몇 번째 셀에서 시작하는지, 그리고 배열의 크기가 얼만큼인지도 기억해둡니다. 그래서 만약 4번째 인덱스 값을 찾기 위해 코드를 실행하면 컴퓨터는 첫 번째 셀의 주소를 찾고, 해당 주소에서 +4를 하여 4번째 인덱스 값을 찾아내어 우리에게 전달해주지요.

let array = [a, b, c, d, e, f]

console.log(array[5])
단계1. array의 [0]이 저장되어 있는 메모리 셀 찾기
단계2. 해당 셀에서 4를 더함
단계3. array[4]의 값 'e' 출력 

배열에 인덱스라는 개념이 있기에 3단계만에 array의 4번째 인덱스 값을 찾을 수 있었습니다.

그렇다면 배열에서 검색을 통해 'e'값을 찾는다면 몇 단계가 걸릴까요?🤷‍♀️

let array = [a, b, c, d, e, f]

// 'e'가 존재하는지 배열을 순회하며 확인 후 있으면 출력
for(let i of array) {
	if (i === 'e') {
    	return i
    } 
}

// 없으면 null
return null;
단계1: array[0]의 셀 찾기
단계2: array[0]부터 오른쪽으로 하나씩 옮겨가며 'e'와 일치하는지 비교
.
.
(생략)
.
.
단계6: array[4]의 값 'e'와 일치함을 확인
단계7: array[4] 값 반환

두 예시에서 차이점을 발견하셨나요?

배열 안에 특정 값이 원소로 들어 있는지 검색하는 일은 배열에서 특정 값을 읽어내는 것보다 더 많은 단계가 필요합니다. 이 말은 즉, 배열의 특정 값을 읽는 작업이 시간 복잡도 측면에서 훨씬 효율적이라는 뜻이지요. 물론 상황에 따라서 배열에 특정 값이 있는지 검색해야 할 때는 더 많은 단계가 소요되더라도 당연히 검색 방법이 더 옳겠지만, 결과가 똑같다면 위의 예시처럼 검색보다는 읽어오는 방법을 사용하는 것이 훨씬 효율적이지 않을까요?

profile
Done is better than perfect🏃‍♀️

0개의 댓글