item 68 leekyunghee - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

일반적으둜 ν†΅μš©λ˜λŠ” λͺ…λͺ… κ·œμΉ™μ„ λ”°λ₯΄λΌ

μ½”λ“œμ˜ 가독성, μ˜λ„λ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•¨

철자 κ·œμΉ™μ€ νŒ¨ν‚€μ§€, 클래슀, μΈν„°νŽ˜μ΄μŠ€, λ©”μ„œλ“œ, ν•„λ“œ, νƒ€μž… λ³€μˆ˜μ˜ 이름을 닀룬닀.

  • νŒ¨ν‚€μ§€μ™€ λͺ¨λ“ˆ 이름은 각 μš”μ†Œλ₯Ό 점(.)으둜 κ΅¬λΆ„ν•˜μ—¬ κ³„μΈ΅μ μœΌλ‘œ μ§“λŠ”λ‹€. μš”μ†Œλ“€μ€ λͺ¨λ‘ μ†Œλ¬Έμž μ•ŒνŒŒλ²³

edu.cmu, com.google, org.eff μ‹μœΌλ‘œ 쑰직의 λ°”κΉ₯μ—μ„œλ„ μ‚¬μš©λ  νŒ¨ν‚€μ§€λΌλ©΄ 쑰직의 인터넷 도메인 이름을 μ—­μˆœμœΌλ‘œ μ‚¬μš©ν•œλ‹€. μ˜ˆμ™Έμ μœΌλ‘œ ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 선택적 νŒ¨ν‚€μ§€λ“€μ€ 각각 java와 javax둜 μ‹œμž‘ν•œλ‹€.

  • 도메인 이름을 νŒ¨ν‚€μ§€ μ΄λ¦„μ˜ μ ‘λ‘μ–΄λ‘œ λ³€ν™˜ν•˜λŠ” μžμ„Έν•œ κ·œμΉ™μ€ μžλ°” μ–Έμ–΄ λͺ…μ„Έ (JLS, 6.1) μ°Έκ³ 

νŒ¨ν‚€μ§€ μ΄λ¦„μ˜ λ‚˜λ¨Έμ§€λŠ” ν•΄λ‹Ή νŒ¨ν‚€μ§€λ₯Ό μ„€λͺ…ν•˜λŠ” ν•˜λ‚˜ μ΄μƒμ˜ μš”μ†Œλ‘œ 이뀄진닀.

  • 각 μš”μ†ŒλŠ” 일반적으둜 8자 μ΄ν•˜μ˜ 짧은 λ‹¨μ–΄λ‘œ ν•œλ‹€

utilities λ³΄λ‹€λŠ” util처럼 μ˜λ―Έκ°€ ν†΅ν•˜λŠ” μ•½μ–΄λ₯Ό μΆ”μ²œν•œλ‹€.

  • 인터넷 도메인 이름 뒀에 μš”μ†Œ ν•˜λ‚˜λ§Œ 뢙인 νŒ¨ν‚€μ§€κ°€ λ§Žμ§€λ§Œ λ§Žμ€ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” κ²½μš°μ—” 계측을 λ‚˜λˆ  더 λ§Žμ€ μš”μ†Œλ‘œ ꡬ성해도 μ’‹λ‹€.
  • 예λ₯Ό λ“€μ–΄ java.util은 java.util.concurrent.atomicκ³Ό 같이 κ·Έ 밑에 μˆ˜λ§Žμ€ νŒ¨ν‚€μ§€λ₯Ό 가지고 μžˆλ‹€.
  • μžλ°”κ°€ νŒ¨ν‚€μ§€ 계측에 κ΄€ν•΄ μ–Έμ–΄ μ°¨μ›μ—μ„œ μ§€μ›ν•˜λŠ” 건 거의 μ—†μ§€λ§Œ μ–΄μ¨Œλ“  이처럼 ν•˜λΆ€μ˜ νŒ¨ν‚€μ§€λ₯Ό ν•˜μœ„ νŒ¨ν‚€μ§€λΌ λΆ€λ₯Έλ‹€.

