'코딩 표준 문서'에 해당되는 글 1건

  1. 2007.12.05 델파이 코딩 표준 - 델마당 타락천사님의 글

델마당 팁란에서 타락천사님의 글을 퍼온 검미다.

[팁] 코딩 표준 문서

안녕하세여..타락임다..^^

이것 역시 기초적인 겁니다. 전 다덜 저같이 하고 있을 거라고 생각했었는데......ㅠㅠ

I. 루틴

1. 루틴명..
루틴 이름을 통해 그 루틴의 기능이나 용도를 알수 있어야 합니다. 다음과 같이 기능에 해당하는 동사를 먼저 쓰고, 목적어를 뒤에 씁니다.
procedure FormatHardDrive;

입력 인자의 값을 설정하는 투틴은 다음과 같이 Set으로 시작해야 함다.
procedure SetUserName;

어떤 값을 가져오는 루틴은 Get으로 시작함다.
function GetUserName: string;

1. 루틴의 파라미터

같은 데이터형의 정규 인자들은 가능한 하나의 문구로 결합함다
procedure SetInfomation(Param1, Param2, Param3 : integer; Param4 : string);

정규인자들에는 기능과 용도에 맞는 이름을 붙이며, 일반적으로 루틴에 넘겨주는 식별자의 이름에 기초해서 이름을 만듬다. 일반적으로 클래스의 속성이나 필드의 이름과 같아서 생기는 혼동을 피하기 위해 A로 시작함다.
procedure SomeProc(AUserName: string; AUserAge : integer);

정규인자 순서는, 프로그램의 수행을 최적화 하는게 목적이다.
가장 자주 호출되는 인자들은 첫번째에 와야 하며, 가장 자주 쓰이지 않는 순으로 오른쪽으로 배치한다.
입력 인자들은 출력 인자들의 왼쪽에 와야 함다.
가장 일반적인 인자를 왼쪽에 놓고, 가장 구체적인 인자를 오른쪽에 놓슴다.
procedure SomeProc(APlanet, AContinet, ACountry, AState, ACitry: string);
단!! TObject 형의 Sender라는 인자가 첫번째인 이벤트 처리 루틴 같은 경우에는 위의 규칙에서 제외한다.

인자가 레코드나 배열, string 형이며, 루틴안에서 그 값이 변하지 않으면, const 지시자를 사용해서 상수 인자로 지정해야 함다. 그러면 컴파일러가 최적화 할수 있슴다.
다른 형의 인자들 이라도, 루틴 안에서 값이 변하지 않는 것이라면 const 지시자를 써주는게 좋슴다. 효율적으로 이득이 없지만, 코드를 읽고 이해하는데 도움이 됨다.

II. 변수
1. 대, 소문자 규칙
델파이 변수형의 경우엔 소문자로만 씀다. Win32 API 변수형들은 모두 대문자로만 쓰는 것이 일반적임다. 그 외의 형들은 첫 글짜를 대문자로 하고, 대, 소문자를 적절히 섞는다.
var
strBuf : string; // 델파이 변수
WindowHandle : HWND; // Win32 API 형

2. 실수형
Double 형은 CPU와 버스에 최적화된 형이며, IEEE가 정의한 표준 데이터형이여서, Win32에선 Double 형에 최적화 된다.
Real 형은 이전 버젼의 델파이 코드와 호환성이 필요할 때만 쓰는게 좋다.

2. 열거형
다른 모든 형들과 같이 열거형 이름도 T로 시작해야 함다. 식별자 이름에는 열거형 이름에서 따온 두세 글자를 소문자로 앞에 붙임다.
TSongType = (stRock, stClassic, stCountry);

3. 배열형
다른 모든 형들과 같이 배열형 이름도 T로 시작해야 함다. 배열형을 가르키는 포인터를 설정할 경우, 그 포인터의 이름을 P로 시작해야 하며, 배열형 선언의 바로 위에서 선언해야 함다.
type
PCycleArray = ^TCycleArray;
TCycleArray = arrary [1..100] of integer;

4. 레코드형
다른 모든 형들과 같이 레코드형 이름도 T로 시작해야 함다. 레코드형을 가르키는 포인터를 설정할 경우, 그 포인터의 이름을 P로 시작해야 하며, 레코드형 선언의 바로 위에서 선언해야 함다. 레코드의 각 필드의 데이터형은 열을 맞춰 주는게 좋슴다.
type
PEmployee = ^TEmployee;
TEmployee = record
EmployeeName : string;
EmployeeRate : Double;
end;

