소스코드 용량을 줄이기 위해 어떤 노력들이 있을까요?

착한아이의 이미지

소스코드 용량을 줄이기 위해 어떤 노력들이 있을까요? 예를들면,

* 각 이름들을 최소로 줄이기.

s:=s_i(i); // 숫자를 문자열로 반환
s:=s_ss(ss); // TStrings를 string로 반환
li:=li_liss(lis,s); // TListItems에서 string이 있는 TListItem을 반환

* 함수를 분해할수 없을때까지 분해하여, 작은 함수를 많이 만들기.

* 어떤 처리후 인스턴스 생성/삭제도 함수로 만들어 버리기.

function sl_s(const s_:string):TStringList;begin
  result:=TStringList.Create;ss_s(result,s_);
end;
 
function s_sl(sl_:TStringList):string;begin
  result:=s_ss(sl_);sl_.Free;
end;

* 스콥내에서 같은 인자를 사용하고 두번이상 호출하는 함수는 변수로 받은후 사용하기.

B=X/sqrt(a);C=Y/sqrt(a);
q=sqrt(a);B=X/q;C=Y/q;

* 언어표현을 적극 활용하기.

//일반 예
var sl:TStringList;begin sl:=TStringList.create;sl.AddStrings(ss);result:=sl.DelimitedText;sl.Free;end;end; // sl이름을 바꿀 경우 사용된 곳을 찾아다니며 바꿔줘야함.
// with 활용 예
begin with TStringList.create do begin AddStrings(ss);result:=DelimitedText;Free end end; //인스턴스 선언 생략. 
 
 
// 일반 예
B=[];for i=1:size(A),if A(i)>10,B=[B A[i]];end;end; // 벡터A 에서 10보다 큰 요소만 반환
// 인덱스 활용 예
B=A(A>10); // MATLAB

* 컴파일에 문제없거나 연산자 우선순위만 맞으면 괄호,공백,구분자 등을 생략하기.

with sl do for i:=0to Count-1do Add(''); // 상수숫자 뒤 공백 생략
 
function [x y z]=f(a b c); // MATLAB 콤마 생략가능

* 연산자 사용이 최소가 되도록 수식 변형 시키기

* 함수인자에 디폴트값을 사용하여, 호출시 가능하면 인자 생략하기

* 중복되지 않는 스콥내에서 새로운 변수 사용을 줄이기. 등등?

(인덴트나 엔터키의 남발은 용서할 수 있고요, 부디 실행속도성능이나 가독성은 개인편차가 있으니 고려하지 말아주세요. :P)

jick의 이미지

ioccc를 찾아보시면 되겠네요.

익명 사용자의 이미지

괜히 소스코드 줄인다고 오히려 읽기 어렵게 만드는 것은 바보같은 짓이죠.
소스 줄인다고 공백 생략하지 마세요. 아주 나쁜 습관입니다. 위에 열거한 것중에 좋아보이는 것은 단 한개도 없네요.

익명 사용자의 이미지

예전엔 메모리, 디스크 등 값이 비쌀 때는 그럴필요 있었지만 지금은 소스크기 줄여얻는 득보다 유지비용  손실이 더 커질

cleansugar의 이미지

읽는 시간도 압축하려면 긴 문장이 빠를 수도 있습니다.

그냥 zip으로 압축하는게 효율이 더 높으니 *.c.gz을 만들면 됩니다.

재벌 2세가 재벌이 될 확률과
금메달리스트 2세가 금메달을 딸 확률이 비슷해지도록
자유오픈소스 대안화폐를 씁시다.

아이디의 아이디어 무한도전
http://blog.aaidee.com

귀태닷컴
http://www.gwitae.com

winner의 이미지

사람이 직접 할 일은 없겠죠.

comafast의 이미지

용량을 줄이려면 압축을 떠나서 생각하기는 힘들듯 합니다.
빈번하게 출현하는 소스코드를 일종의 사전에 등록하고 실제코드에서는 등록된 소스코드를 호출만 하는거죠
보통 이런경우를 재사용률이 높다고 합니다.

매크로/템블릿/상속을 통한 디자인/설계/구현 단계마다 재사용률을 높이는것이 가장 효과가 크다고 생각합니다.
마이크로 단계의 노력들은 80/20 법칙에 의해 비효율적 일듯 합니다.

shint의 이미지

함수'를 구분하는데 쓰일 수 있다는 말이군요.
웹용' 함수 필터'로도 쓰기 좋겠습니다. 라는 말이 나와야 하는건가... ㅡ_ㅡ;;;
함수 사전화'시스템에 꼭 필요하겠네요. 천천히 하져머... ㅡ_ㅡ;;;
다들 분발하시니 대단하십니다.
좀 더 자세한 기획'이 필요한데... 언제 날잡아서 머리가 맑아지는 날이 오면 그리하져.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

샘처럼의 이미지

pascal인가요? ^^
이곳에서 읽히는 code를 보고 깜짝 놀랐습니다.

delphi 계열이라면, 말씀하신 내용들을 가지고 만들어진 어셈블리를 살펴보면서 어떤 코드가 가장 효율적인지를 진지하게 논의하던 게시판이 언뜻 기억납니다. 저야 뭐 pascal의 p자도 모르는 입장에서 구경하기도 힘들었습니다만.. ^^

사랑천사의 이미지

