item 49 Jung inchul - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

Effective Java 3e μ•„μ΄ν…œ 49λ₯Ό μš”μ•½ν•œ λ‚΄μš© μž…λ‹ˆλ‹€.

λ©”μ„œλ“œμ™€ μƒμ„±μž λŒ€λΆ€λΆ„μ€ μž…λ ₯ λ§€κ°œλ³€μˆ˜μ˜ 값이 νŠΉμ • 쑰건을 λ§Œμ‘±ν•˜κΈ°λ₯Ό λ°”λž€λ‹€. μ΄λŠ” "였λ₯˜λŠ” κ°€λŠ₯ν•œ ν•œ 빨리 (λ°œμƒν•œ κ³³μ—μ„œ) μž‘μ•„μ•Ό ν•œλ‹€"λŠ” 일반 μ›μΉ™μ˜ ν•œ 사둀이기도 ν•˜λ‹€. 였λ₯˜λ₯Ό λ°œμƒν•œ μ¦‰μ‹œ μž‘μ§€ λͺ»ν•˜λ©΄ ν•΄λ‹Ή 였λ₯˜λ₯Ό κ°μ§€ν•˜κΈ° μ–΄λ €μ›Œμ§€κ³ , κ°μ§€ν•˜λ”λΌλ„ 였λ₯˜μ˜ λ°œμƒ 지점을 μ°ΎκΈ° μ–΄λ €μ›Œμ§„λ‹€.

λ§€κ°œλ³€μˆ˜ 검사λ₯Ό μ œλŒ€λ‘œ ν•˜μ§€ λͺ»ν•˜λ©΄ λͺ‡ 가지 λ¬Έμ œκ°€ 생길 수 μžˆλ‹€.

  1. λ©”μ„œλ“œκ°€ μˆ˜ν–‰λ˜λŠ” 쀑간에 λͺ¨ν˜Έν•œ μ˜ˆμ™Έλ₯Ό λ˜μ§€λ©° μ‹€νŒ¨ν•  수 μžˆλ‹€.
  2. 더 λ‚˜μœ 상황은 λ©”μ„œλ“œκ°€ 잘 μˆ˜ν–‰λ˜μ§€λ§Œ 잘λͺ»λœ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•  λ•Œλ‹€
  3. ν•œμΈ΅ 더 λ‚˜μœ 상황은 λ©”μ„œλ“œλŠ” λ¬Έμ œμ—†μ΄ μˆ˜ν–‰λμ§€λ§Œ, μ–΄λ–€ 객체λ₯Ό μ΄μƒν•œ μƒνƒœλ‘œ λ§Œλ“€μ–΄λ†“μ•„μ„œ 미래의 μ•Œ 수 μ—†λŠ” μ‹œμ μ— 이 λ©”μ„œλ“œμ™€λŠ” κ΄€λ ¨ μ—†λŠ” 였λ₯˜λ₯Ό λ‚Ό λ•Œλ‹€.

publicκ³Ό protected λ©”μ„œλ“œλŠ” λ§€κ°œλ³€μˆ˜ 값이 잘λͺ»λμ„ λ•Œ λ˜μ§€λŠ” μ˜ˆμ™Έλ₯Ό λ¬Έμ„œν™”ν•΄μ•Ό ν•œλ‹€.(@throws μžλ°”λ… νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€) μžλ°” 7에 μΆ”κ°€λœ java.util.Objects.requireNonNull λ©”μ„œλ“œλŠ” μœ μ—°ν•˜κ³  μ‚¬μš©ν•˜κΈ°λ„ νŽΈν•˜λ‹ˆ, 더 이상 null 검사λ₯Ό μˆ˜λ™μœΌλ‘œ ν•˜μ§€ μ•Šμ•„λ„ λœλ‹€.

this.strategy = Objects.requiredNonNull(strategy, "μ „λž΅");

μžλ°” 9μ—μ„œλŠ” Objects에 λ²”μœ„ 검사 κΈ°λŠ₯도 λ”ν•΄μ‘Œλ‹€. checkFromIndexSize, chechFromToIndex, checkIndexλΌλŠ” λ©”μ„œλ“œλ“€μΈλ°, null 검사 λ©”μ„œλ“œλ§ŒνΌ μœ μ—°ν•˜μ§€λŠ” μ•Šλ‹€.

public이 μ•„λ‹Œ λ©”μ„œλ“œλΌλ©΄ 단언문(assert)을 μ‚¬μš©ν•΄ λ§€κ°œλ³€μˆ˜ μœ νš¨μ„±μ„ 검증할 수 μžˆλ‹€.

private static void sort(long a[], int offset, int length) {
	assert a != null;
	assert offset >= 0 && offset <= a.length;
	assert length >= 0 && length <= a.length = offset;
	... // 계산 μˆ˜ν–‰
}

단언문은 λͺ‡ 가지 λ©΄μ—μ„œ 일반적인 μœ νš¨μ„± 검사와 λ‹€λ₯΄λ‹€

  • μ‹€νŒ¨ν•˜λ©΄ AssertionErrorλ₯Ό λ˜μ§„λ‹€.
  • λŸ°νƒ€μž„μ— μ•„λ¬΄λŸ° νš¨κ³Όλ„, μ„±λŠ₯ μ €ν•˜λ„ μ—†λ‹€. (단, javaλ₯Ό μ‹€ν–‰ν•  λ•Œ λͺ…λ Ήμ€„μ—μ„œ -ea ν˜Ήμ€ β€”enableassertions ν”Œλž˜κ·Έ μ„€μ •ν•˜λ©΄ λŸ°νƒ€μž„μ— 영ν–₯을 μ€€λ‹€)

