Naming Convention
From JCFWiKi
Copyright © 2008 Daewoo Information Systems Co., Ltd. |
|
문서에 대한 상세 설명
|
목차 |
[편집] 개 요
[편집] 코딩규약
- 아래와 같은 이유로 코딩규약을 만들어서 이를 준수하고자 한다.
- 소프트웨어 코드 관련 전체 비용 중 80%는 유지보수 과정에서 발생한다.
- 한 개발자가 개발을 하여 관리까지 하는 경우는 거의 없다.
- 소스코드는 읽기 쉽고, 이해하기 쉬워야 한다.
- 소스코드는 제품의 한 형태로 다른 제품과 마찬가지로 깨끗하게 포장이 되어야 한다.
- 혼자서 개발하는 소스코드는 거의 없다. 소스코드는 공유가 기본이다.
- 소스코드는 회사의 지적 자산이며, 회사의 특징이 드러나야 한다.
[편집] 파일의 구성 (File Organization)
[편집] 순서
- 자바 소스 파일들은 되도록 다음 순서를 따르며 패키지문과 시작 주석문의 순서는 소스의 가독성의 여부에 따라 바꿀 수 있다.
- 패키지(package)문
- 시작 주석문
- 임포트(import)문
- 클래스와 인터페이스 선언
- 클래스/인터페이스 구현에 관한 주석문.(선택적)
- 클래스(static)변수들
- 인스턴스 변수들
- 생성자
- 메소드
[편집] 프로그래밍 참고
- 인스턴스와 클래스 변수에 접근 허용
어떤 인스턴스 또는 클래스 변수를 합당한 이유 없이 public으로 선언하지 말아라. 인스턴스 변수들은 명시적으로 선언될 필요가 없을 경우가 많다. 인스턴스 변수가 public으로 선언되는 것이 적절한 경우는 클래스가 본래 behavior를 가지지 않는 data structure일 경우이다. 다시 말해서 만약 class 대신 struct를 사용해야 한다면(만약 Java가 struct를 지원한다면), class의 인스턴스 변수들을 public으로 선언하는 것이 적합하다.
- 클래스 변수와 메서드 참조
- 클래스(static) 변수 또는 메서드를 접근하기 위해서 객체를 사용하는 것을 피해야 한다. 대신에 클래스 이름을 사용해라.
classMethod(); //OK AClass.classMethod(); //OK anObject.classMethod(); //AVOID!
- 상수
숫자 상수는 카운트 값으로 for 루프에 나타나는 –1, 0, 1을 제외하고는 직접적으로 코딩 되어서는 안 된다. 상수로 사용되는 모든 변수의 이름은 밑줄을 포함하는 대문자를 사용한다.
MIN_VALUE, MAX_BUFFER_SZIE, OPTION_FILE_NAME
- 변수 배당
- 한 문장에서 같은 값을 여러 개의 변수들에 할당하지 말아라. 이렇게 하면 읽기가 어렵게 된다.
fooBar.fChar = barFoo.lchar = 'c'; // AVOID!
- Equality 연산자(==)와 쉽게 혼동될 수 있는 장소에 assignment연산자(=)를 사용하지 말아라.
if (c++ = d++) // AVOID! (자바가 허용하지 않음.) { ... }
다음과 같이 써야 한다.
if ((c++ = d++) != 0) { ... }
- 실행 시간의 성능을 향상시키기 위해서 assignment문안에 또 다른 assignment문을 삽입하지 말아라.
d = (a = b + c) + r; // AVOID!
다음과 같이 써야 한다.
a = b + c; d = a + r;
- 괄호
연산자 우선순위 문제를 피하기 위해서 복합 연산자를 포함하는 expression에서 자유롭게 괄호를 사용하는 것은 좋은 생각이다. 내각 연산자 우선 순위를 확실하게 안다 할지라도, 다른 프로그래머는 알지 못할 수도 있다.
if (a == b && c == d) // AVOID! if ((a == b) && (c == d)) // RIGHT
- 리턴 값
프로그램의 구조와 목적이 일치해야 한다.
if (booleanExpression) { return true; } else { return false; }
위와 같이 쓰는 대신에 다음과 같이 다시 써야 한다.
return booleanExpression;
다음과 같은 경우
if (condition) { return x; } return y;
다음과 같이 다시 써야 한다.
return (condition ? x : y);
- Conditional Operator 에서 ‘?’ 전에 Expressions
Ternary operator ?: 에서 ?전에 binary operator를 포함하는 expression이 나타난다면, 이럴 경우 꼭 괄호가 사용되어야 한다.
(x >= 0) ? x : -x;
[편집] Naming Convention
Naming Convention은 프로그램을 읽기 쉽게 함으로써, 프로그램을 더욱 이해하기 쉽게 만들어 준다.
또한 identifier(식별자)의 기능에 대한 정보(예를 들어, 식별자가 상수인지, package인지, 클래스인지에 대한 정보)를 제공해 주어 코드를 이해하는데 도움을 준다.
[편집] 클래스 (Class)
- 단어의 첫 글자는 대문자로 시작한다.
- 단어사이의 구분을 위하여 첫 글자만 대문자로 하고, 나머지는 모두 소문자로 한다.
- 약어라 할 지라도 단어 사이의 혼동을 피하기 위하여 첫 글자만 대문자로 사용한다.
- 단어의 배열은 [동사 + 명사], [명사 + 명사], [형용사 + 명사]의 순서를 따른다.
- 단어사이에 ‘_’를 사용하지 않는다.
# 예제 좋은 예제 나쁜 예제 ThreadManager myclass appListener mainApplication Cipher DOIT
[편집] 인터페이스 (Interface)
- 클래스와 동일한 규칙을 따른다.
[편집] 메소드 (Method)
- 메소드의 경우 보통 동사를 많이 사용한다.
- 첫 문자는 소문자를 사용한다.
- 중간에 들어가는 단어의 첫 글자는 대문자로 한다.
- 단어사이의 구분은 ‘_’를 사용하지 않는다.
- 여러 값을 가져올 경우 list를 붙인다.
- 기능에 따라 적절한 어미를 붙인다.
- 기능(get, set, insert, update, delete, save) + 세부 기능(Member, Address)
# 예제 run(); runFast(); getBackground(); getMember(); getMemberList();
[편집] 변수 (Variable)
- 변수의 이름은 짧으면서도 의미가 있는 단어를 사용한다.
- 변수의 첫 글자는 소문자로 시작한다.
- static 과 final 변수는 대문자를 사용한다.
- 영문 명으로 표기가 불가능할 경우 한글로 소리나는 대로 표기한다.
- 임시적으로 사용되는 변수의 접두어는 tmp를 사용한다.
- 돈과 관련된 변수는 String type으로 정의한다.
- 날짜와 관련된 변수는 String type으로 정의한다.
- 주의)변수명의 두번째 글자가 영어 소문자가 아닌 경우 자동 get/set 처리시 에러가 나므로 주의한다.
[편집] 상수 (Constants)
- 상수는 전부 대문자로 한다. 단어와 단어 사이는 ‘_’로 연결 한다.
# 예제 static final int HTTP_OK_RESPONSE = 200; static final String GNUTELLA_CONNECT = “GNUTELLA CONNECT\n\n”;
[편집] JCF 명명 규칙
[편집] 클래스 명명 규칙
| ||||||||||||||||||||||||||||||||||||||
[편집] 메소드 명명 규칙
| Tier | Presentation | Business | Persistence | |||||
| 클래스 | Flag | Action URL( .action ) | Action Parameter | Output Page | Action( Method ) | Service | DAO | iBatis |
| 등록페이지 | openRegi | openRegiUser | openRegiUser | regiUser.jsp | openRegiUser() | - | - | - |
| 등록 | REGI | regiUser | regiUser | SUCCESS | regiUser() | regiUser | regiUser | regiUser |
| 수정페이지 | openUpdt | openUpdtUser | openUpdtUser | updtUser.jsp | openUpdtUser() | viewUser | viewUser 재사용 | viewUser 재사용 |
| 수정 | UPDT | updtUser | updtUser | SUCCESS | updtUser() | updtUser | updtUser | updtUser |
| 삭제 | DELT | deltUser | deltUser | SUCCESS | deltUser() | deltUser | deltUser | deltUser |
| 목록 | LIST | findUsers | findUsers | findUsers.jsp | findUsers() | findUsers | findUsers | findUsers |
| 상세조회 | FIND | findUser | findUser | findUser.jsp | findUser() | findUser | findUser | findUser |
| 그리드저장 | SAVE | saveUser | saveUser | SUCCESS | saveUser() | saveUser | ||
| 등록/수정페이지 | EDIT | editUser | editUser | editUser.jsp | editUser() | - | - | - |
| findUser | findUser | findUser | ||||||
