[Refactoring] Bool 변수 네이밍 방법
Background
한가지 프로젝트를 지정하여, 리팩토링을 하는 과제가 있는데,
리팩토링중 부울 변수의 작명을 어떻게 해야할지 감이 잘 오지 않았습니다.
그래서 제대로 된 부울함수 작명법을 익히고자 이 포스트를 작성합니다.
요약
Bool 변수 작명을 위해 알아야하는 영문법을 네 가지 케이스들로 정리했습니다.
- is 용법
- 조동사 용법
- has 용법
- 동사원형 용법
IS 용법
is로 시작하는 변수명이 가장 흔한 케이스 입니다.
뒤에 나오는 단어의 특징에 따라 세 가지로 나눌 수 있습니다.
- is + 명사
- is + 현재진행형(~ing)
- is + 형용사
- is + 명사
“(무엇)인가?” 라는 뜻으로 쓰입니다.
func isDescendant(of view: UIView) -> Bool //UIView: "view의 자식인가?"
참고 Check VS Is
- 공통점
- Check와 Is 모두 return 값이
boolean
입니다. - 값의 변경이 없어야합니다. (그저 확인하는 부울함수이기 때문입니다.)
- Check와 Is 모두 return 값이
- 차이점
- Check는 true인가 false인가를 판단하기 위한 것입니다.
- Is는 true만 판단하기 위한 접두어입니다.
예를 들자면,
// Is 접두어
if (IsZeroHP())
{
printf("HP가 0입니다!\n");
}
// Check 접두어
if (CheckZeroHP() == false)
{
printf("아직 HP가 남아있습니다\n");
}
이렇듯이 미묘한 차이가 있기 때문에 잘 생각해보고 선택하여 사용하는 것이 필요합니다.
is + 현재진행형(~ing)
“~하는 중인가?” 라는 뜻이 필요할 때 쓰면 됩니다.
var isExecuting: Bool { get } //Operation: "오퍼레이션의 작업이 현재 실행 중인가?"
var isPending: Bool { get } //MSMessage: "메시지가 보내지기 전 대기 중인가?"
is + 형용사
이제부터 살짝 헷갈릴 수 있습니다.
형용사도 두 종류로 나뉩니다.
- 단어 자체가 형용사인 것 - opaque, readable, visible 등
- 과거분사 형태 - hidden, selected, highlighted, completed 등
과거분사(past participle)는 간단히 말해 동사로 만든 형용사라고 생각하면 됩니다.
동사를 과거분사로 바꾸면 뜻이 여러가지로 바뀔 수 있는데, 일단 여기서는 수동태라고 생각하면 됩니다.
hide(숨다) - hidden(숨겨진), select(선택하다) - selected(선택된), complete(완료하다) - completed(완료된) 등등.
var isOpaque: Bool { get set }
var isSelected: Bool { get set }
var isHighlighted: Bool { get set }
var isHidden: Bool { get set }
조동사 용법
조동사(modal verb)는 동사를 돕는 동사란 뜻인데 can, should, will 등이 있다. 주의할 점은 조동사 + 동사원형 으로 써야한다는 것 하나 뿐이다.
can: “~ 할 수 있는가?”
should, will: “~ 해야 하는가?” 혹은 “~ 할 것인가?”
등등.
var canBecomeFirstResponder: Bool { get } //UIResponder: first responder가 될 수 있는가?
var shouldRefreshRefetchedObjects: Bool { get set } //NSFetchRequest: 가져온 값을 refresh 할 것인가?
has 용법
has로 시작하는 Bool 변수명은 상대적으로 빈도가 낮지만 뜻이 전혀 다르게 쓰이는 두 가지가 있어서 알아두면 유용합니다.
- has + 명사
- has + 과거분사
has + 명사
has 다음 명사가 나오면 “~를 가지고 있는가?” 라는 뜻입니다.
var hasiCloudAccount: Bool { get } //CKUserIdentity: 관련된 iCloud 계정을 가지고 있는가?
var hasVideo: Bool { get set } //CXCallUpdate: 콜에 비디오가 포함되어 있는가?
has + 과거분사
모든 케이스를 통틀어 가장 덜 쓰이는 케이스 같으므로 만약 이해 안되더라도 넘어가도 지장 없다. 게다가 is + 과거분사와 뜻이 거의 같기 때문에 꼭 알아야할 필요도 없어보인다.
이때의 과거분사는 아까 is + 과거분사 때와는 다른 의미이다. has + 과거분사는 현재완료 의 의미를 가지는데 굳이 해석하자면 ‘과거에 완료된 것이 현재까지 유지되고 있다’는 뜻이다. 따라서 Bool 변수로 쓰이면 ‘~가 유지되고 있는가?’ 라고 해석할 수 있다.
var hasConnected: Bool { get } //CXCall: 콜이 연결되어 있는가?
var hasEnded: Bool { get } //CXCall: 콜이 끝났는가?
동사원형 용법
여기서 주의할 점은 동사원형을 3인칭 단수로 써야 합니다.
3인칭 단수는 보통 동사원형 뒤에 -s나 -es가 붙는 형태입니다.
supports: ~을 지원하는가?
includes: ~을 포함하는가?
shows: ~을 보여줄 것인가?
allows: ~을 허용할 것인가?
accepts: ~을 받아 주는가?
contains: ~을 포함하고 있는가?
이정도 단어들의 쓰임새만 알아도 풍부한 Bool 변수명을 짓기에 충분한 것 같습니다.
var supportsVideo: Bool //CXProviderConfiguration: 비디오를 지원하는가?
var includesCallsInRecents: Bool //CXProviderConfiguration
var showsBackgroundLocationIndicator: Bool //CLLocationManager
var allowsEditing: Bool //CNContactViewController: 편집을 허용하는가?
var acceptsFirstResponder: Bool //NSResponder
그 외에도 returns, preserves 등도 있습니다.
마무리
정리하자면
- is 용법
- is + 명사
- is + 현재진행(~ing)
- is + 형용사
- 조동사 용법
- can, should, will 등
- 조동사 + 동사원형
- has 용법
- has + 명사
- has + 과거분사 (is + 과거분사와 의미 거의 동일)
- 동사원형 용법
- 3인칭 단수
참고
Bool 변수 이름 제대로 짓기 위한 최소한의 영어 문법
Naming guidelines for boolean variables
접두어 Check 와 Is