(μ—΄κ±° νƒ€μž…κ³Ό μ• λ„ˆν…Œμ΄μ…˜μ„ 포함해) ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 이름은 ν•˜λ‚˜ μ΄μƒμ˜ λ‹¨μ–΄λ‘œ 이뀄지며, 각 λ‹¨μ–΄λŠ” λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•œλ‹€.

  • (List, FutherTask λ“±) μ—¬λŸ¬ λ‹¨μ–΄μ˜ μ²«κΈ€μžλ§Œ λ”΄ μ•½μžλ‚˜ max, min처럼 널리 ν†΅μš©λ˜λŠ” μ€„μž„λ§μ„ μ œμ™Έν•˜κ³ λŠ” 단어λ₯Ό 쀄여 쓰지 μ•Šλ„λ‘ ν•œλ‹€.

λ©”μ„œλ“œμ™€ ν•„λ“œ 이름은 첫 κΈ€μžλ₯Ό μ†Œλ¬Έμžλ‘œ μ“΄λ‹€λŠ” 점만 λΉΌλ©΄ 클래슀 λͺ…λͺ… κ·œμΉ™κ³Ό κ°™λ‹€.(remove, ensureCapacity) λ“±

  • 첫 단어가 μ•½μžλΌλ©΄ 단어 전체가 μ†Œλ¬Έμžμ—¬μ•Ό ν•œλ‹€.

μƒμˆ˜ ν•„λ“œλŠ” μ˜ˆμ™Έ

  • μƒμˆ˜ ν•„λ“œλŠ” 값이 λΆˆλ³€μΈ static final ν•„λ“œλ₯Ό λ§ν•œλ‹€.
  • μƒμˆ˜ ν•„λ“œλ₯Ό κ΅¬μ„±ν•˜λŠ” λ‹¨μ–΄λŠ” λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ 단어 μ‚¬μ΄λŠ” λ°‘μ€„λ‘œ κ΅¬λΆ„ν•œλ‹€. (VALUES, NEGATIVE_INFINITY) λ“±

μ§€μ—­λ³€μˆ˜μ—λ„ λ‹€λ₯Έ 멀버와 λΉ„μŠ·ν•œ λͺ…λͺ… κ·œμΉ™μ΄ μ μš©λœλ‹€.

  • 단 μ•½μ–΄λ₯Ό 써도 μ’‹λ‹€.
  • μ•½μ–΄λ₯Ό 써도 κ·Έ λ³€μˆ˜κ°€ μ‚¬μš©λ˜λŠ” λ¬Έλ§₯μ—μ„œ 의미λ₯Ό μ‰½κ²Œ μœ μΆ”ν•  수 있기 λ•Œλ¬Έμ΄λ‹€.
  • μž…λ ₯ λ§€κ°œλ³€μˆ˜λ„ μ§€μ—­λ³€μˆ˜μ˜ ν•˜λ‚˜ ν•˜μ§€λ§Œ λ©”μ„œλ“œ μ„€λͺ… λ¬Έμ„œμ—κΉŒμ§€ λ“±μž₯ν•˜λŠ” 만큼 일반 μ§€μ—­λ³€μˆ˜ λ³΄λ‹€λŠ” 신경을 μ¨μ•Όν•œλ‹€.

νƒ€μž… λ§€κ°œλ³€μˆ˜ 이름은 보톡 ν•œ 문자둜 ν‘œν˜„ν•œλ‹€.

λŒ€λΆ€λΆ„μ€ λ‹€μŒμ˜ 닀섯가지 쀑 ν•˜λ‚˜λ‹€

μž„μ˜μ˜ νƒ€μž…μ—” T, μ»¬λ ‰μ…˜ μ›μ†Œμ˜ νƒ€μž…μ€ E, 맡의 킀와 κ°’μ—λŠ” K,V, λ©”μ„œλ“œμ˜ λ°˜ν™˜ νƒ€μž…μ—λŠ” R을 μ‚¬μš©ν•œλ‹€.

