본문 바로가기

공부/컴퓨터

처음에는 설계, 자료구조, 알고리즘에 집중하라.

반응형
제가 마침 Practical Java 라는 책을 가지고 있어서
( 물론 번역본 입니다. ;; 전 영어가 무지 약해서 ;; )
그중에서 4장 성능(영어로 하면 Performance) 부분을 하나씩 정리해 나가겠습니다.

전 하나의 언어만을 사용해야 한다는 것에서 생각을 달리하기 때문에
제가 하는 거의 모든 작업들은 각종 언어와 꼭 하나의 언어에 종속된
것들은 거의 하지 않고 있음을 양지해 주시기 바랍니다.

본 글을 자바 관련에 넣지 않고 언어 관련에 넣은 이유는.
읽어 보시면 알다 시피 이 글은 특정 언어에 관련된 글이 아니라.
언어독립적으로 적용받야아 하는 규범(?)을 설명해 놓은 글이기 때문입니다.


이하는 책의 내용 입니다.

==========================================================================================

PRAXIS 28
제목 : 처음에는 설계, 자료구조, 알고리즘에 집중하라.

프로그래머들은 정확한 분석자료도 없이 무작정 빠른 코드를 만들려고 하다가,
설계를 간과하는 경우가 많다. 처음부터 무작정 코드의 축소와 성능 개선에만
신경을 쓰면, 그 만큼 설계에 좋지 않은 영향을 준다.

더 빠른 코드가 나올 수도 있지만 오히려 효율이 떨어지는 코드를 만들어 내기 쉽고,
설계 과정에서 이루어내야 할 목표 - 확장하기 쉽고, 고치고 다루기도 쉬운 구조로 프로그램
틀을 잡는 일 - 를 놓쳐 버릴 수도 있다.
그런식으로 응용 프로그램을 개발한다면, 프로그램머는 실제 코드를 돌려보고 얻어낸
실험결과도 없이, 성능문제가 발생할 곳을 설계단계에서 미리 예측해야한다.


처음에 설계를 튼튼하게 하는 작업부터 했다면, 정작 코드를 더 빠르게 돌아가도록
고쳐 써야 할때, 되려 일이 훨씬 쉽고 비용도 줄어든다.
설계가 잘못된 프로그램은 코드를 고쳐 쓰는데 정말 많은 시간이 걸리고 에러를 만들어
내기도 쉽다. 그러므로 나중에 정말 필요해서 목표한 만큼 성능을 끌어올려야 할 필요가
있을때 코드를 잘 고쳐 쓸 수 있도록 먼저 설계에 중점을 주어야 한다.


이절의 PRAXIS에는 자바의 성능을 개선하는데 적용할 수 있는 여러가지 기법이 포함되어 있다.
그중 일부는 설계 단계에서 사용하거나 적용해야 할 내용이며, 그 외에는 코드를 일단 돌아 가게
만든 다음 그 성능이 기대에 미치지 못할 때만 사용하는게 옳다.


설계를 망치지 않고 구현기법에 관계 없이 적용할 수 있는 내용도 있지만, 코드의 특정 부분에만
조심해서 써야 할 한정된 내용도 있다.
예를들어 문자열을 ㅂㅜㅌ이는데 StringBuffer 클래스로 충분히 처리해 낼 수 있는 경우라면
String 클래스를 사용하지 않아야 좋다., 또 아무때나 그냥 반복문을 펼쳐내서도 안된다.
작업과정에 드는 노력, 코드 증가 및 위험을 감안하고서라도 성능 향상에 확실한 득이 있다는
사실을 확인하고서야 해볼만한 일이다.


만드는게 응용 프로그램인지 클래스 라이브러리인지도 생각해 봐야 한다.
응용프로그램을 만들고 있다면, 성능분석기로 코드를 시험하고 분석 자료를 만들어내는 등의
번거로운 추가 작업을 하게 된다. 이런 작업을 해야 응용프로그램을 만든 다음에 코드를 최적할
수 있고, 으용프로그램의 어느 부분에 신경을 써야 되는지 제대로 판단될 수 있다.


클래스 라이브러리를 만드는 경우라면, 프로그래머가 어떻게 라이브러리를 쓰는지
속속들이 알 수 없는게 정상이다.
그래서 뭘 최적화해야 하는지 어디를 손대야 하는지를 밝혀내기가 어렵다.
성능분석기를 쓰더라도 추측 -프로그래머가 라이브러리를 어떻게 쓰게 될 것인지를 짐작 - 해서
나온 자료일 뿐이다.
그러므로, 라이브러리 클래스가 어떻게 쓰이는지, 그 전형이랄 만한 성능 측정 데이터를
만들기 어렵다. 이런 경우 응용프로그램 하나에 적용하는 것 보다 더 많은 최적화
기법을 섞어 쓰고 싶을 것이다.


빠른 코드를 만드는 한 가지 방법은 정말 필요한 것만 최적화하는 것이지, 별로 성능에 영향을
주지도 않는 코드를 최적화하는 일은 분명 시간 낭비다.
대개 실행 시간의 80~90%를 잡아 먹는 코드는 10~20%정도다. 그리고 정말 성능 개선이
필요한 10~20% 가량의 코드는 성능 분석을 제대로해서 찾는게 옳은 방법이다.
( 찬 이 덧말 달기를 : 9010 법칙 또는 8020 법칙이라는게 있다. )


기억해 두어야 할 점은 코드의 효율성이란게 어떤 언어를 썻느냐가 아니라,
설계를 얼마나 잘했는가, 자료구조와 알고리즘은 현명하게 선택했는가에 달려 있다는 사실이다.


..... (7중 정도 생략 ,., 책 소개 나오는 부분 )


요약하자면, 자바의 성능을 가장 크게 개선시킬 수 있는 방법은 자바만의 특수한 성능 개선 기법 -
그중 많은 내용이 이어지는 PRAXIS에 있다. - 을 적용하는 것이 아니라 , 설계와 알고리즘에 있어서
오랜시간에 걸쳐 입증된 언어 독립적인 기법을 사용하는 것이다.

여기서 제시한 성능에 관한 얘기중에는, 먼저 알맞은 구조와 알고리즘을 가지고 프로그램을
잘 설계한 다음 성능 분석기로 뽑아낸 믿을 만한 자료를 바탕으로 적용해야 할 부분이있다.
이절에서 보여주는 대부분의 PRAXIS에서는, 코드 개선이 필요하다는 사실을 입증할 만한 충분한
실험 데이터가 있을때, 코드 성능을 세밀하게 조율하는데 써야할 내용을 다루고 있다.

==========================================================================================


우와 ;; 치기 힘드네 ;;;
반응형