🤖 Computer Science

자료 구조에 대해 알아보자

date
Jul 28, 2023
slug
learn-data-structure
author
status
Public
tags
자료구조
Java
summary
자료구조에 대해 간단히 알아봅시다
type
Post
thumbnail
제목을-입력해주세요_-001 (1).png
category
🤖 Computer Science
updatedAt
Jul 30, 2023 08:28 AM

자료 구조란?

자료 구조는 데이터가 어떤 구조로 저장되고, 또 어떻게 사용되는지를 나타냅니다.
우리가 평소에 선언하여 사용하던 변수나 배열 같은 것이 자료 구조에 해당합니다.
오늘은 이 자료 구조가 정확히 어떤 것이고, 또 왜 중요한지에 대해 쉽게 알아보도록 하겠습니다.
 
오늘은 자료 구조 개념을 우리가 잘 아는 동화인 <여우와 두루미> 이야기에 빗대어 알아보는 시간을 가져보려 합니다!

여우의 음식은 어디에 담아야 할까?

notion image
여우와 두루미가 서로 음식을 준비한 뒤 서로 바꾸어 먹기로 약속을 하였습니다.
그래서 여우는 두루미를 위한 식사로 두부를 준비하였습니다.
1번 네모난 그릇, 2번 동그란 그릇 , 3번 중 어느 용기에 담아가는 것이 좋을까요?
이렇게 음식을 담을 때에 어느 용기에 담을 지 고민하는 것 처럼, 데이터를 담을 자료 구조를 선택할 때에도 항상 고민하게 됩니다.
 
예를 들어, 반 아이들의 평균 시험점수를 구하는 코드를 짜야합니다.
데이터를 정수형 변수에 담아 표현한다면,
int grade1 = 70; int grede2 = 80; int grade3 = 52; int grade4 = 100; int grade5 = 38; return (grade1 + grade2 + grade3 + grade4 + grade5) / 5;
이렇게 표현이 될 수 있겠죠.
 
이번엔 배열에 담아 표현해보면,
int[] gradeArr = {10, 40, 30}; int gradeSum = 0; for(int i = 0; i < gradeArr.length; i++) { gradeSum += gradeArr[i]; } return gradeSum / gradeArr.length;
어떤 방법이 더 좋아 보이나요?
성적 자체를 직관적으로 볼 수 있는건 1번 코드일 수 있겠지만,
성적의 값이 변하거나 또 추가, 삭제 된다면 2번 코드가 훨씬 좋아보입니다.
 
이처럼 데이터를 담는 용기가 무엇이냐에 따라, 코드가 달라집니다.
 

여우와 두루미가 서로의 음식을 먹을 수 있을까?

notion image
여우와 두루미가 서로의 음식을 준비해왔습니다.
여우는 자신이 먹던 넓적한 그릇에 음식을 준비했고, 두루미는 자신이 먹던 입구가 좁은 호리병 모양 그릇에 음식을 준비했습니다.
서로의 음식을 바꾸어 먹을 수 있을까요?
여우와 두루미가 먹을 수 있는 그릇이 정해져 있는 것 처럼, 자료 구조는 사용자에 요구사항에 따라 달라져야 합니다.
속도나 메모리 등 여러 요인들을 고려해서 좋은 자료 구조에 데이터를 담아 내는것이, 개발자의 역할입니다.
 
예를 들어, 사용자 의 수 만큼 “hello”를 출력하는 인사 프로그램을 만들 때
public class BadExample { public static void main(String[] args) { String str = ""; for (int i = 0; i < 10000; i++) { str += "hello"; } System.out.println(str); } }
이렇게 매번 문자열에 “hello”를 추가할 때 String 객체를 선언하는 코드는 메모리 사용량이 많아지고 성능은 저하됩니다.
 
public class GoodExample { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10000; i++) { sb.append("hello"); } System.out.println(sb.toString()); } }
이렇게 StringBuilder 클래스를 사용하면, 매번 객체를 새로 생성하지 않으니, 메모리 사용량이 증가하지 않고
위 코드에 비해 성능이 훨씬 좋은 코드가 됩니다.
 
이렇게 데이터를 어느 자료 구조에 담는지, 또 어떠한 자료 구조로 코드를 작성하는 지에 따라, 좋은 코드와 나쁜 코드가 구분됩니다.
 
앞으로 다양한 자료구조에 대해 자세히 배워보도록 하겠습니다!