적합한 자료구조는 코드의 효율성을 높인다..
코딩을 처음 배울 때는 '코드가 실제로 동작하는가?'가 목표이예요.
하지만 개발자로서 일할 때는 '코드의 품질'을 향상시키는 것이 목표가 됩니다. '코드의 품질' 중에서 중요하게 여겨지는 것이 '유지보수성'과 '효율성'이 있어요.
자료구조는 '코드의 품질' 중 '효율성'을 높이기 위해 학습하는 것이예요.
데이터를 효율적으로 조직하면 코드의 효율성도 높아지기 때문이다.
효율성이란 간단하고 빠르지만 결과까지 정확한 것이다. 이 효율성은 데이터를 어떻게 조작하느냐에 영향을 많이 받기때문에 자료구조가 중요한 것이다.
예시를 보면 이해가 되실 겁니다. 다음의 두 함수는 모두 2부터 100까지의 짝수를 출력합니다. 이처럼 같은 결과를 만들더라도 데이터를 조직하는 방식에 따라 효율성이 달라집니다.
첫번째 함수는 [ 2부터 100까지의 모든 자연수 ]를 데이터로 정했습니다. 그 결과 루프를 100번 돌면서 변수 number가 2의 배수인지도 확인해야 합니다.
public void printEvenNumbersVer1 {
int numnber = 2;
while(number <= 100) {
❗ if (number % 2 == 0)
❗ print(number);
number++;
}
}
두번째 함수는 [ 2부터 100까지의 모든 짝수 ]를 데이터로 정했습니다. 그 결과 간단하게 루프를 50번만 돌면 끝입니다.
public void printEvenNumbersVer2 {
int numnber = 2;
while(number <= 100) {
print(number);
❗ number += 2;
}
}
차이가 보이시나요?
첫번째 함수는 2부터 100까지의 계속 1만 더하면서 '자연수'로 , 두번째 함수는 계속 2를 더해가면서 '짝수'로 데이터를 결정했습니다.
그 결과 첫번째 함수는 루프를 '100번' 돌면서 2로 나눈 나머지가 0인지 확인도 해야 합니다.
그러나 두번째 함수는 루프를 '50번'만 돌뿐만 아니라 다른 추가적인 검사를 하지 않아도 됩니다. 간단하고 빠른데다 결과도 정확합니다.
- 첫번째 함수의 데이터 조작방법 : 1씩 더한다 → 루프백번+2의배수확인
- 두번째 함수의 데이터 조작방법 : 2씩 더한다 → 루프50번
이것이 효율성의 차이입니다. 그리고 이 차이는 데이터의 조작방법에서 나온 것입니다.
데이터를 어떻게 조직하는가에 따라 프로그램은 수십 수백 배 더 빠르게 혹은 더 느리게 실행될 수 있기 때문이다. 선택한 자료구조가 소프트웨어가 잘 실행될지 혹은 처리량을 감당할 수 없어 멈춰버릴지를 결정할 수도 있기 때문이다. 그러므로 각각의 자료구조들이 개발중인 프로그램의 성능에 어떤 영향을 미칠지 확실히 이해하고 있어야 한다.
데이터를 어떻게 조직하는가에 따라 프로그램은 수십 수백 배 더 빠르게 혹은 더 느리게 실행될 수 있기 때문이예요. 대량의 데이터를 처리해야 하는 프로그램이나 수천 명이 동시에 사용하는 웹 앱을 개발한다면, 선택한 자료구조가 소프트웨어가 잘 실행될지 혹은 처리량을 감당할 수 없어 멈춰버릴지를 결정할지도 몰라요.
소프트웨어를 문제없이, 빠르게 실행할 수 있는 명쾌한 코드를 작성하는 능력을 갖추고 소프트웨어 개발자가 가져야 하는 전문성을 키우려면 다양한 자료구조를 알고, 각각의 자료구조가 개발 중인 프로그램의 성능에 어떤 영향을 미칠지 확실히 이해하고 있어야 합니다.
이 글 내용은 '제인 웬그로우'의 '누구나 자료구조와 알고리즘 개정 2판' 책을 100% 참고하여 작성하였습니다. 설명에 전문적인 용어보다는 일상적인 용어를 사용하고 그림으로 원리를 설명해주어 왕초보인 저가 이해하기에 아주 좋았습니다. 가격이 많이 나가는 편이지만 꼭 배워야 하는 내용이 모두 들어있고 그것을 제가 이해할 수 있는 수준으로 쓰여있어 전혀 아깝지 않은 소비였습니다.