728x90

프로그래밍을 처음 접하면 아무생각없이 자기가 원하는 스타일로 코드를 짜기 마련이다.

그러나 조금만 프로그래밍을 알게되도 이러한 명명법에 대해서 심각하게 고찰을 할 수 밖에 없다.

그 이유는 고찰 하지 않으면 안될만큼 일관성이 떨어지기 때문이다.

가령 아래와 같은 코드를 보자.


var name = 'kukaro';
var AGE = 27;
var BirthDay = '1993-01-01';
var possible_language = 'java';

이건... 벌써부터 머리가 아프다. 것보다 걍 보기가 싫다.

변수를 선언한건데 서로 다른 캐이싱이 4개나 들어있다.

이런 코드를 초보들은 아무생각없이 짜는데 이렇게 짤경우에 가독성에 심각한 해를 끼친다.


##include<stdio.h>

char* happyMessage(){
return "Happy";
}

int main(){
char* badMessage = "Bad";
printf("%s\n",happyMessage);
printf("%s\n",badMessage);
return 0;
}

가령 이런코드가 있다고 가정을 해보자.

위의 코드는 사실 아무 문제없이 컴파일이 될 코드이다.

그러나 작동에는 심각한 문제를 끼치게된다.

왜냐하면 하나는 변수고 하나는 함수이기 때문이다.

그러나 우리는 함수와 변수가 같은 캐이싱을 사용함으로써 사용자는 저게 둘다 변수겠거니 하고 사용하게된다.

물론 한번 오작동을 일으키면 알아서 맞게 하겠지만 앞으로 이런 함정이 수도없이 도사리고 있다는 것을 깨닫고

조심하면서 코딩해야한다. 이런건 바람직하지 않으면 설계단계에서 실패한 캐이싱이라고 할 수 있다.

그래서 몇가지 변수명명법이 존재한다.

이런걸 프로그래머들은 캐이싱이라고 부른다.


일단 캐이싱이 존재하게 되는데는 몇가지 배경을 알아야한다.

1.변수에 공백이나 특수문자($이나 _를 제외)를 사용할 수 없다

이는 당연한데 단락의 구문을 공백으로 하기 때문이다. 따라서 특정 변수는 공백을 넣어서 만드는 건 불가능하다. 특수문자가 불가능 한것은 마찬가지로 단락이 될 학률이 높기 때문이다. 일반적으로 $와 _는 단락으로 사용하는 문법이 없기에 사용이 가능하다.


2.공백입력은 불가능 하지만 두개 이상의 단어를 한 변수에 써야하는 상황이 온다

이 역시 마찬가지이다. 변수를 date라고 할 수 있지만 사실 날짜라는 뜻은 여러가지 의미를 내포한다. 생성날짜,삭제날짜 등등... 여러가지 의미로 사용하므로 이를 함축적으로 사용하려면 부가 설명을 붙혀야하지만 공백 입력이 불가능하므로 공백을 대체할 다른 문자가 필요하게 된다.


3.여러가지 명명 요소(element)등이 존재

이렇게 따지면 모든 캐이싱을 통일하면 좋을듯 하나 실상은 그렇지 않다. 간단하다는 C언어만 봐도 변수,함수,상수,매크로 등등... 여러가지 요소들이 존재한다. 이를 동일한 캐이싱으로 사용하는건 가독성이 떨어지게된다.


이제 이러한 배경을 알고나면 왜 캐이싱이 존재하게 되는지 알게 될것이다.

그럼 사용빈도가 높고 볼  확률이 높은 캐이싱들을 소개하도록 하겠다.


Camel 캐이싱

두문을 소문자로 시작

단어 사이의 단락을 대문자로 표기한다.


예 :

char* person = "kukaro";
char* primePreson = "prime kukaro";
char* goodPrimePerson = "nothing";


사실 가장 자주 쓰는 캐이싱은 아니다. 하나의 문장일 경우 두문을 소문자로 사용한다.

만약 둘이상의 문장일 경우 단락을 대문자로 표시하는 방법이다. 이 방식은 기초적이면서 여러언어에 널리쓰인다.

주로 쓰는 언어는 C++,java,C#에서 필드나 변수, 함수, 메소드등으로 자주 쓰인다.

그러나 파이썬에서는 아예 사용되지 않는 캐이싱이므로 주의가 필요하고 C언어는 캐이스 바이 캐이스이다.