III. 클래스
1. 클래스명
다른 모든 형들과 같이 클래스형 이름도 T로 시작해야 함다.
type
TCustome : class(TObject);

2. 인스턴스명
클래스의 인스턴스 이름은 일반적으로 클래스형 이름에서 T를 뺀것을 사용함다.
var
Custome : TCustome;

3. 속성명
속성은 클래스의 private 필드를 조작하기 위한 것이며, 필드 이름에서 F를 뺀것을 이름으로 씀다.
속성 이름은 명사로 해야 함다. (속성은 데이터를 뜻하며, 메소드는 동작을 뜻함다.)
배열 속성 이름은 복수로 함다. 일반 속성은 단수로 함다.
TCustome : class(TObject);
private
FUserName : string;
FUsers : TStringList;
protected
function GetUserName : string;
procedure SetUserName(AName : string);
function GetUsers: TStringList;
procedure SetUsers(AUsers : TStringList);
public
property UserName: string read GetUserName write SetUserName;
property Users: TStringList read GetUsers write SetUsers;

end;

(ps) write 조작 메소드는 최소한으로 작은 코드로 만드는 것이 좋다.

IV. 파일
1. 폼파일
폼 파일은 폼의 용도를 나타내는 단어 뒤에 Frm을 붙인 이름을 사용함다. 예를 들어 About 폼의 파일 이름은 AboutFrm.pas, 메인폼의 파일 이름은 MainFrm.pas 이 됨다.

2. 데이터모듈
데이터 모듈 파일은 데이터 모듈의 용도를 나타내는 단어 뒤에 DM을 붙인 이름을 사용함다. 예를 들어, 고객 데이터 모듈 파일의 이름은 CustomersDM.pas 로 함다.

V. 컴포넌트
모든 컴포넌트는 자신의 목적에 맞는 이름을 가져야 함다. 델파이가 지정한 기본 이름(예를 들면, Edit1)을 그대로 사용해서는 안됨다. 컴포넌트 이름에는 자신의 형을 뜻하는 소문자 접두어를 붙임다. 그 이유는 Object Inspector나 Code Explorer에서 알파뱃 순서로 나열된 컴포넌트를 찾기 쉽게 하기 위해서 이다.

다음이 델파이 5 의 표준 컴포넌트의 이름으로 사용하는 접두어이다.


Standard 탭

fms Frames
mm TMainMenu
pm TPopupMenu
mmi TMainMenuItem
pmi TPopupMenuItem
lbl TLabel
edt TEdit
mem TMemo
btn TButton
cb TCheckBox
rb TRadioButton
lb TListBox
cb TComboBox
scb TScrollBar
gb TGroupBox
rg TRadioGroup
pnl TPanel
al TActionList


Additional 탭

bbtn TbitBtn
sb TSpeedButton
me TMaskEdit
sg TStringGrid
dg TDrawGrid
img TImage
shp TShape
bvl TBevel
sbx TScrollBox
clb TCheckListbox
spl TSplitter
stx TStaticText
cb TControlBar
aet TApplicationEvent
cht TChart


Win32 탭
tbc TTabControl
pgc TPageControl
il TImageList
re TRichEdit
tbr TTrackBar
prb TProgressBar
ud TUpDown
hk THotKey
ani TAnimate
dtp TDateTimePicker
tv TTreeView
lv TListView
hdr THeaderControl
stb TStatusBar
tlb TToolBar
clb TCoolBar
psr TpageScroller



System 탭
tm TTimer
pb TPaintBox
mp TMediaPlayer
olec TOleContainer
ddcc TDDEClientConv
ddci TDDEClientItem
ddsc TDDEServerConv
ddsi TDDEServerItem



Internet Express 탭
xlb TXMLBroker
mppd TMidasPageProducer


Fastnet 탭
nmdt TNMDayTime
nec TNMEcho
nf TNMFinger
nftp TNMFtp
nhttp TNMHttp
nMsg TNMMsg
nmsg TNMMSGServ
nntp TNMNNTP
npop TNMPop3
nuup TNMUUProcessor
smtp TNMSMTP
nst TNMStrm
nsts TNMStrmServ
ntm TNMTime
nudp TNMUdp
psk TPowerSock
ngs TNMGeneralServer
html THtml
url TNMUrl
sml TsimpleMail

