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

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

μžλ°” ν”Œλž«νΌμ€ λͺ…λͺ… κ·œμΉ™μ΄ 잘 μ •λ¦½λ˜μ–΄ 있고, κ·œμΉ™μ€ 크게 μ² μžμ™€ λ¬Έλ²•μœΌλ‘œ λ‚˜λ‰œλ‹€.

철자 κ·œμΉ™

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

  • νŒ¨ν‚€μ§€μ™€ λͺ¨λ“ˆ

    • 각 μš”μ†Œλ₯Ό 점(.)으둜 κ΅¬λΆ„ν•˜μ—¬ κ³„μΈ΅μ μœΌλ‘œ μ§“λŠ”λ‹€.
    • μš”μ†Œλ“€μ€ λͺ¨λ‘ μ†Œλ¬Έμž μ•ŒνŒŒλ²³ ν˜Ήμ€ 숫자둜 이뀄진닀.
    • 쑰직 λ°”κΉ₯μ—μ„œλ„ μ‚¬μš©λ  νŒ¨ν‚€μ§€λΌλ©΄ 쑰직의 인터넷 도메인 이름을 μ—­μˆœμœΌλ‘œ μ‚¬μš©ν•œλ‹€.
      • E.g. edu.cmu, com.google. org.eff
      • μ˜ˆμ™Έμ μœΌλ‘œ, ν‘œμ€€ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ 선택적 νŒ¨ν‚€μ§€λ“€μ€ 각각 java와 javax둜 μ‹œμž‘ν•œλ‹€.
  • ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€

    • ν•˜λ‚˜ μ΄μƒμ˜ λ‹¨μ–΄λ‘œ 이뀄지며, 각 λ‹¨μ–΄λŠ” λŒ€λ¬Έμžλ‘œ μ‹œμž‘ (E.g. List, FutherTask)
    • μ—¬λŸ¬ λ‹¨μ–΄μ˜ 첫 κΈ€μžλ§Œ λ”΄ μ•½μžλ‚˜ max, min 처럼 널리 ν†΅μš©λ˜λŠ” μ€„μž„λ§μ„ μ œμ™Έν•˜κ³ λŠ” 단어λ₯Ό 쀄여쓰지 μ•ŠλŠ”λ‹€.
    • μ•½μžμ˜ 경우 λ…Όλž€μ΄ μžˆμ§€λ§Œ 첫 κΈ€μžλ§Œ λŒ€λ¬Έμžλ‘œ ν•˜λŠ” μͺ½μ΄ λ§Žλ‹€(이 μ‹œμž‘κ³Ό 끝을 λͺ…ν™•νžˆ μ•Œ 수 μžˆλ‹€).
      • HttpUrl vs HTTPURL
  • λ©”μ„œλ“œμ™€ ν•„λ“œ

    • 첫 κΈ€μžλ₯Ό μ†Œλ¬Έμžλ‘œ μ“΄λ‹€λŠ” 점만 λΉΌλ©΄ 클래슀 λͺ…λͺ… κ·œμΉ™κ³Ό κ°™λ‹€ (E.g. remove, ensureCapacity)
    • 첫 단어가 μ•½μžλΌλ©΄ ν•΄λ‹Ή μ•½μžλŠ” 단어 전체가 μ†Œλ¬Έμžμ—¬μ•Ό ν•œλ‹€. (E.g httpUrl)
    • μƒμˆ˜ ν•„λ“œλŠ” μ˜ˆμ™Έ
      • μƒμˆ˜ ν•„λ“œ : static final ν•„λ“œ 및 λΆˆλ³€ μ°Έμ‘° νƒ€μž…
      • 단어λ₯Ό λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ μ“°λ©°, 단어 μ‚¬μ΄λŠ” λ°‘μ€„λ‘œ κ΅¬λΆ„ν•œλ‹€ (E.g. VALUE, POSITIVE_INFINIY)
      • 이름에 밑쀄을 μ‚¬μš©ν•˜λŠ” μš”μ†ŒλŠ” μƒμˆ˜ ν•„λ“œκ°€ 유일
  • μ§€μ—­λ³€μˆ˜

    • λ‹€λ₯Έ 멀버와 λΉ„μŠ·ν•œ λͺ…λͺ… κ·œμΉ™ 적용
    • λ¬Έλ§₯μ—μ„œ 의미 μœ μΆ”κ°€ μ‰¬μ›Œ μ•½μ–΄λ₯Ό 써도 μ’‹λ‹€ (E.g. i, denom, hoseNum)
    • μž…λ ₯ λ§€κ°œλ³€μˆ˜λ„ μ§€μ—­λ³€μˆ˜μ˜ ν•˜λ‚˜μ΄λ‚˜, λ©”μ„œλ“œ μ„€λͺ… λ¬Έμ„œμ—κΉŒμ§€ λ“±μž₯ν•˜λŠ” 만큼 신경을 더 μ¨μ€˜μ•Ό ν•œλ‹€.
  • νƒ€μž… λ§€κ°œλ³€μˆ˜

    • μž„μ˜μ˜ νƒ€μž… : T (Type)
    • μ»¬λ ‰μ…˜ μ›μ†Œ νƒ€μž… : E (Element)
    • 맡의 킀와 κ°’ : K와 V (Key, Value)
    • μ˜ˆμ™Έ : X (eXception)
    • λ©”μ„œλ“œ 리턴 νƒ€μž… : R (Return)
    • κ·Έ μ™Έ μž„μ˜ νƒ€μž…μ˜ μ‹œν€€μŠ€ : T, U, V ν˜Ήμ€ T1, T2, T3

