SlideShare a Scribd company logo
변수 이름의 효과
Code Complete 2
Chapter 11
목차
1. 좋은 이름에 대한 고려 사항
2. 데이터의 특정 타입에 대한 명명
3. 명명 규약의 효과
4. 비형식적인 명명 규약
5. 표준화된 접두사들
6. 읽기 쉬운 짧은 이름
7. 피해야 할 이름의 종류
1. 좋은 이름에 대한 고려 사항
좋은 이름에 대한 고려 사항
표현하고 있는 것을 완벽하게 설명
서술문 형식
미국 올림픽 대표팀에 있는 선수의 수
numberOfPeopleOnTheUsOlympicTeam
운동장의 좌석 수
numberOfSeatsInTheStadium
올림픽에서 각 나라의 대표팀에서 획득한 최고 점
수
maximumNumberOfPointsInModernOlympics
좋은 이름에 대한 고려 사항
표현하고 있는 것을 완벽하게 설명
서술문 형식
이름만 읽어도 변수의 역할을 알 수 있다 .
너무 길어서 실용적이지 않다 .
좋은 이름에 대한 고려 사항
최적의 이름 길이
9 ~ 16디버깅 하기 쉽다 .
좋은 이름에 대한 고려 사항
최적의 이름 길이
미국 올림픽 대표팀에 있는 선수의 수
numberOfPeopleOnTheUsOlympicTeam
- numTeamMembers
- teamMemberCount
좋은 이름에 대한 고려 사항
최적의 이름 길이
운동장의 좌석 수
numberOfSeatsInTheStadium
- numSeatsInStadium
- seatCount
좋은 이름에 대한 고려 사항
최적의 이름 길이
올림픽에서 각 나라의 대표팀에서 획득한 최고 점수
maximumNumberOfPointsInModernOlympics
- teamPointsMax
- pointsRecord
좋은 이름에 대한 고려 사항
문제 지향성
변수의 이름이 “어떻게” 가 아닌 “무엇“ 을 표현
직원의 데이터에 대한 레코드
inputRec, employeeData
프린터의 상태를 가리키는 비트필드
bitFlag, printerReady
좋은 이름에 대한 고려 사항
범위가 변수 명에 미치는 효과
긴 이름은 전역변수나 자주 사용되지 않는 변수
짧은 이름은 지역 변수나 루프 변수
for( int i = 0; i < 10; ++i )
좋은 이름에 대한 고려 사항
전역 공간의 이름
네임 스페이스
- UserInterfaceSubSystem::Employee
- DatabaseSubSystem::Employee
접두사
-uiEmployee
-dbEmployee
좋은 이름에 대한 고려 사항
변수 이름에서의 한정자
Total, Sum, Average, Max, Min, Record, String,
Pointer
이름의 가장 끝에 입력할 것
좋은 이름에 대한 고려 사항
변수 이름에서의 한정자
revenueTotal, totalRevenue
revenueAverage, averageRevenue
앞부분은 가장 먼저 읽히는 부분이므로
일관성은 가독성을 향상시키며 유지보수를 쉽게 함
같은 프로그램상에서의 사용을 피할 수 있음 .
Revenue : 수
익
좋은 이름에 대한 고려 사항
정확한 반의어
begin - end
source - target
source - destination
locked - unlocked
min - max
old - new
opened - closed
2. 데이터의 특정 타입에 대한 명명
데이터의 특정 타입에 대한 명
명
루프 인덱스의 명명
for ( int i = firstItem; i < lastItem; ++i )
{
data[i] = 0;
}
루프에서만 변수를 사용
데이터의 특정 타입에 대한 명
명
루프 인덱스의 명명
recordCount = 0;
while ( moreScores() )
{
score[ recordCount ] = GetNextScore();
recordCount++;
}
// use recordCount..
루프 변수를 외부에서도 사용
데이터의 특정 타입에 대한 명
명
루프 인덱스의 명명
for ( teamIndex = 0; teamIndex < teamCount; ++teamIndex )
{
for ( eventIndex = 0; eventIndex < eventCount[ teamIndex ]; +
+eventIndex )
{
score[ teamIndex ][ eventIndex ] = 0;
}
}
중첩된 루프
데이터의 특정 타입에 대한 명
명
상태 변수의 명명
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 보다 좋은 이름을 찾
자
데이터의 특정 타입에 대한 명
명
임시 변수의 명명
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 : 판
별식
데이터의 특정 타입에 대한 명
명
불린 변수의 명명
done 연산 수행 여부
error 오류 발생 여부
found 값 검색시 발견 여부
success / ok 연산의 성공 여부
관습적인 이름 사용
데이터의 특정 타입에 대한 명
명
불린 변수의 명명
긍정적인 이름 사용
notFound
notDone
notSuccessful
if ( notFound == false )
데이터의 특정 타입에 대한 명
명
불린 변수의 명명
참이나 거짓의 의미를 함축하는 이름을 사용
status
sourceFile
error / statusOK
sourceFileAvailable / sourceFileFound
데이터의 특정 타입에 대한 명
명
열거 형의 명명
enum Color
{
Color_Red,
Color_Green,
Color_Blue
};
int col = Color_Red;
struct Color
{
enum Type
{
Red,
Green,
Blue
};
};
int col = Color::Red;
접두사 사용
추상적인 대상을 나타내도록
const int FIVE = 5;
const int BAKERS_DOZEN
더
즌 ( 12 개 )
데이터의 특정 타입에 대한 명
명
상수의 명명
const int CYCLES_NEEDED= 5;
const int DONUTS_MAX
3. 명명 규약의 효과
명명 규약의 효과
코드의 중요한 특성들에 집중 가능
enum Color
{
Color_Red,
Color_Green,
Color_Blue
};
int col = Color_Red;
명명 규약의 효과
프로젝트에 적응하기 쉽다
done 연산 수행 여부
error 오류 발생 여부
found 값 검색시 발견 여부
success / ok 연산의 성공 여부
명명 규약의 효과
이름이 늘어나는 것을 줄여준다
totalRevenue, revenueTotal
pointTotal, totalPoints
명명 규약의 효과
언어의 약점을 보완한다 .
네임 스페이스
- UserInterfaceSubSystem::Employee
- DatabaseSubSystem::Employee
접두사
-uiEmployee
-dbEmployee
명명 규약의 효과
변수들의 관계를 강조한다
address
phone
name
employeeAddress
employeePhone
employeeName
여러 명의 프로그래머가 함께 작업할 때
유지 보수로 인해 인수 인계를 해야 할 때
조직 내의 다른 개발자가 내가 작성한 코드를 검토해야 할 때
프로그램의 규모가 너무 커서 부분적인 생각을 해야 할 때
프로그램의 수명이 길어서 몇 주 ~ 몇 달간 건드리지 않을 때
자주 쓰이는 특이한 용어 , 표준 용어 or 약어 가 필요할 때
명명 규약의 효과
언제 명명 규약이 필요한가 ?
의미 있는 이름을 사용한다 .
total, sum 등은 뒤에 붙이며 if 문은 괄호를 한칸 …
명명 규약의 효과
형식화의 정도
프로그램의 규모
작업자의 수
프로그램의 예상 수명
4. 비형식적인 명명 규약
비형식적인 명명 규약
변수와 루틴의 이름
다른 표기법을 사용
int variableName; ( camel case )
void RoutingName(); ( pascal case )
비형식적인 명명 규약
클래스와 객체
문장 장점 단점
LongerWidget longerWidget; 무난하다 . 대소문자 구분 안되면 에러
LONGERWIDGET longerWidget;
타입과 변수를 명확히 구
분
대소문자 구분 안되면 에러
t_LongerWidget LongerWidget 무난하다 . 못생김
LongerWidget aLongerWidget; 무난하다 . 모든 객체의 이름이 변경됨
LongerWidget
fullEmployeeWidget
읽기 쉬워진다 . 작명에 시간이 걸린다 .
비형식적인 명명 규약
종류 식별 방법 예시
전역 변수 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
비형식적인 명명 규약
혼합 언어 환경
하나의 언어를 기준으로 일관성 있게 사용
JAVA
public int getCount();
C++
public int GetCount();
5. 표준화된 접두사들
표준화된 접두사들
사용자 정의 축약형
의미 축약어 예시
Windows wn wnMain
Document doc docActive
Paragraph pa firstPaActiveDocument
표준화된 접두사들
의미적 접두사
의미적 접두사 의미
c 카운트
first 배열의 첫 번째 요소
g 전역 변수
i 인덱스
last 배열의 마지막 요소
p 포인터
표준화된 접두사들
표준화된 접두사의 장점
기억 해야 하는 이름이 적어진다 .
cSleepingProgrammer
gWnMain
표준화된 접두사들
표준화된 접두사의 장점
간결한 이름을 만든다 .
totalParagraphs – cpa
indexParagraphs – ipa
표준화된 접두사들
표준화된 접두사의 장점
추상 데이터 형의 타입을 검사한다
paReformat = docReformat
pa / doc – 서로 다른 UDT
표준화된 접두사들
단점
변수 작명을 소홀히 하게된다 .
단락 배열의 인덱스
- ipaActiveDocument
- ipa
6. 읽기 쉬운 짧은 이름
읽기 쉬운 짧은 이름
짧게 만드는 방법들
표준 축약어를 사용 College coll
불필요한 모음을 제거 Computer cmptr
관사 (and, or, the) 를 제거 TheJesus jesus
첫 번째 또는 처음의 몇 단어를
사용
Implement imple
특정 부분을 잘라서 사용 Limit lim
첫 번째와 마지막 문자를 사용 Point pt
가장 중요한 단어를 세 개 까지
사용
Count cnt
쓸모없는 접미사 제거 Played play
음절의 뚜렷한 소리를 유지 Highlight hilite
변수의 의미를 유지 Number num
읽기 쉬운 짧은 이름
한 문자만 없애기 X
줄이는 한 문자보다 사라지는 가독성이 더 큼
June – Jun
July – Jul
읽기 쉬운 짧은 이름
일관성 있게 축약
Computer – com, cmptr, comp …
YourCmptr
MyComputer--------------- X
MyCmptr O
읽기 쉬운 짧은 이름
발음이 가능하게 축약
전화 테스트
XPstn -> xPos
ndsCmptg -> needsComp
읽기 쉬운 짧은 이름
용어 사전을 사용
fired ( 해고 )
full revenue disbursal ( 전체 수익 , 지출 )
▽
frd
읽기 쉬운 짧은 이름
용어 사전을 사용
fired
▽
dismissed
▽
dsm
full revenue disbursal
▽
complete revenue disbursal
▽
crd
/
*---------------------------------------------------------------
--------------
// 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 )
----------------------------------------------------------------
-------------*/
읽기 쉬운 짧은 이름
코드 상단에 축약어를 문서화
읽기 쉬운 짧은 이름
표준 축약어 문서를 사용
읽기 쉬운 짧은 이름
장점
축약할 가치가 있는 단어만 축약된다
중복된 축약어가 사용될 가능성을 없앤다
읽는 사람의 이해를 돕는다
읽기 쉬운 짧은 이름
단점
초기 작성 시간에 많이 불편하다 .
6. 피해야 할 이름의 종류
피해야 할 이름의 종류
오해의 소지가 있는 경우
Fig and Almond Season - FALSE
피해야 할 이름의 종류
유사한 의미를 갖는 이름
fileNumber / fileIndex
input / inputValue
numRecords / recordNum
clientRecs / clientRepsX
clientRecords / clientReports O
-------------------------
피해야 할 이름의 종류
다른 의미 , 유사한 이름
Goal donor / Gold Owner
피해야 할 이름의 종류
비슷한 발음의 이름
total1, total2
▽
total[0], total[1]
exc) 66 번 도로 , 405 번 고속도로
피해야 할 이름의 종류
숫자가 들어간 이름
Highlight -> hilite
Highhlite ?
Hilight ?
Hilit ?
Hai-a-lai-t ?
피해야 할 이름의 종류
철자가 틀린 단어
피해야 할 이름의 종류
잘못 표기되는 단어
Korean English Wrong..
독립된 Independent Independence
오르다 Ascend Acsend
달력 Calendar Calender
영수증 Receipt Reciept
대체되다 Superseded Superseed
결근 Absence absense
피해야 할 이름의 종류
대소문자로 차별된 이름
fired frd
final review duty FRD
full revenue disbursal Frd
피해야 할 이름의 종류
여러개의 언어
Color, Colour
Check, Cheque
피해야 할 이름의 종류
표준 형 , 변수 , 루틴의 이름
[PL/1 코드 ]
if if = then then
tabl then = else;
else else = if;
피해야 할 이름의 종류
변수와 관련이 없는 이름
Margaret( 여자 친구 이름 ), pookie( 곰 캐릭터 이름
)…
girlFriend, favoritBear…
피해야 할 이름의 종류
읽기 어려운 이름
eyeChartl eyeChart1 eyeCharti
TTLCONFUSION TTLCONFUSlON TTLC0NFUSION
hard2Read hardZRead hard2Read
GRANDTOTAL GRANDTOTAL 6RANDTOTAL
ttl5 ttlS ttiS