객체λ₯Ό 생성할 수 μžˆλŠ” 클래슀(μ—΄κ±° νƒ€μž… 포함)의 이름은 보톡 λ‹¨μˆ˜ λͺ…μ‚¬λ‚˜ λͺ…사ꡬλ₯Ό μ‚¬μš©ν•œλ‹€. (Thread, PriorityQueue, ChessPiece λ“±)

객체λ₯Ό 생성할 수 μ—†λŠ” 클래슀(μ•„μ΄ν…œ 4) 보톡 λ³΅μˆ˜ν˜• λͺ…μ‚¬λ‘œ μ§“λŠ”λ‹€. (Collectors, Collections λ“±)

μΈν„°νŽ˜μ΄μŠ€ 이름은 ν΄λž˜μŠ€μ™€ λ˜‘κ°™μ΄ μ§“κ±°λ‚˜ (Collection, Comparator λ“±) able, ible둜 λλ‚˜λŠ” ν˜•μš©μ‚¬λ‘œ μ§“λŠ”λ‹€. (Runnable, Iterable, Accessible)

μ• λ„ˆν…Œμ΄μ…˜μ€ μ›Œλ‚™ λ‹€μ–‘ν•˜κ²Œ ν™œμš©λ˜μ–΄ 지배적인 κ·œμΉ™μ΄ 없이 λͺ…사, 동사, μ „μΉ˜μ‚¬, ν˜•μš©μ‚¬κ°€ 두루 쓰인닀. (BindingAnnotation, Inject, ImplementedBy, Singleton λ“±)

μ–΄λ–€ λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œμ˜ 이름은 λ™μ‚¬λ‚˜ (λͺ©μ μ–΄λ₯Ό ν¬ν•¨ν•œ) λ™μ‚¬κ΅¬λ‘œ μ§“λŠ”λ‹€ (append, drawImage)

  • boolean 값을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œλΌλ©΄ 보톡 isλ‚˜ has둜 μ‹œμž‘ν•˜κ³  λͺ…μ‚¬λ‚˜ λͺ…사ꡬ ν˜Ήμ€ ν˜•μš©μ‚¬λ‘œ κ°€λŠ₯ν•˜λŠ” 아무 λ‹¨μ–΄λ‚˜ ꡬ둜 λλ‚˜λ„λ‘ μ§“λŠ”λ‹€.

isDigit, isProbablePrime, isEmpty, isEnabled, hasSiblings λ“±)

λ°˜ν™˜ νƒ€μž…μ΄ boolean이 μ•„λ‹ˆκ±°λ‚˜ ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€μ˜ 속성을 λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œμ˜ 이름은 보톡 λͺ…사, λͺ…사ꡬ, ν˜Ήμ€ get으둜 μ‹œμž‘ν•˜λŠ” λ™μ‚¬κ΅¬λ‘œ μ§“λŠ”λ‹€. (size, hasCode, getTime λ“±)

μ„Έλ²ˆμ§Έ ν˜•μ‹, 즉 get으둜 μ‹œμž‘ν•˜λŠ” ν˜•νƒœλ§Œ 써야 ν•œλ‹€λŠ” μ£Όμž₯도 μžˆμ§€λ§Œ κ·Όκ±°κ°€ λΉˆμ•½


  • κ΄€λ‘€μ²˜λŸΌ μ‚¬μš©ν•˜κ³  νŠΉλ³„ν•œ λ©”μ„œλ“œ 이름을 κ°€μ§€λŠ” λͺ‡κ°€μ§€

μ•„μ΄ν…œ 6, 객체의 νƒ€μž…μ„ λ°”κΏ”μ„œ λ‹€λ₯Έ νƒ€μž…μ˜ 또 λ‹€λ₯Έ 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ˜ 이름은 보톡 toType, toString, toArray λ“±

  • 객체의 λ‚΄μš©μ„ λ‹€λ₯Έ 뷰둜 λ³΄μ—¬μ£ΌλŠ” λ©”μ„œλ“œμ˜ 이름은 asType (asList λ“±)

μ•„μ΄ν…œ 1, 정적 νŒ©ν„°λ¦¬μ˜ 이름은 λ‹€μ–‘ν•˜μ§€λ§Œ from, of, valueOf, instance, getInstance, newInstance, getType