woong's

Java Name Rule(자바 명명규칙) 본문

Develop/JAVA

Java Name Rule(자바 명명규칙)

dlsdnd345 2016. 2. 13. 19:19
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

아래의 모든 규칙은 지켜야 되지만, 가독성을 위해서는 위반되어도 된다.

1) package의 이름은 모두 소문자를 이용한다.

  • mypackage.com, com.company.application.ui

2) 객체의 이름의 첫글자는 반드시 대문자를 적는다.

  • Line, AudioSystem

3) 변수는 언제나 소문자로 시작된다.

  • line, audioSystem

4) 상수값 (final static)은 항시 대문자로 적고, 단어와 단어사이에 '_'를 넣는다.

  • MAX_ITERATIONS, COLOR_RED

5) method는 반드시 동사로 시작되며, 소문자로 적어준다.

  • getName(), computeTotalWidth()

6) 축약어를 대문자로 적지 않는다.

  • exportHtmlSource() - NOT > <del>exportHTMLSource()</del>
  • openDvdPlayer() - NOT > <del>openDVDPlayer()</del>

7) 매개변수가 객체인 경우, 타잎과 동일한 이름을 적는다.

  • void setTopic(Topic topic)
  • void connect(Database database)

8) 모든 변수 이름 / 객체 이름은 영어로 적는다.

9) loop상에 들어가는 index 변수의 경우, i,j,k로 짧게 적을 수 있다.

10) boolean / Boolean이 return 되는 method의 경우, is 로 시작한다.

  • isSet, isVisible, isFinished, isOpen, isFound

11) 다음 단어가 들어가는 method는 아래의 경우에 한정한다.

  • compute : 계산을 하는 경우
  • find / search : 검색을 하는 경우.
  • initialize / init : 객체의 초기화를 해야지 되는 경우.

12) 부정어가 들어가지 않도록 한다.

  • isFound : <del>isNotFound</del>
  • isError : <del>isNotError</del>

13) Singleton class의 경우, 객체의 생성은 getInstance() 를 통해서 하도록 구성한다.

14) 특정 interface를 구현(implement)하는 경우, interface name + "Impl"을 붙어서 구성한다.

  • BookDao : BookDaoImpl
  • UserDao : UserDaoImplWithHibernate

15) javadoc 주석을 제외한 주석은 multi-line 주석이라고 해도 /* */로 묶지 말고, 전체 라인을 "//" 이용해서 처리한다.

16) do-while은 자체한다.

17) 특정의미를 갖는 숫자는 항상 의미를 나타내는 상수로 바꿔서 사용하도록 한다.

if(age >= 20) {
    System.out.println("can buy the alchole.");
}

if(age >= STANDARD_ADULT_AGE) {
    System.out.println("can buy the alchole.");
}

18) 올바른 상속 방법을 이용한다.

상속은 'is a'관계가 성립해야 올바르다. 즉 '서브클래스(자식) is a 슈퍼클래스(부모)'가 성립해야 한다. 예를 들면 Red is a Color는 올바른 명제이지만 Engine is a Car는 'has a'관계이므로 상속이라고 볼 수 없다. "따라서 'has a'관계는 상속이 아니므로 composition과 delegation을 이용하면 된다." 
composition은 '객체를 field가 갖게 하는 방법'을 의하므로 'has a'관계가 정확히 성립한다.

상속 대신 composition과 delegation(조작이나 처리를 다른 객체에 위임)을 사용하면 다음과 같은 이점이 있다.

  1. 상속에서는 슈퍼클래스가 허용하고 있는 조작을 서브클래스에서 모두 허용해야 하지만, composition과 delegation에서는 조작을 제한할 수 있다.
  2. 클래스는 결코 변경할 수 없지만, composition하고 있는 객체는 자유롭게 변경할 수 있다. 예를 들면 학생 클래스가 영원이 학생이 아니라 나중에 취직을 하여 직장인 클래스가 될수 있다.

상속을 composition과 delegation으로 변경하는 요령은? 여기서 Shape를 상속한 Polyline과 Circle을 변경한다면 다음과 같다.

  1. Shape(부모)의 공통된 내용을 구현한 구현 클래스(ShapeImpl)를 만든다.
  2. Polyline과 Circle 클래스에서 ShapeImpl을 composition하고 부모와 공통되지 않는 method를 각각 위임 받는다.
  3. ShapeImpl 클래스의 method를 추출한 ShapeIF interface를 작성하고 Polyline과 Circle에서는 implements 한다.

19) Spring을 사용하는 경우 다음 규칙을 반드시 지키도록 한다.

  1. applicationContext.xml에 객체의 id를 추가하는 경우에는 객체의 이름을 그대로 적되, 첫글자를 소문자로 해서 적는다. (BookDao -> bookDao)
  2. 다음 id는 Spring에서 예약되어 있는 것이기 때문에 특정상황 이외에는 절대로 사용하지 않는다.

transactionManager, systemResource, messageResource, multipartResolver, uploadDirResource


'Develop > JAVA' 카테고리의 다른 글

Java @SuppressWarnings 사용하기  (0) 2016.02.13
Java 메일 사용하기  (0) 2016.02.13
Comments