Naming Convention

From JCFWiKi

Jump to: navigation, search

그림:check.gif

  • 산출물 : 명명표준과 개발코딩 표준
  • 작성자: 송희정
  • 최초작성일 : 2008/05/26
  • 최종작성일 : 2008/05/26

Copyright © 2008 Daewoo Information Systems Co., Ltd.

그림:forbidden.gif

문서에 대한 상세 설명

여기서는 코딩시 지켜야할 표준과 명명 표준에 대해서 설명한다.

목차

[편집] 개 요

[편집] 코딩규약

  • 아래와 같은 이유로 코딩규약을 만들어서 이를 준수하고자 한다.
    • 소프트웨어 코드 관련 전체 비용 중 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 대상 Class 명명법 폴더 및 패키지
Presentation JSP 파일명 : 관련 operation+Object.jsp /webapp/패키지구조에 따름/
Action Object명+Action 패키지구조.action
Business Service Interface I+Object명+Service 패키지구조.service
Implements Object명+Service 패키지구조.service
Persistence DAO Interface I+Object명+Dao 패키지구조.dao
Implements Object명+Dao 패키지구조.dao
Integration Object명.xml 패키지구조.dao.sqlmap
Model Object명 패키지구조.model

[편집] 메소드 명명 규칙

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