More Related Content

What's hot

문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의Kwangyoun Jung
 
포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1Hoyoung Jung
 
포인터의 기초(1)
포인터의 기초(1)포인터의 기초(1)
포인터의 기초(1)Hoyoung Jung
 
정규표현식의 이해와 활용
정규표현식의 이해와 활용정규표현식의 이해와 활용
정규표현식의 이해와 활용오석 한
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터Hoyoung Jung
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘GDGCampusKorea
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용유석 남
 
6장 표현식 및 문장
6장 표현식 및 문장6장 표현식 및 문장
6장 표현식 및 문장재정 이
 
포인터와 배열
포인터와 배열포인터와 배열
포인터와 배열Kim YoSep
 
12장 함수 조합 다시 보기4
12장 함수 조합 다시 보기412장 함수 조합 다시 보기4
12장 함수 조합 다시 보기4cosmosyc
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)Tae Young Lee
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function건희 김
 

What's hot (20)

Regex
RegexRegex
Regex
 
문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의문과생 대상 파이썬을 활용한 데이터 분석 강의
문과생 대상 파이썬을 활용한 데이터 분석 강의
 
포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1포인터의기초 (2) - 포인터 사용하기1
포인터의기초 (2) - 포인터 사용하기1
 
포인터의 기초(1)
포인터의 기초(1)포인터의 기초(1)
포인터의 기초(1)
 