μƒμ„±μž μœ νš¨μ„± κ²€μ‚¬λŠ” λ‹€λ₯΄λ‹€

μƒμ„±μž λ§€κ°œλ³€μˆ˜μ˜ μœ νš¨μ„± κ²€μ‚¬λŠ” 클래슀 λΆˆλ³€μ‹μ„ μ–΄κΈ°λŠ” 객체가 λ§Œλ“€μ–΄μ§€μ§€ μ•Šκ²Œ ν•˜λŠ” 게 κΌ­ ν•„μš”ν•˜λ‹€.

public class Person
	public Person(String name, Integer age) {
	    Validate.notNull(name, "name can't be null");
	    Validate.notNull(age, "age can't be null");
	    ...
	}
}

λ©”μ„œλ“œ λ§€κ°œλ³€μˆ˜ μœ νš¨μ„± 검사에도 μ˜ˆμ™ΈλŠ” μžˆλ‹€

μœ νš¨μ„± 검사 λΉ„μš©μ΄ μ§€λ‚˜μΉ˜κ²Œ λ†’κ±°λ‚˜ μ‹€μš©μ μ΄μ§€ μ•Šμ„ λ•Œ, ν˜Ήμ€ 계산 κ³Όμ •μ—μ„œ μ•”λ¬΅μ μœΌλ‘œ 검사가 μˆ˜ν–‰λ  λ•Œλ‹€. 예λ₯Ό λ“€μ–΄ Collections.sort(List)처럼 객체 리슀트λ₯Ό μ •λ ¬ν•˜λŠ” λ©”μ„œλ“œμ˜ 경우 μƒν˜Έ 비ꡐ될 수 μ—†λŠ” νƒ€μž…μ˜ 객체가 λ“€μ–΄ μžˆλ‹€λ©΄ κ·Έ 객체와 비ꡐ할 λ•Œ ClassCastException을 던질 것이닀. λ”°λΌμ„œ λΉ„κ΅ν•˜κΈ° μ•žμ„œ 리슀트 μ•ˆμ˜ λͺ¨λ“  객체가 μƒν˜Έ 비ꡐ될 수 μžˆλŠ”μ§€ 검사해봐야 별닀λ₯Έ 싀읡이 μ—†λ‹€.

public class Collectionsorting 
{ 
    public static void main(String[] args) 
    { 
        // Create a list of strings 
        ArrayList<String> al = new ArrayList<String>(); 
        al.add("Geeks For Geeks"); 
        al.add("Friends"); 
        al.add("Dear"); 
        al.add("Is"); 
        al.add("Superb"); 
  
        /* Collections.sort method is sorting the 
        elements of ArrayList in ascending order. */
        Collections.sort(al); 
  
        // Let us print the sorted list 
        System.out.println("List after the use of" + 
                           " Collection.sort() :\n" + al); 
    } 
}

잘λͺ»λœ μ˜€ν•΄

이번 μ•„μ΄ν…œμ„ "λ§€κ°œλ³€μˆ˜μ— μ œμ•½μ„ λ‘λŠ” 게 μ’‹λ‹€"κ³  ν•΄μ„ν•΄μ„œλŠ” μ•ˆλœλ‹€. 사싀은 κ·Έ λ°˜λŒ€λ‹€. λ©”μ„œλ“œλŠ” μ΅œλŒ€ν•œ λ²”μš©μ μœΌλ‘œ 섀계해야 ν•œλ‹€. λ©”μ„œλ“œκ°€ 건넀받은 κ°’μœΌλ‘œ 무언가 μ œλŒ€λ‘œ 된 일을 ν•  수 μžˆλ‹€λ©΄ λ§€κ°œλ³€μˆ˜ μ œμ•½μ€ μ μ„μˆ˜λ‘ μ’‹λ‹€. ν•˜μ§€λ§Œ κ΅¬ν˜„ν•˜λ €λŠ” κ°œλ… μžμ²΄κ°€ νŠΉμ •ν•œ μ œμ•½μ„ λ‚΄μž¬ν•œ κ²½μš°λ„ λ“œλ¬Όμ§€ μ•Šλ‹€.

정리

λ©”μ„œλ“œλ‚˜ μƒμ„±μžλ₯Ό μž‘μ„±ν•  λ•Œλ©΄ κ·Έ λ§€κ°œλ³€μˆ˜λ“€μ— μ–΄λ–€ μ œμ•½μ΄ μžˆμ„μ§€ 생각해야 ν•œλ‹€. κ·Έ μ œμ•½λ“€μ„ λ¬Έμ„œν™”ν•˜κ³  λ©”μ„œλ“œ μ½”λ“œ μ‹œμž‘ λΆ€λΆ„μ—μ„œ λͺ…μ‹œμ μœΌλ‘œ 검사해야 ν•œλ‹€. 이런 μŠ΅κ΄€μ„ λ°˜λ“œμ‹œ κΈ°λ₯΄λ„둝 ν•˜μž. κ·Έ λ…Έλ ₯은 μœ νš¨μ„± 검사가 μ‹€μ œ 였λ₯˜λ₯Ό 처음 κ±ΈλŸ¬λ‚Ό λ•Œ μΆ©λΆ„νžˆ 보상받을 것이닀.

⚠️ **GitHub.com Fallback** ⚠️