솔직히 소스 코드의 용량은 별로 안 된다고 생각됩니다. 무조건 용량을 줄이는게 중요한 건 아닌 거 같고...
가독성과 프로그램의 유연성 단위 분리 이런 것들이 상당히 중요하다는 생각이 듭니다.
(그나저나 MS VS 계열 IDE 들의 다양하고 이상한 프로젝트 구성 파일들 때문에 제 입장에선 쓸 때 없는 용량 잡아 먹는게 더 짜증 납니다. 소스가 많을 수록 그 구성 파일들 용량이 커져셔 몇십 매가 혹은 몇백 매가 까지도 되더군요 용량이. .aps .pch-이건 뭐하는 건진 알지만...- .ncb 등등)

사람천사

winner의 이미지

http://msdn.microsoft.com/en-us/library/3awe4781(v=vs.80).aspx
IntelliSense 에 쓰인다고 합니다.

그런데 VC++2010은 ncb가 sdf 그러니까 SQL Server Compact Edition RDB file 로 바뀌면서 용량이 10배로 늘었습니다.
SQL Server Management Studio 로 열어보면 어떻게 구성되었는지 확인할 수 있죠.

IDE를 사용하는 반작용은 꽤 크죠. MFC와 마찬가지로 VS는 초보자의 학습용 혹은 섬세한 programming을 위한 도구라기 보다는 전문가가 빨리(dirty가 좀 섞이더라도) 개발하는데 도움을 주기 위한 용도라고 생각하는게 좋은 것 같습니다.

익명 사용자의 이미지

소스코드는 오히려 늘리는게 좋죠 쫙쫙
주석도 엄청 많이 달고 ㅎ

winner의 이미지

가독성을 해치지 않는 범위 내에서 줄이는 것을 말씀하신 것 같네요. 너저분하게 작성하지 말자는 이야기군요.

익명 사용자의 이미지

주석을 너무 안달아도 문제지만, 너무 장황한 주석보다는 깔끔하고 직관적인 코드가 좋더군요.
대부분의 경우는 주석 달아놔도 결국은 코드도 봐야 하고 말이죠.

익명 사용자의 이미지

대부분의 소스는 주석이 너무 많아서 문제라기 보다는 주석이 너무 없어서 더 문제죠.
그리고 주석이 없어서 읽기 어려운것 보다는
소스가 너무 스파게티같아서 소스 자체를 읽기 너무 힘든 경우도 많고..

사랑천사의 이미지

아하하. 인텔리센스인가 뭔가 데이터베이스 파일이라고 한다는건 알지만 제가 그 개념 조차 몰라서 필요 없다고 생각하는 거 같네요.
어쨌건 VS와 MFC는 골때리는 느낌 입니다. 뭐 UI를 제작하는데는 상당히 편한 거 같지만요. 자바로 GUI를 할려고 했었는데 죽을 맛이었던...
갑자기 다른 얘기로 와서 죄송합니다.

사람천사

semmal의 이미지

왜 소스코드 용량을 줄여야하는지 모르겠습니다.

저도 짧은건 좋은데, 엔터가 없이 짧은건 좀 싫어하는 편이라서 말이지요.
게다가 변수 이름은 몰라도 함수 이름은 온전한 단어를 선호하는 편이라 별로 공감이 안가네요.

요즘 하드디스크나 메모리도 충분해서 굳이 안줄여도 될 것 같은데요.
시피유도 충분히 빨라서 많은 글자 처리하는데 무리하지 않아도 되구요.

------------------------------
How many legs does a dog have?

winner의 이미지

수학에서도 짧은 표기 많이 하잖아요.

semmal의 이미지

"왜"가 없기 때문에 납득이 안되는겁니다.
글에 winner님이 말해주는 "왜"가 있었다면, 저도 다른 분들도 그만큼 납득하거나 의도를 파악하기 쉬웠겠지요.

저는 착한아이님의 예제를 보고, abstraction이 떠오르지는 않아요.
그냥 무조건 짧게 적으려고 하는구나 하는 느낌만 받았습니다.

abstraction을 하자는 말이라면 동의는 하겠는데, 보여주는 예제가 그 방법이라면,
방법적인 면에서는 여전히 동의를 못하겠네요.

------------------------------
How many legs does a dog have?

익명 사용자의 이미지

그냥 제 습관 같은건데 a=c; 식으로 = 기호 앞/뒤로 공백을 잘 넣지 않습니다.
요즘은 왠만하면 이렇게 안하고 공백을 넣는 습관을 들이고 있고요.
저같은 경우는 소스코드를 줄인다기 보다는 읽기 쉽게 만들기 위해 간혹 다음과 같이 하고는 합니다.

a=b; c=d; e=f;
for (i=0; i <= 10; i++) { blah blah...; }

그밖에 습관적으로 포트란에 길들여져서인지 정수는 i,j,k,l,m,n... 위주로 한글자로 이루어진 이름을 쓰고
간단한 변수는 스트링은 s, s1, s2..., 문자는 c, c1, c2...
간단한 임시변수는 t, t1, t2...
약간 긴 이름으로는 str, ch, tmp, dummy, my 등등을 주로 씁니다. i_ s_ 식의 prefix등은 왠만하면 안쓰지요.

아무튼 제경우는 코드를 줄인다고 할 때에 공백줄이거나/이름 줄이는 방식은 거의 완전히 배제하고
알고리즘/루프를 최적화 하는 방식으로 이해합니다.