4. 좋은 이름에 대한 고려 사항
표현하고 있는 것을 완벽하게 설명
서술문 형식
미국 올림픽 대표팀에 있는 선수의 수
numberOfPeopleOnTheUsOlympicTeam
운동장의 좌석 수
numberOfSeatsInTheStadium
올림픽에서 각 나라의 대표팀에서 획득한 최고 점
수
maximumNumberOfPointsInModernOlympics
5. 좋은 이름에 대한 고려 사항
표현하고 있는 것을 완벽하게 설명
서술문 형식
이름만 읽어도 변수의 역할을 알 수 있다 .
너무 길어서 실용적이지 않다 .
7. 좋은 이름에 대한 고려 사항
최적의 이름 길이
미국 올림픽 대표팀에 있는 선수의 수
numberOfPeopleOnTheUsOlympicTeam
- numTeamMembers
- teamMemberCount
8. 좋은 이름에 대한 고려 사항
최적의 이름 길이
운동장의 좌석 수
numberOfSeatsInTheStadium
- numSeatsInStadium
- seatCount
9. 좋은 이름에 대한 고려 사항
최적의 이름 길이
올림픽에서 각 나라의 대표팀에서 획득한 최고 점수
maximumNumberOfPointsInModernOlympics
- teamPointsMax
- pointsRecord
10. 좋은 이름에 대한 고려 사항
문제 지향성
변수의 이름이 “어떻게” 가 아닌 “무엇“ 을 표현
직원의 데이터에 대한 레코드
inputRec, employeeData
프린터의 상태를 가리키는 비트필드
bitFlag, printerReady
11. 좋은 이름에 대한 고려 사항
범위가 변수 명에 미치는 효과
긴 이름은 전역변수나 자주 사용되지 않는 변수
짧은 이름은 지역 변수나 루프 변수
for( int i = 0; i < 10; ++i )
12. 좋은 이름에 대한 고려 사항
전역 공간의 이름
네임 스페이스
- UserInterfaceSubSystem::Employee
- DatabaseSubSystem::Employee
접두사
-uiEmployee
-dbEmployee
13. 좋은 이름에 대한 고려 사항
변수 이름에서의 한정자
Total, Sum, Average, Max, Min, Record, String,
Pointer
이름의 가장 끝에 입력할 것
14. 좋은 이름에 대한 고려 사항
변수 이름에서의 한정자
revenueTotal, totalRevenue
revenueAverage, averageRevenue
앞부분은 가장 먼저 읽히는 부분이므로
일관성은 가독성을 향상시키며 유지보수를 쉽게 함
같은 프로그램상에서의 사용을 피할 수 있음 .
Revenue : 수
익
15. 좋은 이름에 대한 고려 사항
정확한 반의어
begin - end
source - target
source - destination
locked - unlocked
min - max
old - new
opened - closed
17. 데이터의 특정 타입에 대한 명
명
루프 인덱스의 명명
for ( int i = firstItem; i < lastItem; ++i )
{
data[i] = 0;
}
루프에서만 변수를 사용
18. 데이터의 특정 타입에 대한 명
명
루프 인덱스의 명명
recordCount = 0;
while ( moreScores() )
{
score[ recordCount ] = GetNextScore();
recordCount++;
}
// use recordCount..
루프 변수를 외부에서도 사용
19. 데이터의 특정 타입에 대한 명
명
루프 인덱스의 명명
for ( teamIndex = 0; teamIndex < teamCount; ++teamIndex )
{
for ( eventIndex = 0; eventIndex < eventCount[ teamIndex ]; +
+eventIndex )
{
score[ teamIndex ][ eventIndex ] = 0;
}
}
중첩된 루프
20. 데이터의 특정 타입에 대한 명
명
상태 변수의 명명
if ( flag ) …
if ( statusFlag &
0x0F ) …
if ( printFlag == 16 )
…
if ( computeFlag == 0 )
…
if ( dataReady ) …
if ( characterType &
PRINTABLE_CHAR ) …
if ( reportType == ReportType_Annual
) …
if ( recalcNeeded == True ) …
flag 보다 좋은 이름을 찾
자
21. 데이터의 특정 타입에 대한 명
명
임시 변수의 명명
temp = sqrt ( b^2 – 4*a*c );
root[0] = ( -b + temp ) / (2 * a )
root[1] = ( -b - temp ) / (2 * a )
임시 변수는 실질적인 목적에 대한 확신이 없을 때 사용된다 .
discriminant = sqrt ( b^2 – 4*a*c );
root[0] = ( -b + temp ) / (2 * a )
root[1] = ( -b - temp ) / (2 * a )
discriminant : 판
별식
22. 데이터의 특정 타입에 대한 명
명
불린 변수의 명명
done 연산 수행 여부
error 오류 발생 여부
found 값 검색시 발견 여부
success / ok 연산의 성공 여부
관습적인 이름 사용
23. 데이터의 특정 타입에 대한 명
명
불린 변수의 명명
긍정적인 이름 사용
notFound
notDone
notSuccessful
if ( notFound == false )
24. 데이터의 특정 타입에 대한 명
명
불린 변수의 명명
참이나 거짓의 의미를 함축하는 이름을 사용
status
sourceFile
error / statusOK
sourceFileAvailable / sourceFileFound
25. 데이터의 특정 타입에 대한 명
명
열거 형의 명명
enum Color
{
Color_Red,
Color_Green,
Color_Blue
};
int col = Color_Red;
struct Color
{
enum Type
{
Red,
Green,
Blue
};
};
int col = Color::Red;
접두사 사용
26. 추상적인 대상을 나타내도록
const int FIVE = 5;
const int BAKERS_DOZEN
더
즌 ( 12 개 )
데이터의 특정 타입에 대한 명
명
상수의 명명
const int CYCLES_NEEDED= 5;
const int DONUTS_MAX
28. 명명 규약의 효과
코드의 중요한 특성들에 집중 가능
enum Color
{
Color_Red,
Color_Green,
Color_Blue
};
int col = Color_Red;
29. 명명 규약의 효과
프로젝트에 적응하기 쉽다
done 연산 수행 여부
error 오류 발생 여부
found 값 검색시 발견 여부
success / ok 연산의 성공 여부
30. 명명 규약의 효과
이름이 늘어나는 것을 줄여준다
totalRevenue, revenueTotal
pointTotal, totalPoints
31. 명명 규약의 효과
언어의 약점을 보완한다 .
네임 스페이스
- UserInterfaceSubSystem::Employee
- DatabaseSubSystem::Employee
접두사
-uiEmployee
-dbEmployee
32. 명명 규약의 효과
변수들의 관계를 강조한다
address
phone
name
employeeAddress
employeePhone
employeeName
33. 여러 명의 프로그래머가 함께 작업할 때
유지 보수로 인해 인수 인계를 해야 할 때
조직 내의 다른 개발자가 내가 작성한 코드를 검토해야 할 때
프로그램의 규모가 너무 커서 부분적인 생각을 해야 할 때
프로그램의 수명이 길어서 몇 주 ~ 몇 달간 건드리지 않을 때
자주 쓰이는 특이한 용어 , 표준 용어 or 약어 가 필요할 때
명명 규약의 효과
언제 명명 규약이 필요한가 ?
34. 의미 있는 이름을 사용한다 .
total, sum 등은 뒤에 붙이며 if 문은 괄호를 한칸 …
명명 규약의 효과
형식화의 정도
프로그램의 규모
작업자의 수
프로그램의 예상 수명
36. 비형식적인 명명 규약
변수와 루틴의 이름
다른 표기법을 사용
int variableName; ( camel case )
void RoutingName(); ( pascal case )
37. 비형식적인 명명 규약
클래스와 객체
문장 장점 단점
LongerWidget longerWidget; 무난하다 . 대소문자 구분 안되면 에러
LONGERWIDGET longerWidget;
타입과 변수를 명확히 구
분
대소문자 구분 안되면 에러
t_LongerWidget LongerWidget 무난하다 . 못생김
LongerWidget aLongerWidget; 무난하다 . 모든 객체의 이름이 변경됨
LongerWidget
fullEmployeeWidget
읽기 쉬워진다 . 작명에 시간이 걸린다 .
38. 비형식적인 명명 규약
종류 식별 방법 예시
전역 변수 g_ g_RunningTotal
멤버 변수 m_ m_Name
형 선언 t_ t_Color, t_Menu
명명된 상수 c_ c_LinesPerPageMax
열거 형의 요소 Color_, Planet_ Color_Blue, Planet_Earth
입력용 매개 변수 const constPlayer, constMax
긴 변수의 이름 _ Gymnastics_point_total
39. 비형식적인 명명 규약
혼합 언어 환경
하나의 언어를 기준으로 일관성 있게 사용
JAVA
public int getCount();
C++
public int GetCount();
48. 읽기 쉬운 짧은 이름
짧게 만드는 방법들
표준 축약어를 사용 College coll
불필요한 모음을 제거 Computer cmptr
관사 (and, or, the) 를 제거 TheJesus jesus
첫 번째 또는 처음의 몇 단어를
사용
Implement imple
특정 부분을 잘라서 사용 Limit lim
첫 번째와 마지막 문자를 사용 Point pt
가장 중요한 단어를 세 개 까지
사용
Count cnt
쓸모없는 접미사 제거 Played play
음절의 뚜렷한 소리를 유지 Highlight hilite
변수의 의미를 유지 Number num
49. 읽기 쉬운 짧은 이름
한 문자만 없애기 X
줄이는 한 문자보다 사라지는 가독성이 더 큼
June – Jun
July – Jul
50. 읽기 쉬운 짧은 이름
일관성 있게 축약
Computer – com, cmptr, comp …
YourCmptr
MyComputer--------------- X
MyCmptr O
51. 읽기 쉬운 짧은 이름
발음이 가능하게 축약
전화 테스트
XPstn -> xPos
ndsCmptg -> needsComp
52. 읽기 쉬운 짧은 이름
용어 사전을 사용
fired ( 해고 )
full revenue disbursal ( 전체 수익 , 지출 )
▽
frd
53. 읽기 쉬운 짧은 이름
용어 사전을 사용
fired
▽
dismissed
▽
dsm
full revenue disbursal
▽
complete revenue disbursal
▽
crd
54. /
*---------------------------------------------------------------
--------------
// Translation Table
//
// Variable Meaning
// --------- ----------
// XPOS x-Coordinate Position ( in meters )
// YPOS y-Coordinate Position ( in meters )
// NDSCMP Needs Computing ( =0 if no computation is
needed,
// =1 if computation is needed )
----------------------------------------------------------------
-------------*/
읽기 쉬운 짧은 이름
코드 상단에 축약어를 문서화
65. 피해야 할 이름의 종류
잘못 표기되는 단어
Korean English Wrong..
독립된 Independent Independence
오르다 Ascend Acsend
달력 Calendar Calender
영수증 Receipt Reciept
대체되다 Superseded Superseed
결근 Absence absense
66. 피해야 할 이름의 종류
대소문자로 차별된 이름
fired frd
final review duty FRD
full revenue disbursal Frd
67. 피해야 할 이름의 종류
여러개의 언어
Color, Colour
Check, Cheque
68. 피해야 할 이름의 종류
표준 형 , 변수 , 루틴의 이름
[PL/1 코드 ]
if if = then then
tabl then = else;
else else = if;
69. 피해야 할 이름의 종류
변수와 관련이 없는 이름
Margaret( 여자 친구 이름 ), pookie( 곰 캐릭터 이름
)…
girlFriend, favoritBear…
70. 피해야 할 이름의 종류
읽기 어려운 이름
eyeChartl eyeChart1 eyeCharti
TTLCONFUSION TTLCONFUSlON TTLC0NFUSION
hard2Read hardZRead hard2Read
GRANDTOTAL GRANDTOTAL 6RANDTOTAL
ttl5 ttlS ttiS