[.NET REFERENCE]
명명 규칙 (Naming Rule)
개발 업무시 각 개발 요소에 대한 이름으로 명명 규칙(Naming Rule)을 준수함으로써 코드의 완전성과 가독성을 향상시키고 명확한 의미 부여를 생산성을 높힐 수가 있습니다.

1. 명명 규칙 준수를 통한 업무 생산성 효과
   - 일종의 규약을 설정하여 프로젝트 개발자 및 구성원 들간의 원활한 업무적 의사소통 가능
   - 업무 단계별 산출물 사이의 일관성 유지
   - 명확한 의미 부여로 산출물 사이의 연관성 및 코드 가독성을 높힘

2. 명명 규칙 준수시 공통 사항
   - 업무 영역에 적합하고 연관되게 정의된 용어를 사용
   - 같은 유형의 요소에 대해서는 혼동을 방지하기 위해, 유사 명칭이나 대소문자만 다른 같은 명칭 사용 금지

3. 대소문자 혼용
   - 여러 개의 단어로 이루어진 이름의 경우 대소문자를 적절히 혼용하여 코드의 가독성을 향상시킵니다.
     (예시) MemberInfo, ProductDetail, FlightReservation
   - 대소문자 혼용 기법
유   형 설     명 예   시 적용 대상
Pascal Case 모든 단어의 첫번째 글자를 대문자로 쓴다. ProductCatalog 클래스
열거형(Enum), 열거값
이벤트
읽기전용 정적 필드
인터페이스
메서드
네임스페이스
속성
Camel Case 맨 첫번째 글자는 소문자로, 나머지 각 단어의 첫번째 글자를 소문자로 쓴다. productCatalog 매개변수(parameter)
인스턴스 필드, 클래스 변수
Uppercase 모든 글자를 대문자로 쓴다. System.IO 2글자 정도의 단어
상수


4. 약어 사용을 자제
   - 가능한 한 단어 전체를 사용 ==> 코드의 가독성 및 의미 파악 명확
      (예시) ProCat --> ProductCatalog
   -  명칭이 지나치게 길어지는 경우, 일반적으로 통용되거나 사전에 정의된 약어를 적절히 사용
      (예시) Temporary --> Temp,  Information --> Info,  UserInterface --> UI,  Number --> No
   - 약어 사용시, 2글자 단어는 Uppercase을, 2글자 초과시는 Pascal 또는 Camel case을 적용하여 사용
      (예시) System.Web.Ui --> System.Web.UI,  HTMLButton --> HtmlButton,  UserControlCheck --> UCCheck

