나는 프로그래밍을 할 때 변수, 메서드, 클래스 등을 선언할 때 일관성이 없고 그때그때마다 조금씩 다른 형식으로 선언하는 좋지 못한 습관을 가지고 있다.
이는 혼자 개발하는 데는 크게 상관이 없지만 협업 과정에서는 가독성이 상당히 떨어지기 때문에 의미를 이해하기가 난해해지고 오류 발생 가능성을 높일 수 있다.
이러한 문제점을 해결하기 위해서 언어마다 변수, 메서드 등의 이름을 다루는 명명 관습(Naming Conventions)이라는 것이 존재한다.
규칙(Rule)이 아닌 관습(Conventions)이기 때문에 반드시 지켜야 하는 것은 아니지만 이러한 관습을 유지함으로써 코드의 가독성을 높이며 오류 발생 가능성을 줄일 수 있기 때문에 불가피한 상황이 아니라면 명명 관습을 이행하는 것이 좋다.
Java도 마찬가지로 명명 관습이 존재한다. 이에 대해서 간단하게 알아보도록 하자.
클래스(Class)
클래스는 PascalCase를 따라 첫 번째 문자를 대문자로 시작하며, 명사로 작성한다.
class Test { }
class String { }
class Node { }
단어가 2개 이상 혼합되어 있다면, 각 단어의 첫 번째 문자를 대문자로 표현한다.
class UserInfo { }
class HttpUrl { }
클래스 이름은 해당 클래스를 파악할 수 있도록 간단하고 명확하게 작성하며, 널리 사용되는 약어(URL, HTML)가 아니라면 약어는 되도록이면 피하고 완전한 단어를 사용한다.
인터페이스(Interface)
인터페이스는 PascalCase를 따라 첫 번째 문자를 대문자로 시작하며, 형용사로 작성한다.
interface Runnable { }
interface ActionListener { }
메서드(Method)
메서드는 camelCase를 따라 첫 번째 문자를 소문자로 작성하고 이어지는 단어의 첫 번째 문자는 대문자로 작성한다.
메서드 이름은 동사/전치사로 시작한다. 기본적으로는 동사로 시작하며, 다른 타입으로 전환하는 메서드나 빌더 패턴을 구현한 클래스의 메서드는 전치사를 사용할 수 있다.
메서드에 자주 사용되는 동사는 다음과 같다.
동사 | 사용 용도 | 예시 |
get/set | 데이터를 반환/주입하는 메서드에 사용 | getNumber(){} setNumber(int number){} |
init | 데이터를 초기화하는 메서드에 사용 | void initDate(){} |
is/has/can | boolean 값을 반환하는 메서드에 사용 is : 참/거짓을 판단하는 용도 has : 데이터의 유무를 파악하는 용도 can : 실행 유무를 판단하는 용도 |
boolean isValid(){} boolean hasData(){} boolean canOrder(){} |
create | 새로운 객체를 생성하여 반환하는 메서드에 사용 | Node createNode(){} |
find | 데이터를 찾는 메서드에 사용 | Node findNode(int index){} |
to | 해당 객체를 다른 형태의 객체로 변환해 주는 메서드에 사용 | String toString(){} |
A-By-B | B를 기준으로 A를 하겠다는 메서드에 사용 | void getUserById(String id){} |
변수(Variable)
변수는 첫 번째 문자는 소문자로 작성하고 이어지는 단어의 첫 번째 문자는 대문자로 작성한다.
for 문에 사용하는 i, j, k 같은 임시 변수를 제외한 변수들은 의미를 파악할 수 있도록 작성한다.
int i, j, k;
int number, studentId;
상수(Constant)
상수는 모든 문자를 대문자로 표현하며, 여러 개의 단어를 연결하여 표현할 경우 '_'를 사용하여 연결한다.
final int MAX_VALUE = 987654321;
final int MIN_VALUE = 0;
패키지(Package)
패키지는 소문자와 숫자로 작성하며, 각 요소를 점(.)으로 구분한다.
java.util.List;
java.util.io;
외부에서도 사용될 패키지라면 조직의 인터넷 도메인 이름을 역순으로 작성한다.
com.helloworld.libi
[ Reference ]
· https://madplay.github.io/post/adhere-to-generally-accepted-naming-conventions
'IT 개인 공부 > Java' 카테고리의 다른 글
[Java] Java에 포인터가 없는 이유 - 포인터(Pointer) vs 참조(Reference) (0) | 2021.08.20 |
---|---|
[Java] 가변인자(Varargs) (0) | 2021.08.16 |
[Java] JVM, JRE, JDK (0) | 2021.07.22 |
[Java] 패키지를 import 하면 언제 어떤 메모리 영역에 적재될까? (0) | 2021.07.22 |
[Java] 스레드 풀(Thread Pool)(2) (0) | 2021.07.22 |
댓글