문법 κ·œμΉ™

철자 κ·œμΉ™μ— λΉ„ν•΄ 더 μœ μ—°ν•˜κ³  λ…Όλž€λ„ λ§Žλ‹€.

  • 클래슀

    • 객체 생성할 수 μžˆλŠ” 클래슀 : 보톡 λ‹¨μˆ˜ λͺ…μ‚¬λ‚˜ λͺ…사ꡬ μ‚¬μš©(E.g. Thread, priorityQueue, ChessPiece)
    • 객체 생성할 수 μ—†λŠ” 클래슀 : 보톡 λ³΅μˆ˜ν˜• λͺ…사(E.g. Collectors, Collections)
  • μΈν„°νŽ˜μ΄μŠ€

    • ν΄λž˜μŠ€μ™€ λ™μΌν•˜κ²Œ μ§“λŠ”λ‹€(E.g. Collection, Comparator).
    • able, ible둜 λλ‚˜λŠ” ν˜•μš©μ‚¬λ‘œ μ§“λŠ”λ‹€(E.g. Runnable, Iterable, Accessible)
  • λ©”μ„œλ“œ

    • λ™μž‘ μˆ˜ν–‰ : 동사, 동사ꡬ(E.g. append, drawImage)

    • boolean νƒ€μž… 리턴 : is, has둜 μ‹œμž‘ν•˜κ³  λͺ…μ‚¬λ‚˜ λͺ…사ꡬ ν˜Ήμ€ ν˜•μš©μ‚¬λ‘œ κΈ°λŠ₯ν•˜λŠ” 아무 λ‹¨μ–΄λ‚˜ ꡬ둜 λλ‚˜λ„λ‘ μ§“λŠ”λ‹€ (E.g. isDigit, isProbablePrime, isEmpty, isEnabled, hasSiblings)

    • ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€μ˜ 속성 리턴

      • 보톡 λͺ…사, λͺ…사ꡬ (E.g. Size, hashCode)
      • get으둜 μ‹œμž‘ν•˜λŠ” λ™μ‚¬κ΅¬λ‘œ μ§“λŠ”λ‹€ (E.g. getTime)
        • 주둜 JavaBeans λͺ…세에 뿌리λ₯Ό 두고 μžˆλ‹€
        • ν΄λž˜μŠ€κ°€ ν•œ μ†μ„±μ˜ getter와 setterλ₯Ό λͺ¨λ‘ μ œκ³΅ν•  λ•Œλ„ μ ν•©ν•œ κ·œμΉ™ (E.g. getAttribute, setAttribute)
      • get으둜 μ‹œμž‘ν•˜λŠ” ν˜•νƒœλ§Œ μ¨μ•Όν•œλ‹€λŠ” μ£Όμž₯도 μžˆμ§€λ§Œ κ·Όκ±°κ°€ λΉˆμ•½ν•˜λ‹€(λͺ…사, λͺ…사ꡬ μ‚¬μš© μ½”λ“œκ°€ 더 가독성이 μ’‹λ‹€).
        if (car.speed() > 2 * SPEED_LIMIT)
          generateAudibleAlert("μ œν•œ 속도 초과");
        
    • νŠΉλ³„ν•œ λ©”μ„œλ“œ

      • 객체의 νƒ€μž…μ„ λ°”κΏ”, λ‹€λ₯Έ νƒ€μž…μ˜ 또 λ‹€λ₯Έ 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ : toType (E.g. toString, toArray)
      • 객체의 λ‚΄μš©μ„ λ‹€λ₯Έ 뷰둜 λ³΄μ—¬μ£ΌλŠ” λ©”μ„œλ“œ : asType (E.g. asList)
      • 객체의 값을 κΈ°λ³Έ νƒ€μž… κ°’μœΌλ‘œ λ³€ν™˜ν•˜λŠ” λ©”μ„œλ“œ : typeValue (E.g. intValue)
      • 정적 νŒ©ν„°λ¦¬ : from, of, valueOf, instance, getInstance, newInstance, getType, newType 등을 μ‚¬μš©
  • ν•„λ“œ

    • ν•„λ“œκ°€ 직접 λ…ΈμΆœλ  일이 거의 μ—†κΈ° λ•Œλ¬Έμ— κ·œμΉ™μ΄ 덜 λͺ…ν™•ν•˜κ³  덜 μ€‘μš”ν•˜λ‹€.
    • boolean νƒ€μž… : 보톡 boolean μ ‘κ·Όμž λ©”μ„œλ“œμ—μ„œ μ•ž 단어λ₯Ό λΊ€ ν˜•νƒœ (E.g. initialized, composite)
    • λ‹€λ₯Έ νƒ€μž…μ˜ ν•„λ“œ : λͺ…μ‚¬λ‚˜ λͺ…사ꡬ (E.g. height, digits, bodyStyle)
  • μ§€μ—­λ³€μˆ˜

    • ν•„λ“œμ™€ λΉ„μŠ·, 쑰금 더 느슨

핡심 정리

  • 철자 κ·œμΉ™μ€ 직관적이라 λͺ¨ν˜Έν•˜μ§€ μ•Šμ€λ°, 문법 κ·œμΉ™μ€ 더 λ³΅μž‘ν•˜κ³  λŠμŠ¨ν•˜λ‹€
  • λͺ…λͺ… κ·œμΉ™μ„ μ²΄ν™”ν•˜μž
  • 상식이 μ΄λ„λŠ”λŒ€λ‘œ λ”°λ₯΄μž