Internet 탭

csk TClientSocket
ssk TServerSocket
wbd TWebDispatcher
pp TPageProducer
tp TQueryTableProducer
dstp TDataSetTableProducer
dspp TDataSetPageProducer
wbs TWebBrowser

Data Access 탭

ds TDataSource
tbl TTable
qry TQuery
sp TStoredProc
db TDataBase
ssn TSession
bm TBatchMove
usql TUpdateSQL
ntdt TNestedTable


Data Controls 탭

dbg TDBGrid
dbn TDBNavigator
dbt TDBText
dbe TDBEdit
dbm TDBMemo
dbi TDBImage
dblb TDBListBox
dbcb TDBComboBox
dbch TDBCheckBox

Decision Cube 탭

dcb TDecisionCube
dcq TDecisionQuery
dcs TDecisionSource
dcp TDecisionPivot
dcg TDecisionGrid
dcgr TDecisionGraph


QReport 탭
qr TQuickReport
qrsd TQRSubDetail
qrb TQRBand
qrcb TQRChildBand
qrg TQRGroup
qrl TQRLabel
qrt TQRText
qre TQRExpr
qrs TQRSysData
qrm TQRMemo
qrrt TQRRichText
qrdr TQRDBRichText
qrsh TQRShape
qri TQRImage
qrdi TQRDBMImage
qrcr TQRCompositeReport
qrp TQRPreview
qrtf TQRTextFilter
qrcf TQRCSVFilter
qrhf TQRHTMLFilter
qrch TQRChart


Dialogs 탭

대화상자 컴포넌트들은 실제 폼을 컴포넌트 형태로 만든 것이다. 따라서, 대화상자 컴포넌트들은 폼의 명명 규칙과 비슷한 규칙을 따른다. 컴포넌트형의 이름은 이미 정의되어 있으며, 인스턴스 이름은 그냥 ‘;’을 뺀 것, 즉 델파이가 붙인 기본 이름 끝의 숫자를 뺀 것을 사용하면 된다. 다음의 예를 참고하기 바란다.

TOpenDialog OpenDialog
TSaveDialog SaveDialog
TOpenPictureDialog OpenPictureDialog
TSavePictureDialog SavePictureDialog
TFontDialog FontDialog
TColorDialog ColorDialog
TPrintDialog PrintDialog
TPrintSetupDialog PrinterSetupDialog
TFindDialog FindDialog
TReplaceDialog ReplaceDialog


Win3.1 탭

dbll TDBLookupList
dblc TDBLookupCombo
ts TTabSet
ol TOutline
tnb TTabbedNoteBook
nb TNoteBook
hdr THeader
flb TFileListBox
dlb TDirectoryListBox
dcb TDriveComboBox
fcb TfilterComboBox

Samples 탭

gg TGauge
cg TColorGrid
spb TSpinButton
spe TSpinEdit
dol TDirectoryOutline
cal TCalendar
ibea TIBEventAlerter

ActiveX 탭

cfx TChartFX
vsp TVSSpell
f1b TF1Book
vtc TVTChart
grp Tgraph


Midas 탭

cds TClientDataSet
dcom TDCOMConnection
sck TSocketConnection
dspv TDataSetProvider
sobk TSimpleObjectBroker
wctn TWebConnection
cctn TcorbaConnection

ADO 탭

adcn TADOConnection
adcm TADOCommand
adds TADODataSet
adtb TADOTable
adqr TADOQuery
adst TADOStoredproc
rdcn TRDSConnection

Interbase 탭

ibds TIBDataSource
ibtb TIBTable
ibqr TIBQuery
ibsp TIBStoredProc
ibdb TIBDatabase
ibts TIBTransaction
ibus TIBUpdateSQL
ibdst TIBDataSet
ibsl TIBSQL
ibsbi TIBDatabaseInfo
ibsmt TIBSqlMonitor
ibets TIBEvents

안녕하세여..타락임다...^^

UI와 프로그램의 전반적인 외양을 설계하는 것이 중요합니다.

그러나 개발환경에선 애플리케이션의 실제 구현 코드, 즉 백 엔드(back-end)를 작성하는게 더 많은 시간을 잡아먹곤 합니다.