5. 단어 사용시 주의사항
   - 업무에 적합하고 연관된 단어를 선정, 정의
   - 같은 유형시 유사한 명칭이나 대소문자만 서로 다르게 한 명칭 사용 금지
   - .NET Framework의 네임스페이스와 중복되지 않아야 함
   - .NET Framework 및 각 언어 (C#, VB.NET)에서 미리 정의된 키워드(keyword) 이름과 중복되지 않아야 함

6. 네임스페이스(Namespace) 명명 규칙
   - 네임스페이스 이름은 Pascal case을 적용
     (기본 구조) 회사명.도메인/부서.애플리케이션/시스템명.하위시스템.논리적계층
                 (예시) Microsoft.Windows.WindowsServer.IIS
   - 필요에 따라서는 업무 시스템에 맞게 '도메인/부서', '하위 시스템', '논리적 계층' 등의 부분 이름은 생략이 가능  
수   준 내   용 고정값 / 예제 생략가능
1 회사명 COMPANY X
2 도메인 / 부서 Development O
3 애플리케이션 / 시스템 이름 MessengerApp X
4 하위 시스템 InstantChatting O
5 논리적 계층 Biz O
      
   (예시) 회사명.부서.애플리케이션 --> COMPANY.Development.MessengerApp

7. 클래스(Class) 명명 규칙
   - 명사 / 명사구 사용
   - Pascal case 적용
   - C++ 에서의 MFC 스타일처럼 클래스를 나타내는 C 등의 접두사를 사용하지 않음
      (예시) CMessengerInfo --> MessengerInfo
   - 클래스의 성격에 따라 접두사 또는 접미사를 적절히 사용
   - 권장되는 클래스 명명 규칙
구  분 명명 표준 예  시
Base Class 공통기능명 + Base RuleBase, DacBase
Business Facade [Use Case Group명] + System/Facade/Service ProductSystem, OrderService
Business Rule 트랜잭션 사용 : [Use Case Group명] + _Tx EmployeeInfo_Tx
트랜잭션 미사용 : [Use Case Group명] + _NTx EmployeeInfo_NTx
Data Access [Table명] + _Dac Members_Dac
Type Dataset ds + [Table명] dsMembers
Exception Class [사용자정의예외명] + Exception BusinessRuleException


8. 인터페이스(Interface) 명명 규칙
   - 대문자 I 를 접두사로 사용하여 인터페이스임을 표시
      (예시) IServiceProvider, IComponent
   - 다른 내용은 클래스 명명 규칙과 동일

9. 메서드(Method) 명명 규칙
   -  동사 / 동사구(동사 + 명사) 사용
   - Pascal case 적용
   - Business Logic, Data Access 계층의 클래스 메서드는 사전에 약속된 동사 사용
      * Business Logic : 동사 + 명사 (조합)
      * Data Access : 동사
   - Business Logic과 Data Access 계층 클래스 메서드 명명 비교
작업구분 Business Facade / Rule Data Access
추가 Add / AddNew / Append / Register + 명사
   (예시) AddNewMemberInfo
Insert
수정 Modify / Change / Update + 명사
   (예시) UpdateMemberInfo
Update
삭제 Remove / Delete + 명사
   (예시) DeleteMemberInfo
Delete
조회 Get / Inquire + 명사
Get / Inquire + 명사 + By + 조건 (Optional)
   (예시) GetMemberInfo, GetMemberInfoByMemberID
Select / Inquire


10. 열거형(Enum) 명명 규칙
   - Pascal case 적용
   - 약어는 꼭 필요한 경우에만 사용
   - 열거형 type 이름에 Enum 접두사를 사용하지 않음
   - 열거형 type : 단수형 이름,  비트 필드 : 복수형 이름 사용
   - 비트 필드 열거형에는 항상 FlgAttribute를 추가

11. 변수(Variant) 및 필드(Field) 명명 규칙
   - 변수 이름은 짧으면서도 의미가 있는 단어 사용. 명사 / 명사구 사용
   - 헝가리안 표기법은 가급적 사용하지 않음
   - 루프 카운터(loop counter; 예 for문 등)를 제외하고는 모호한 이름(i, j, s, a 등)을 사용하지 않음
   - 메서드의 매개변수(parameter) : 매개변수의 이름과 type을 통해 매개변수의 의미를 확인할 수 있을 정도로 설명적이어야 함
   - 매개변수(parameter), 지역 변수, 인스턴스 필드(instance field) : Camel case 적용
   - 정적 필드(static field) : Pascal case 적용
   - 데이터 바인딩(data binding)시 데이터 바인딩 UI 컨트롤의 필드 이름과 데이터베이스의 필드 이름은 서로 동일하게 선언

12. 상수(Constants) 명명 규칙
   - Uppercase 적용 (모두 대문자 사용)
   - 단어와 단어 사이는 _ 로 연결
      (예시) int MAX_COUNT = 1000;

13. 속성(Property) 명명 규칙
   - 명사 / 명사구 사용
   - Pascal case 적용
   - 헝가리안 표기법을 사용하지 않음
   - 속성 : 내부 type (private)과 동일한 이름 사용 (단, VB.NET의 경우 내부 type 이름 앞에 m_ 접두사 사용, 예시 : m_Age)
   - Private 인스턴스 필드를 노출시, 속성명은 인스턴스 필드의 Camel case를 Pascal case로 전환
      (단, VB.NET의 경우 내부 type 이름 앞에 m_ 접두사 사용)
   (예시) C# 언어를 사용하여 속성 명명 규칙을 적용한 코드 예시

public class Hello {
  
// 내부 type인 경우, Camel case 적용
  
private int
itemCount;
  
  
// Private 인스턴스 필드를 외부에 노출하고자 하는 경우 또는 속성, Pascal case
  
public int
ItemCount {
      get { ... }
      set { ... }
   }
}



14. 이벤트(Event) 명명 규칙
   - Pascal case 적용
   - 헝가리안 표기법을 사용하지 않음
   - 이벤트 처리기 이름 : EventHandler 접미사 사용
      (예시) MouseEventHandler
   - 2개의 매개변수 지정 : sender, e
   - 이벤트 인수 클래스 이름 : EventArgs 접미사 사용
      (예시) MouseEventArgs
      (예시) public delegate void MouseEventHandler(object sender, MouseEventArgs e);
   - 시점을 나타내는 경우, BeforeXXX / AfterXXX 대신 ~ing / ~(e)d 형태를 사용
      (예시) BeforeClose, AfterClose  -->  Closing, Closed
정리 문서 

+ Recent posts