2017. 1. 13. 09:00ㆍ장비제어개발관한이야기
개발을 하면서 많이 느끼는 거지만, 개발에 정답보다도 서로와의 약속과 커뮤니케이션이 제일 중요한 일인것같습니다.
오늘 포스팅할 내용은 그중 하나, 코딩 컨벤션과 헝가리안 표기법입니다.
코딩 컨벤션이란?
일관성 코드 스타일을 유지하기 위해 어떻게 코드를 작성해야 하는지에 대한, 약속입니다. 만일, 이직하게 된다면 이전회사의 약속은 정답이 아니며, 새롭게 다니는 곳이 정답이 됩니다. 이렇게 유동적으로 바뀔 수 있는 약속입니다.
코딩 컨벤션의 하는 이유 3가지
코드일관성, 품질향상, 프로젝트 확장성이라고 할 수 있습니다. 각 이유를 자세히 이야기해보겠습니다.
1. 코드 일관성
코딩 컨벤션은 코드 작성에 일관성을 부여하는 중요한 역할을 합니다. 코드 일관성은 코드를 읽는 사람이 코드를 이해하기 쉽게 만듭니다. 이는 프로젝트 내에서 여러 개발자가 작업하거나, 코드를 유지보수하거나, 확장하는 경우 특히 중요합니다. 동일한 코드 스타일과 명명 규칙을 따르면, 코드베이스가 일관되게 보이고 작동하며, 혼란을 줄여줍니다. 또한, 코드 리뷰 및 디버깅 프로세스를 단순화하여 오류를 빠르게 찾을 수 있게 합니다.
2. 품질 향상
코딩 컨벤션을 따르면 코드 품질이 향상합니다. 이는 버그를 감소시키고 소프트웨어의 안정성과 성능을 향상합니다. 명명 규칙, 들여 쓰기, 주석, 예외 처리, 코드 분리 등의 규칙은 코드의 실수와 오류 가능성을 줄여줍니다. 이로써 코드가 신뢰성이 높아지고 사용자에게 더 나은 경험을 제공합니다. 또한, 코드의 품질이 높으면 유지보수 및 확장성이 향상되어 장기적으로 비용을 절감할 수 있습니다.
3. 프로젝트 확장성
코딩 컨벤션은 프로젝트의 확장성을 고려합니다. 프로젝트가 성장하고 변화할 때, 새로운 기능을 추가하거나 코드를 수정할 때도 쉽게 작업할 수 있도록 해줍니다. 일관된 코드 스타일과 구조를 유지하면 새로운 개발자가 프로젝트에 참여할 때 코드를 빠르게 이해하고 기여할 수 있습니다. 또한, 코드베이스가 구조화되어 있으면 새로운 모듈이나 기능을 쉽게 통합하고 관리할 수 있습니다. 이는 프로젝트의 성장과 발전을 지원하며, 비즈니스 요구 사항에 대응하는 데 유용합니다.
헝가리안표기법 논란이 있지만 약속은 약속
헝가리안 표기법(Hungarian notation)은 변수와 식별자의 네이밍 규칙을 지정하는 개발 방법론 중 하나로, 이 방법론은 프로그래머들이 변수의 데이터 타입을 변수 이름 자체에 반영하는 것을 목표로 합니다. 이 방법은 변수의 의미를 더 명확하게 드러내고 코드의 가독성을 향상하는 데 기여합니다. 이름은 말 그대로 헝가리안 표기법에서 시작되며, 이 표기법은 다양한 버전 및 스타일로 사용됩니다. 여기에서는 일반적으로 사용되는 헝가리안 표기법의 예제를 통해 설명하겠습니다.
헝가리안 표기법의 구성 요소
변수 이름의 시작 부분에 해당 변수의 데이터 타입을 나타내는 접두사를 추가합니다. 이것은 변수가 어떤 종류의 데이터를 저장하는지 나타냅니다. 예를 들어, "strName"은 문자열(String)을 저장하는 변수를 나타냅니다. 변수 이름의 첫 글자는 소문자가 아니라 대문자로 시작합니다. 이것은 변수가 어떤 유형의 변수인지 구분하기 위한 접두사와 대문자 시작의 조합이 일반적입니다. 다음에 변수의 의미나 목적을 나타내는 이름이 옵니다. 이것은 실제 변수의 이름이며 데이터 타입과 변수의 용도를 결합합니다.
예를 들어, "strName" 변수는 문자열을 저장하는 변수를 나타내며 "str"은 문자열 데이터 타입을 나타내고, "Name"은 변수의 의미를 나타냅니다.
그러나 헝가리안 표기법은 논란이 있으며, 모든 개발 환경과 언어에서 적합하지 않을 수 있습니다. 때로는 변수명이 지나치게 길어질 수 있고, 관리하기 어려울 수 있으며, 일부 개발자는 이 표기법이 불필요하다고 주장하기도 합니다. 선택적으로 사용하거나 프로젝트 팀의 코드 스타일 가이드에 따르는 것이 좋습니다. 약속으로 시작해서 약속으로 끝납니다.
저희 회사 약속
Prefix | Data Type | Description | Example |
b | BOOL, bool | any boolean type | BOOL bTrue; |
c | char | character type | char cLetter; |
i | int | Integer type | int iVal; |
n | int | integer for counting | int nCar |
l | long | long type | long lDistance; |
u | unsigned | unsigned type | unsigned char ucVal; |
f | float | floating point | float fPercent; |
d | double | double floating point | double dPercent; |
w | WORD | unsigned word | WORD wCnt |
dw | DWORD | unsigned double word | DWORD dwLength |
p | * | any pointer | int *piAddr; |
pfn | * | function pointer | int (*pifnFunc1)(int x, int y); |
rg, a | array | stands for range | float rgfTemp[16]; |
sz | * | zero-terminated string of characters | char szText[16]; |
sh | short | short integer | short shVal; |
s | static | a static variable | static short sshChoice; |
t | struct | a user defined type | |
e | enum | variable which takes enumerated values | |
E | enum | enumerated type | |
g_ | Global | global variable | int g_iVal; |
m_ | Member | class private member variable | int m_iMember; |
k | constant formal parameter | ... | const long klGalaxies; |
r | reference formal parameter | ... | long &rlGalaxies; |
v | vector | vector<int> viBuffer; | |
str | CString | CString class | CString strBuffer; |
h | handle | handle to something | hMenu |
cg | Cognex component | Cognex component | CComPtr<ICogImage> pcgImage; |
그외 클래스 | 클래스 이름을 사용, 이름이 긴 경우 자음만 축약 | CButton buttonTemp; or CButton btnTemp; |
'장비제어개발관한이야기' 카테고리의 다른 글
나는 이렇게 한다. 장비개발에서 소스관리!!! (0) | 2017.01.21 |
---|---|
레이어 설명에 앞서서...동적라이브러리 링크 (0) | 2017.01.17 |
자동화설비(ImMahcine[SEQ])의 기본구조-초안 (0) | 2017.01.16 |
장비 제어 개발 하는 분들에게 공감가는 조언 (2) | 2017.01.12 |
장비 제어 소프트웨어 개발자! 제가 하는 일? (3) | 2017.01.11 |