물론 직관적이고 비주얼한 UI는 프로그램에 있어서 가장 중요한 부분이긴 하지만, 만약 통신 프로그램에서 데이터를 보내는 부분이 없다면 어떻게 할겁니까?

"기본이 되어야 하느니라!"는 사람에게 뿐만 아니라, 어플리케이션에도 적용되는 말입니다.

명명법이라는 규약은 없지만, 오랜 프로그램 개발기간에 걸쳐, 효율적이고 이해하기 쉬고, 개발기간을 줄여주는 명명법들이 개발되어 왔습니다. 윈도우 어플이 점점 커짐에 따라 여러사람이 공동 작업 함에 따라 공통의 명명법의 더욱 더 중요합니다..

제가 쓰는 명명법을 설명할께여..^^

변수 선언을 할때 변수타입을 변수 앞에 붙입니다.. 그러면 코드익스플로 나

Ctrl-J 치면 나오는 창에서 찾기 편합니다.

string 타입 : strBuf, strTemp, strName, strPath 등등..

boolean 타입 : bRun, bDebug, bSet etc

정수 타입 : nAge, nNumber, nTemp etc

array 타입 : szBuf, szTemp, szName etc ( array [0..100] of char 등으로 설정한거 )

Char 타입 : cTemp, cBuf etc

Set 타입 : 변수를 복수로 함다.

ex) Week = (Sun, Mon, Tue, Wed, Fri, Sat);
Weeks = set of Week;

데이터 저장용 레코드나 클래스의 변수는 m(Member)를 붙임다.
ex)
Person = record
begin
mHeight : integer;
mWeight : integer;
mAge : integer;
mName : string;
mSex : integer;
end;

Person = class
begin
mHeight : integer;
mWeight : integer;
mAge : integer;
mName : string;
mSex : integer;
end;

포인터 형은 변수 앞에 p를 더 붙입니다...

가령.. pcChar, pnNumber etc


함수명의 경우엔 간단한 영작을 합니다..

동사가 제일 앞이고, 그 다음에 간단한 전치사, 마지막이 명사져..

일단 리턴값이 부울린인 경우엔 Is 로 시작합니다..

예) 루프 안에 있는지 리턴하는 함수.. : function IsLoop: Boolean;
또는 function IsInLoop : Boolean;


예) 루프가 돌고 있는지 리턴하는 함수 : funciton IsRunLoop: Boolean;

기타 함수명은 Get 이나 Set 으로 시작하져..

예) function GetSum: integer;
function SetAge(AAge : integer): Boolean <-- 처리 되었는가 리턴하는게 좋져..

특별히 VCl 함수 또는 API 함수 와 비슷한 함수를 만들어 쓸때는 식별자를 붙임다..
(헷갈리기 땜시.--;; 저는 OK로 시작함다..)

function OKTrim(ASrc : string) : string;
function OKIntToStr(ANumber, ASize : integer) : string; // 자리수만큼 0을 붙이는 함수
function OKRound(ANumber : integer): integer; // 일반적으로 쓰는 반올림을 하고 시플때..

함수가 많아질때는 함수 이름에 틀별히 신경을 더 쓰져..

GetNameFromRecord(), SetAgeWithName().. etc

좋은 것 같네요.
특히 이벤트 함수와 유저가 만든 함수의 구별이
잘안됩니다. 전 Apl이라는 접두어를 사용합니다.
위의 분은 OK 를 쓰시는 군요.

또 함수가 일정 부분이 모이면 접두어를 사용합니다.

utlGetApplicationName 과 같지요.
요즘 win32api는 접두어를 사용하지요.
reg계열은 레지스트리 관련 펑션이지요.

아마도 os/2의 api를 보시면 비슷하게 돌아갑니다.
뭐 이런 식죠.

WinCreateWindow 등과 같이 3자를 씁니다.

그리고 User Class인경우에는 UClassName과 같이
유저 클래스를 나타내시면 좋습니다.

MFC는 Class 접두어가 CClassName이고 볼랜드는 TClassName
이죠 IBM 프로덕트는 IClassName입니다.

즉 유저가 만드는 모든 클래스, 펑션은 확연하게 구분이
되도록 코딩하시는 것이 자동화된 비쥬얼 툴류에서
사용하시기 좋습니다.
신고
Posted by 나비 나비:D

BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
----------------------------- (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

글 보관함

달력

«   2017/10   »
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 31        
Total : 882,507
Today : 3 Yesterday : 218