최적화란?
Optimization : 우너래 의미는 개선을 하고 더 좋은 무엇인가를 만드는 것이지만 일반적으로 code의 실행 속도를 높이는 것으로 받아들여 진다.
* 프로그램의 실행 속도를 높이는 것
* 실행파일의 크기를 줄이는 것
* 코드의 질을 향상시키는 것
* 출력의 정확성을 높이는 것
* 기동시간(startup time)을 최소화하는 것
* 단위시간당 데이터의 처리량을 늘리는 것(반드시 실행속도와 같지는 않다)
* 저장장치의 부담을 줄이는 것(ex. database size)
** Embedded에서 최적화라 하면 Tuning의 개념도 포함된다.
코드를 다 만들고 나서 나중에 최적화 하는 것은 아주 위험하다.
- 처음 시작할 때부터 성능에 대해 고민하라. 개발이 끝날 때 고칠 수 있다고 생각하면서 소홀히 하지 마라
- 올바른 코드가 빠른 코드보다 훨씬 더 중요하다.
최적화를 해치는 요인들
* 복잡성
* 간접성
* 중복성
* 잘못된 설계
* I/O : 특히 입출력이 어려군데 흩어져 있으면 성능에 아주 많은 영향을 준다.
최적화의 필요성
* 게임 프로그래밍 : 실행환경의 한계까지 가기 때문에 실행 속도에 대한 최적화가 필요, 특히나 delay에 민감하다
* Digital signal porocessing : 대량의 data를 빠르게 digital filtering해야 함
* Embedded platform : 자원이 제한된 환경이라 하드웨어에 맞춰 최대한의 성능을 이끌어 내야 한다
* Realtime system : 정확한 시간에 시작하고, 주어진 시간 내에 작업을 완료해야 한다. 이 환경에서는 알고리즘이 신중하게 다듬어져야 하고, 실행이 정해진 제한시간 안에 된다는 것을 증명해야 한다.
* 금융 분야, 과학 연구에 사용되는 수치 프로그래밍(numerical programming) : 높은 성능을 필요로 함, 벡터연산(vector operation), 병렬계산(parallel calculation)
최적화를 할 때는..
* 가장 느린 코드를 찾아라 : 모든 코드를 고치지 말고 가장 느린(특별하게 느린) 부분만 수정
* 수정한 코드에 대해 unit test : 모든 수정은 side-effect를 유발할 수 있다
* 그럼에도 느릴 수밖에 없는 일은 ->
1) 실행 속도를 높인다.
2) 횟수를 줄인다
3) 정말 필요할 때까지 미루었다가 한다(상대적으로 중요하지 않은 시간에 한다)
H/W의 성능은 시간이 갈수록 좋아지고 있다. 그리고 compiler단계의 최적화도 점점 더 좋아지고 있다.
이미 최적화가 되어 있는 library도 더 많아지고 있다.
==> 결론은 최적화보다는 정확하고 (사람이) 알아보기 쉬운 코드를 작석하는 것이 훨씬 중요하다.
'Programming > 좋은습관들이기' 카테고리의 다른 글
Debugging : 버그를 없애기 위해 (0) | 2024.06.27 |
---|---|
Debugging : 무언가 잘못 돌아갈 때 해야 할 일 (0) | 2024.06.23 |
[코드멍키] 생각해 봅시다 (0) | 2022.01.08 |
프로그래머의 종류 (0) | 2022.01.03 |
설계하기 (0) | 2022.01.02 |
Build 관점에서의 language 구분 (0) | 2021.12.31 |
Comment 작성 요령 (0) | 2021.12.30 |
.vimrc option (0) | 2011.07.22 |
Artistic Style : SourceInsight (0) | 2011.04.28 |
툴을 사용하자 (0) | 2008.07.08 |