한단어만 사용할 경우 스네이크캐이싱과 구별이 불가능 하여 스내이크 캐이싱과 같이 쓰지 못한다.


Pascal 캐이싱

두문을 대문자로 시작

단어 사이의 단락을 대문자로 표기한다.


예 :

char* Person = "kukaro";
char* PrimePreson = "prime kukaro";
char* GoodPrimePerson = "nothing";


이 캐이싱은 현재 거의 모든 언어에 두루두루 자주쓰이는 캐이싱이다.

일단 객체가 존재하는 모든 언어에서 객체를 뜻하는 캐이싱은 파스칼 캐이싱이다.

다른 말로는 Upper Camel 캐이싱이라고도 한다.

안쓰이는 언어는 없다고 봐도 좋다. Win32API에서는 함수이름으로도 사용하는 변태스러움을 자랑한다...


Snake 캐이싱

두문을 소문자로 시작

단어 사이의 단락을 _(언더스코어)로 표기한다.


예 :

char* person = "kukaro";
char* prime_preson = "prime kukaro";
char* good_prime_person = "nothing";


이 캐이싱은 과거의 C언어(지금도 이 캐이싱을 쓰는 경우가 있긴하다.)와 파이썬에서 주로쓰는 캐이싱이다.

언뜻봐서 구별이 조금 힘든 camel과 pascal보다 더욱 직관적이라는 장점이 있다.

과거부터 camel캐이싱과 공존이 불가능 하여 둘중 무엇이 낫냐는 갑론을박이 있긴한데 필자가 볼땐 거기서 거기다.

C언어를 사용할때는 조금 괴로운거 라이브러리마다 캐이싱이 다른 경우에 섞여서 뭐가뭔지 알아보기 힘든 경우가 있다.


Macro 캐이싱

모든 문자를 대문자로 작성

단어 사이의 단락을 _(언더스코어)로 표기한다.


예 :

char* PERSON = "kukaro";
char* PRIME_PERSON = "prime kukaro";
char* GOOD_PRIME_PERSON = "nothing";


이 캐이싱은 주로 상수나 매크로를 표현할 때 쓰는 캐이싱이다. 모든 언어에서 두루두루 쓰이는 캐이싱이다.

Win32API에서는 예외적으로 변수명을 사용할때도 이 캐이싱을 사용하긴 하는데 엄밀히 말하면 조금다르다.

그리고 Win32API는 변태적인 캐이싱이 많아서 일반화 시키기에는 무리가있다. 어쨋던 주로 상수로 쓰인다.


Kebob 캐이싱

모든 문자를 소문자로 작성

단어 사이의 단락을 -(하이픈)로 표기한다.


예 :

person = "kukaro";
prime-preson = "prime kukaro";
good-prime-person = "nothing";


언어에서 지원하지 않는 방식이 되는 경우가 많다.

html에서는 무조건 kebob 캐이싱을 사용하고 url에서도 kebob캐이싱을 사용한다.

프로그래밍언어들은 -이 안되는 경우가많은데 사용되는 언어에서는 쓰는 경우도 좀 있다.

그러나 일반적으로는 url이나 html 전용이라는 인식이 있다.


Plain 캐이싱

모든 문자를 소문자로 작성

단어 사이의 단락을 구분하지 않는다.


예 :

char* person = "kukaro";
char* primepreson = "prime kukaro";
char* goodprimeperson = "nothing";


단락을 구분하지 않는다니 의아할 수 있지만 생각보다는 꽤 자주 보이는 방식이다.

전체적으로 쓰기보단 변수명을 url로 쓰거나 할때 타협점으로 부분적으로 사용하는 경우가 있다.

그 이유는 url에서는 _를 쓰는게 지향되고 프로그래밍언어에서는 -를 못쓰기 때문이다.




자주 쓰이는건 위가 끝이다 그 외에도 사실 여러 캐이싱이 존재한다.

Train-Casing이나 COBOL-CASING등의 캐이싱 들도 있으며 CI_Casing 같은 Code Igniter에서만 쓰는 근본 없는 캐이싱도 존재한다.

그리고 Win32API에서 쓰는 헝가리안 스타일등도 캐이싱의 범주에 들어간다고 할 수 있다. 


+ Recent posts