공통
- 축약어는 절대 사용하지 않는다.
- 패키지와 클래스 이름은 반드시 도메인에 정의된 용어와 일치하여야 한다. ([[용어집]] 참조)
패키지 명명 규칙
패키지 명은 최대 10자 내에서 완전한 단어로 명명한다. 이름은 영문 소문자로만 구성한다.
- 예) calendar
- 예) calendar.event
클래스 명명 규칙
0. 개요
- 클래스 이름은 자바 표준 관습을 따라 파스칼 표기법으로 명명한다.
- 클래스 이름은 축약어를 사용하지 않고, 완전한 단어들로 구성하며 최대 5 단어가 넘지 않도록 한다. 단, 누구나 의미를 명확히 알 수 있고, 자바 개발자 사이에 통용되는 축약어는 사용할 수 있다. (예: XXServiceImpl)
- 클래스 이름은 클래스의 의미와 역할을 명료하게 드러내고 유추하기 쉽도록 작성한다.
1. 도메인 클래스
- 도메인 클래스 이름은 세 단어를 넘기지 않는다. (예: UserWidgetOption)
- 사용자 환경 설정과 관련된 도메인 클래스는 Option이라는 접미어를 붙인다. (예: QuickMenuOption)
- 관리자 환경 설정과 관련된 도메인 클래스는 Manager라는 접미어를 붙인다. (예: UiManager)
- 그러나 클래스의 의미가 명확한 경우에는 Manager 접미어를 붙이지 않아도 무방하다. (예: Link)
2. 일반 클래스
- 클래스 이름은 다섯 단어를 넘기지 않는다. (예: UserWidgetOptionServiceImpl)
- 다섯 단어를 넘기는 경우, 의미를 적절히 표시할 수 있는 정도로 단어 수를 줄인다.
3. Bad Practice
예1) com.lgu.abc.sch.SchData
이 클래스는 사용자 프로필에서 일정 등록 아이콘 클릭 시 일정 등록 화면으로 이동하고 해당 사용자를 참석자로 설정하는 데 쓰이는 빈이다.
- Sch라는 단어는 패키지 이름과 중복되고, 클래스의 특성을 드러내지 못하는 무의미한 단어이다.
- Data라는 단어도 Sch와 마찬가지로 그 의미를 파악하기 어렵다.
- Sch라는 축약어를 사용하고 있다.
- 도메인 용어를 사용하지 않고 있다.
이를 명명 규칙에 따라 바꾸면 다음과 같다.
- SchData (X) -> EventAttenderSetCommand
- SchDataCommand (X) -> EventAttenderListSetCommand
메소드 명명 규칙
0. 개요
- 메소드 이름은 자바 표준 관습을 따라 Camel 표기법으로 명명한다.
- 메소드 이름은 영어 대소문자만을 사용하여 작성한다. '_'와 같은 특수문자는 사용을 금지한다.
- 필드 이름은 축약어를 사용하지 않고, 완전한 단어를 사용하여 의미를 명확히 드러내도록 한다.
- 메소드는 동사로 시작하고, 그 다음 단어로 명사들이 올 수 있다.
- 만약 getter용 메소드라면 경우에 따라 get을 생략하고, 리턴되는 객체를 나타내는 명사로만 메서드 이름을 만들 수 있다. List 인터페이스의 size() 메소드를 생각해 보면 이해하기 쉬울 것이다.
1. Bad Practice
예1) corpCreateMail(), usrCreateMail()
위 메소드는 개통 및 사용자 생성 완료 안내 메일을 보내는 메소드이다.
- 동사가 아닌 명사로 시작하고 있다.
- corp, usr라는 축약어를 사용하고 있다.
- 메소드의 의미가 명확하지 않다. 메소드가 어떤 일을 하는지 감을 잡기가 힘들다.
위 메소드는 의미를 명확히 드러내도록 아래와 같이 개선할 수 있다.
- corpCreateMail (X) -> sendCompanyOpenedNoticeMail
- usrCreateMail (X) -> sendUserCreatedNoticeMail
필드 명명 규칙
0. 개요
- 필드 이름은 자바 표준 관습을 따라 Camel 표기법으로 명명한다.
- 필드 이름은 영어 대소문자만을 사용하여 작성한다. '_'와 같은 특수문자는 사용을 금지한다.
- 필드 이름은 축약어를 사용하지 않고, 클래스명과 동일하게 작성하는 것을 원칙으로 한다. 예) OrganizationUserDisplayer organizationUserDisplayer
- 클래스 길이가 짧고, 가독성에 영향을 미치지 않는다면, 클래스명의 일부 단어만을 사용할 수 있다. 예) OrganizationUserDisplayer displayer
- 개발자 누구나 쉽게 알 수 있고, 사용 가능하다고 약속된 축약어는 사용할 수 있다. 그러나 권장하지는 않는다.
- 클래스 이름에서 나타나는 단어를 중복하여 필드 이름에 사용하지 않는다.
1. Bad Practice
예1) dept_nm
부서 이름을 나타내는 필드이다.
- dept, nm 등의 축약어를 써서 의미를 파악하는 데 시간과 노력이 든다.
- 특수문자 _ 를 사용하고 있다.
- 도메인 용어를 사용하지 않고 있다. (부서는 Department 이다)
이를 명명 규칙에 따라 바꾸면 다음과 같다.
- dept_nm (X) -> departmentName
만약 이 필드가 부서 클래스 (Department) 내에 존재하는 필드라면 departmentName 이 아닌 name이 되어야 한다. department 라는 단어가 클래스와 필드에 중복하여 나타나고 있기 때문이다.
예2) usr_key, dept_seq
사용자, 부서의 고유 식별자를 나타내는 필드이다. 위와 동일한 문제점을 가지고 있다. 또한 고유 식별자라는 속성에 대해 key, seq, num 등 서로 다른 이름이 쓰인다. 따라서 이를 도메인 용어인 id를 써서 통일하도록 한다.
- usr_key (X) -> userId
- dept_seq (X) -> departmentId
URL 명명 규칙
1. RESTful URL
URL은 Restful URL로 작성한다. 하나의 리소스를 나타내는 계층적인 URL을 만들고, 리소스에 대한 명령 (Create, Update, Delete, Read)는 HTTP Method를 통해 표현한다.
예를 들어 100번이라는 ID를 가진 LG 유플러스 차세대 그룹웨어 프로젝트의 오피스 파트에 소속된 개발자는 아래와 같이 표현할 수 있다.
예) http://[LG 유플러스 도메인]/[그룹웨어 프로젝트]/[오피스]/[개발자 ID]
이를 실제 URL로 표현하면 다음과 같다.
예) http://www.lguplus.com/groupware/office/100
해당 개발자에 대한 명령은 아래와 같이 HTTP Method로 표현된다.
개발자 등록: POST
개발자 정보 수정 : PUT
개발자 조회 : GET
개발자 삭제 : DELETE
예를 들어 개발자 정보 수정은 아래 URL을 호출하게 된다.
예) PUT http://www.lguplus.com/groupware/office/100
2. URL의 계층 구조
URL의 계층 구조는 자바 패키지의 이름과 계층 구조를 그대로 따른다. 예를 들어 조직 도메인의 사용자 모델에 속한 사용자 프로필은,
- 조직 > 사용자 > 프로필
과 같은 계층 구조를 가진다. 따라서 자바 패키지는 이를 모델화한,
- org.user.profile
과 같은 형태를 가진다. URL도 패키지와 동일한 계층 구조를 가지므로,
- org/user/profile
과 같이 정의된다.
3. URL 명명 규칙
URL은 패키지와 동일한 구조를 가지므로, 위에 정의된 패키지 명명 규칙을 그대로 따른다. 패키지와 URL은 도메인 모델의 계층 구조를 이해하기 쉽고 직관적으로 드러내야 한다.
4. Bad Practice
예1) GET /mai/api/getUnreadMailCount
- 메일을 나타내는 단어들이 중복되서 표현되고 있다.
- api라는 단어가 표현하는 의미가 명확하지 않다.
- 특정 명령을 나타내는 get이라는 단어가 포함되어 있다.
이를 URL 명명 규칙에 따라 바꾸면 아래와 같다.
- GET mail/count/unread
예2) GET [메신저 ID]/msngProfileRemove
위 URL은 메신저 프로필 사진을 제거하는 URL이다.
- 제거 명령에 대해 GET 메소드를 쓰고 있다. DELETE 메소드를 사용해야 한다.
- Remove라는 명령이 URL에 포함되어 있다.
- 사진 이미지를 제거한다는 의미가 URL에 나타나 있지 않다. 위 URL만 보면 프로필 자체를 지우거나, 혹은 사용자 프로필과는 별도로 메신저 프로필이 존재하는 것으로 오해할 소지가 있다.
- 도메인 모델의 계층 구조가 표현되어 있지 않다.
이를 URL 명명 규칙에 따라 바꾸면 아래와 같다.
- DELETE /org/user/profile/[사용자 ID]/image
출처 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=muchine98&logNo=220296782848
댓글