Cp2 w5
Cp2 w5Cp2 w5
Cp2 w5
 
3.포인터
3.포인터3.포인터
3.포인터
 
정규표현식의 이해와 활용
정규표현식의 이해와 활용정규표현식의 이해와 활용
정규표현식의 이해와 활용
 
Study1
Study1Study1
Study1
 
4. 함수포인터
4. 함수포인터4. 함수포인터
4. 함수포인터
 
What’s new in c++11
What’s new in c++11What’s new in c++11
What’s new in c++11
 
C review
C  reviewC  review
C review
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
 
04장 고급변수 사용
04장 고급변수 사용04장 고급변수 사용
04장 고급변수 사용
 
5주차 스터디
5주차 스터디5주차 스터디
5주차 스터디
 
6장 표현식 및 문장
6장 표현식 및 문장6장 표현식 및 문장
6장 표현식 및 문장
 
포인터와 배열
포인터와 배열포인터와 배열
포인터와 배열
 
12장 함수 조합 다시 보기4
12장 함수 조합 다시 보기412장 함수 조합 다시 보기4
12장 함수 조합 다시 보기4
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function
 
skku cp2 w4
skku cp2 w4skku cp2 w4
skku cp2 w4
 

Similar to 변수 이름의 효과

[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기Chris Ohk
 
Clean code
Clean codeClean code
Clean codebbongcsu
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part oneJi Hun Kim
 
Gpg gems1 1.3
Gpg gems1 1.3Gpg gems1 1.3
Gpg gems1 1.3david nc
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법Daniel Kim
 
03. function in typescript
03. function in typescript03. function in typescript
03. function in typescriptHan JaeYeab
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1happychallenge
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기Jongwook Choi
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선daewon jeong
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체유석 남
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나Astin Choi
 

Similar to 변수 이름의 효과 (20)

6 function
6 function6 function
6 function
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
[TechDays Korea 2015] 녹슨 C++ 코드에 모던 C++로 기름칠하기
 
06장 함수
06장 함수06장 함수
06장 함수
 
Clean code
Clean codeClean code
Clean code
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part one
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
Gpg gems1 1.3
Gpg gems1 1.3Gpg gems1 1.3
Gpg gems1 1.3
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
Working with code
Working with codeWorking with code
Working with code
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법
 
C++11
C++11C++11
C++11
 
03. function in typescript
03. function in typescript03. function in typescript
03. function in typescript
 
HI-ARC PS 101
HI-ARC PS 101HI-ARC PS 101
HI-ARC PS 101
 
R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1R 프로그램의 이해와 활용 v1.1
R 프로그램의 이해와 활용 v1.1
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
나에 첫번째 자바8 람다식 지앤선
나에 첫번째 자바8 람다식   지앤선나에 첫번째 자바8 람다식   지앤선
나에 첫번째 자바8 람다식 지앤선
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체05장 논리적 자료표현: 구조체
05장 논리적 자료표현: 구조체
 
Ai C#세미나
Ai C#세미나Ai C#세미나
Ai C#세미나
 

Recently uploaded

인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일justuser0129
 
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEETSoftwide Security
 
INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintahghwo99
 
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라Jay Park
 
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptxcho9759
 
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외Jay Park
 
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPTpcupcu20831004
 

Recently uploaded (7)

인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
 
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
 
INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
 
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
 
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
 
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
 
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
 

변수 이름의 효과

  • 1. 변수 이름의 효과 Code Complete 2 Chapter 11
  • 2. 목차 1. 좋은 이름에 대한 고려 사항 2. 데이터의 특정 타입에 대한 명명 3. 명명 규약의 효과 4. 비형식적인 명명 규약 5. 표준화된 접두사들 6. 읽기 쉬운 짧은 이름 7. 피해야 할 이름의 종류
  • 3. 1. 좋은 이름에 대한 고려 사항
  • 4. 좋은 이름에 대한 고려 사항 표현하고 있는 것을 완벽하게 설명 서술문 형식 미국 올림픽 대표팀에 있는 선수의 수 numberOfPeopleOnTheUsOlympicTeam 운동장의 좌석 수 numberOfSeatsInTheStadium 올림픽에서 각 나라의 대표팀에서 획득한 최고 점 수 maximumNumberOfPointsInModernOlympics
  • 5. 좋은 이름에 대한 고려 사항 표현하고 있는 것을 완벽하게 설명 서술문 형식 이름만 읽어도 변수의 역할을 알 수 있다 . 너무 길어서 실용적이지 않다 .
  • 6. 좋은 이름에 대한 고려 사항 최적의 이름 길이 9 ~ 16디버깅 하기 쉽다 .
  • 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
  • 16. 2. 데이터의 특정 타입에 대한 명명
  • 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();
  • 41. 표준화된 접두사들 사용자 정의 축약형 의미 축약어 예시 Windows wn wnMain Document doc docActive Paragraph pa firstPaActiveDocument
  • 42. 표준화된 접두사들 의미적 접두사 의미적 접두사 의미 c 카운트 first 배열의 첫 번째 요소 g 전역 변수 i 인덱스 last 배열의 마지막 요소 p 포인터
  • 43. 표준화된 접두사들 표준화된 접두사의 장점 기억 해야 하는 이름이 적어진다 . cSleepingProgrammer gWnMain
  • 44. 표준화된 접두사들 표준화된 접두사의 장점 간결한 이름을 만든다 . totalParagraphs – cpa indexParagraphs – ipa
  • 45. 표준화된 접두사들 표준화된 접두사의 장점 추상 데이터 형의 타입을 검사한다 paReformat = docReformat pa / doc – 서로 다른 UDT
  • 46. 표준화된 접두사들 단점 변수 작명을 소홀히 하게된다 . 단락 배열의 인덱스 - ipaActiveDocument - ipa
  • 47. 6. 읽기 쉬운 짧은 이름
  • 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 ) ---------------------------------------------------------------- -------------*/ 읽기 쉬운 짧은 이름 코드 상단에 축약어를 문서화
  • 55. 읽기 쉬운 짧은 이름 표준 축약어 문서를 사용
  • 56. 읽기 쉬운 짧은 이름 장점 축약할 가치가 있는 단어만 축약된다 중복된 축약어가 사용될 가능성을 없앤다 읽는 사람의 이해를 돕는다
  • 57. 읽기 쉬운 짧은 이름 단점 초기 작성 시간에 많이 불편하다 .
  • 58. 6. 피해야 할 이름의 종류
  • 59. 피해야 할 이름의 종류 오해의 소지가 있는 경우 Fig and Almond Season - FALSE
  • 60. 피해야 할 이름의 종류 유사한 의미를 갖는 이름 fileNumber / fileIndex input / inputValue numRecords / recordNum
  • 61. clientRecs / clientRepsX clientRecords / clientReports O ------------------------- 피해야 할 이름의 종류 다른 의미 , 유사한 이름
  • 62. Goal donor / Gold Owner 피해야 할 이름의 종류 비슷한 발음의 이름
  • 63. total1, total2 ▽ total[0], total[1] exc) 66 번 도로 , 405 번 고속도로 피해야 할 이름의 종류 숫자가 들어간 이름
  • 64. Highlight -> hilite Highhlite ? Hilight ? Hilit ? Hai-a-lai-t ? 피해야 할 이름의 종류 철자가 틀린 단어
  • 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

Editor's Notes

  1. 장점 : 판독하기 쉽다 단점 : 너무 길어서 실용적이지 못하다.
  2. I,j,k 등은 관습적임
  3. 변수명에 의미를 부여
  4. 변수명에 의미를 부여
  5. 심볼릭 상수 사용 Flag는 실제 검사 후 동작코드 봐야 이해 가능.
  6. 2차 방정식에서 근을 구하는 연산
  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. 읽다가 헷갈림
  32. 바뀔 수 있음
  33. 읽다가 헷갈림