Naming convention
Helper class / Utility class
클래스 네이밍 suffix는 디자인 패턴 참조해서 역할에 맞게
[코딩 노트] 大 : Design Pattern, 디자인 패턴
파일 이름은 클래스 이름과 동일하게
Parameter vs Argument
Parameter 는 함수를 선언할 때의 변수의 이름
Argument 는 함수를 호출하면서 전달하는/받는 값
- Parameter 는 '파라미터' 또는 '매개변수', '인수'로,
- Argument 는 '아규먼트', '인자', 또는 '전달인자'로
DATE FORMAT 상수 네이밍? 애초에 DATE FORMAT 상수가 필요할까?
https://stackoverflow.com/questions/52818450/java-constant-names-conventions-for-date-formats
`` DateTimeFormatter`` 클래스에서도 제공하고 있는건 `` ISO_DATE_TIME`` 같은 의미론적 상수이지, `` YYYY_MM_DD`` 같은 value를 그대로 옮긴 이름이 아니다.
Naming convention
Suffixes are sometimes useful:
- `` max`` - to mean the maximum value something can have.
- `` foo_cnt`` - 어떤 항목 foo의 개수를 의미하는 변수. len(foo)
- num_of_xxx 보다는 xxxCount 같은걸 사용한다.
- `` key`` - key value.
- `` idx`` - 요것도 자주 씀.
- For example: retry_max to mean the maximum number of retries, retry_cnt to mean the current retry count.
file : path, dir, name
```kt
/home/user/foo.var
------------------ path
---------- dir
------- name
```
boolean variables에도 ` is` prefix 붙여야 하나?
- 파라미터에는 is 붙이는게 좋아보인다. 이건 아무렇게나 해도 상관 없음
- getter는 is 붙인다는게 argue가 없다.
- field에 붙여야 하느냐 말아야 하느냐는 좀 불명확하다. 컨벤션에 해당 내용이 없는 경우도 많고, 있다 해도 의견이 분분...
- 코틀린에서는 필드명 자체를 isMobile로 네이밍 하는 것이 좋아보인다.
- (Kotlin In Action 예제코드)
- 자바에서는 필드명을 그냥 mobile로 쓰는게 좋아보인다.
- lombok이 getter setter 만들어주는 규약이 코틀린 getter setter 만들어주는 규약과 동일해서 그냥 mobile로 써도 상관없다.
- 코틀린 -> 자바 필드를 참조할 때는 isMobile, setMobile 있으면 isMobile로 참조하게 되므로 mobile이든 isMobile이든 상관없다.
- 자바 -> 코틀린 프로퍼티를 호출할 일이 있을 때도 getter, setter 통해 참조하므로 어느쪽이든 상관없다.
- 다만!! JSP에서 참조할 때 코틀린 처럼 자동으로 getter를 불러주는데...
이 때 변수명이 mobile이면 `` obj.mobile -> obj.isMobile()`` 이렇게 연결된다.
근데 변수명이 isMobile이면 `` obj.isMobile -> obj.getIsMobile`` 로 연결된다 ㅡㅡ... 그래서 그냥 mobile이 나은 듯.
- Jackson 사용 할 때에도 차이점이 있다.( 자바 필드는 mobile로 네이밍 추천 )
- 필드명이 isMobile이든, mobile이든 serialization 하면 json에서는 mobile이 된다.
- json serialization 결과를 isMobile 로 만들고 싶은 경우, ``kt @JsonProperty("isMobile")`` 할텐데,
- 이 때 필드명이 isMobile이라면 json에 {isMobile, mobile} 둘 다 포함된다.
- 필드명이 mobile이라면 json에 {isMobile} 만 포함된다.
- 참고 ) 또한, 매핑하려는 응답이 isAgree 인 경우, getter/setter는 isIsAgree()/setIsAgree() 이어야 isAgree 응답-필드를 매핑할 수 있다. ( 이 경우 @JsonProperty로 해결 )
결론
- param에는 is 붙인다
- getter에도 is 붙인다
- java field에는 is 붙이지 않는다
- kotlin field에는 is 붙인다
lombok과 kotlin의 boolean 타입 getter setter 생성 규칙
```kt
### lombok
// boolean 타입 변수명이 mobile이면, 롬복은 isMobile()와 setMobile() 를 만들어준다
boolean mobile; -> isMobile(), setMobile()
// (예외) if (이름이 is로 시작하고 곧바로 title-case letter가 오면서 && 타입이 boolean 필드)
boolean isMobile; -> isMobile(), setMobile()
// wrapper type Boolean은 boolean이 아니다.
Boolean isMobile; -> getIsMobile(), setIsMobile()
### kt
var isMobile: Boolean -> isMobile(), setMobile()
```
https://kotlinlang.org/docs/reference/coding-conventions.html
https://developer.android.com/kotlin/style-guide
```kt
class DeclarationProcessor { val x: Int } // :는 변수 이름에 붙인다.
object EmptyDeclarationProcessor : DeclarationProcessor() { ... }
fun processDeclarations() { ... } // except : factory function
var declarationCount = ... // local이든 property든. except : reference to singleton
private val _backingProperty = "a"
const val MAX_COUNT = 8
val USER_NAME_FIELD = "UserName"
enum class Color { RED, GREEN } // 아무거나 써도 되긴 한다만 보통 UPPERCASE
```
- 상수는 `` UPPERCASE_WITH_UNDERSCORE``
- 이 때 상수란 ``kt const``가 아니어도 쓰임이 상수이면 상수로 간주한다.
- 즉 top-level 프로퍼티이거나,
- custom ``kt get()``을 정의하지 않는 object class의 ``kt val`` 프로퍼티이면서 불변 데이터를 가지고 있는 경우
- This includes immutable types and immutable collections of immutable types as well as scalars and string if marked as const.
네이밍 규칙은 http://www.oracle.com/technetwork/java/codeconventions-135099.html
파일 이름은 클래스 명과 동일하게 한다.
각각의 자바 소스 파일은 하나의 public (class | interface)를 포함.
private (class | interface)가 public 클래스와 연결되어 있을 경우는 하나의 소스파일에 둘 수 있음.
이 경우 public (class | interfcae)는 파일 내에서 첫 번째 클래스 또는 인터페이스여야 함.
indent는 스페이스바 4개
중괄호는 K&R style
static은 상수인 경우 (Immutable class 포함) UPPERCASE_WITH_UNDERSCORE
static 변수인 경우 (mutable) camelCase
https://source.android.com/setup/code-style#follow-field-naming-conventions
android 개발 시 따라야 하는 컨벤션은 아니고, android open source project에 참여 시 따라야 하는 컨벤션.
python
https://www.python.org/dev/peps/pep-0008/#naming-conventions
함수, 메소드, 변수에 `` lowercase_with_underscore``
non-public methods and instance variables에는 `` _single_leading_underscore``를 사용한다.
근데 이거 빼고는 다 함수는 lowerCamelCase라... 함수같은 경우 개인적으로 짤 때는 PEP8을 따르지 않는 것이 좋겠다.
https://github.com/google/styleguide/blob/gh-pages/pyguide.md
C++ ( C )
C#
https://msdn.microsoft.com/en-us/library/ms229002(v=vs.110).aspx
if와 중괄호 Style
```c
if (a) {
b( );
}
```
HTML naming convention - id, class
https://google.github.io/styleguide/htmlcssguide.html#ID_and_Class_Name_Delimiters
단어 abbr convention
authentication -> authn
authorization -> authz
authority -> auth
state -> state
status -> stat
changeSupport.firePropertyChange() - "통지"의 의미로.
'System Design > Principles' 카테고리의 다른 글
[리팩터링 2판] 3장 Bad Smells in Code (0) | 2021.10.14 |
---|---|
CommonMessageException 정의하기 (0) | 2020.11.30 |
[리팩터링 2판] 1장, 2장 - 성능, 경제적인 효과 (0) | 2019.11.18 |
고민이 길어질 때, 어느쪽 선택이 우세한지 감이 안올 때, 일단 짜라! (0) | 2017.12.02 |
[코딩 노트] 小 : 라인 레벨 : 자주 사용하는 패턴 (0) | 2017.12.02 |