일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- HTML Parser
- 안드로이드
- 안드로이드 스튜디오
- 파이참
- thread pool
- Anaconda
- PyCharm
- Kotlin
- aging
- 안드로이드 스튜디오 설치
- Schedule
- 파이썬
- data class
- generics
- Android IDE
- Android
- InteliJ
- cache
- fixedRateTimer
- process
- jvm
- GC
- android studio
- 객체지향
- 크롤링
- jsoup
- sealed class
- android studio 설치
- GIT
- 딥러닝
- Today
- Total
탐비의 개발 낙서장
[자료구조] 자료구조를 배우기 위한 준비 본문
자료구조를 배우기 위한 준비
시스템을 코딩하기 전 설계 단계에서 어떻게 추상화된 형태로 필요한 DATA를 생각해 낼 것인가와 DATA를 어떻게 클래스화 시킬 것인가에 대한 생각이 필요합니다. 여기서 추상적 자료형(ADT)이 등장합니다.
추상적 자료형(ADT)?
1. 알고리즘에 필요한 데이터와 그 데이터에 대한 추상적인 연산들로 구성
2. 말 그대로 '추상적'이기에 세부 명세를 포함하지 않음
3. 자료구조는 추상적 자료형을 구체적(실제 프로그램)으로 구현한 것
자료구조
프로그래머는 프로그램에서 저장하는 데이터에 대해 탐색/삽입/삭제 등의 연산을 효율적으로 수행하기 위해 데이터를 정돈합니다. 자료구조는 위의 목적을 달성하기 위해 일련의 동일한 타입의 데이터를 정돈하여 저장한 구성체라고 할 수 있습니다.
좋은 프로그램이란?
좋은 프로그램의 기준은 크게 2가지 틀로 나눠 볼 수 있습니다.
1. 정성적 평가 기준(Qualitative Criteria)
- 프로그램이 사용자의 요구에 부합하는가?
- 프로그램이 정확하게 작동하는가?
- 프로그램 내부에 문서화가 잘 되어 있는가?
- 프로그램의 논리적인 단위를 생성하기 위해서 함수를 효과적으로 사용하고 있는가?
- 프로그램의 코드가 읽기 쉬운가?
위와 같은 정성적 평가기준은 소프트웨어 공학 측면 프로그램을 평가한다고 볼 수 있습니다.
2. 정량적 평가 기준(Quantitative Criteria)
- 프로그램이 주기억장치와 보조기억장치를 효율적으로 사용하는가?
- 프로그램의 실행시간은 적절한가?
위와 같은 정량적 평가 기준은 말 그대로 양, 실행속도를 의미합니다. 실행속도를 결정하는 것은 대체로 메모리이며, 자료구조를 배우는 이유가 바로 메모리의 효율적인 사용이라고 할 수 있습니다.
어떻게 성능을 평가하나요?
실제 실행 시간을 측정할 수도 있지만, 프로그래머의 숙련도, 언어의 종류 및 컴퓨터의 성능에 따라서 수행시간이 얼마든지 달라질 수 있기 때문에 '성능 분석'이라는 사전 예측 방법을 통해 평가합니다. 이는 복잡도 이론에 기초한 방법이기 때문에 공간 및 시간 복잡도로 나눠 볼 수 있습니다.
1. 공간복잡도
프로그램을 실행시켜 완료하는데 필요한 메모리 공간의 크기
2. 시간복잡도
프로그램을 실행시켜 완료하는데 필요한 CPU 시간
위와 같이 메모리 공간의 크기와 프로그램의 실행 시간의 두 개 기준으로 볼 수 있지만, 최근에 메모리 가격의 하락 등의 사유로 자료구조에서 주로 다루는 부분은 시간복잡도입니다.
마무리
이번 글에서 자료구조의 토대가 되는 추상적 자료형과 좋은 프로그램을 위한 성능 분석에 대해서 간단히 정리해보았습니다.