Skip to content

Latest commit

Β 

History

History
70 lines (50 loc) Β· 2.97 KB

File metadata and controls

70 lines (50 loc) Β· 2.97 KB

Item 42. 읡λͺ… ν΄λž˜μŠ€λ³΄λ‹€λŠ” λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜λΌ

λžŒλ‹€ μ΄μ „μ˜ ν•¨μˆ˜ νƒ€μž… ν‘œν˜„

  • Java 8의 λžŒλ‹€κ°€ λ„μž…λ˜κΈ° μ΄μ „μ—λŠ”, λ©”μ„œλ“œμ— νŠΉμ • ν–‰μœ„λ₯Ό μˆ˜ν–‰ν•˜λŠ” ν•¨μˆ˜ νƒ€μž…μ„ λ„˜κΈ°κΈ° μœ„ν•΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©
  • μ‹€μ œ argument둜 λ„˜κΈ°λŠ” 것은 이 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 읡λͺ… 클래슀

μ˜ˆμ‹œ - 비ꡐ κ°€λŠ₯μ΄λΌλŠ” μ„±μ§ˆμ„ λ‚˜νƒ€λ‚΄λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€ Comparable

public interface Comparable<T> {
    public int compareTo(T o);
}
public static void main(String[] args) {
    Collections.sort(list, new Comparator<String>() {
        @Override
        public int compare(String s1, String s2) {
            return String.CASE_INSENSITIVE_ORDER.compare(s1, s2);
        }
    });
}

λžŒλ‹€ λ„μž… μ΄ν›„μ˜ ν•¨μˆ˜ νƒ€μž… ν‘œν˜„

  • μœ„μ˜ Comparable 같은 μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λΌκ³  함
    • ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λž€, 단 ν•˜λ‚˜μ˜ λ©”μ„œλ“œλ§Œμ„ κ°–λŠ” μΈν„°νŽ˜μ΄μŠ€
  • 이 ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λŠ” Java 8 μ΄ν›„λ‘œ λžŒλ‹€ λ°©μ‹μœΌλ‘œ λŒ€μ²΄ κ°€λŠ₯

μ˜ˆμ‹œ - Comparable μ˜ˆμ‹œ λžŒλ‹€λ‘œ λŒ€μ²΄

public static void main(String[] args) {
    Collections.sort(list, (s1, s2) -> String.CASE_INSENSITIVE_ORDER.compare(s1, s2));
}
  • 이 λ•Œ λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…μ€ μ»΄νŒŒμΌλŸ¬κ°€ context에 따라 μΆ”λ‘ 
    • 좔둠에 μ‹€νŒ¨ν•˜λŠ” 경우 컴파일 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€κ³ , 이 λ•Œμ—λŠ” κ°œλ°œμžκ°€ λͺ…μ‹œν•΄μ€˜μ•Ό 함

λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜μ§€ 말아야 ν•  λ•Œ

μ•„λž˜μ˜ 경우λ₯Ό μ œμ™Έν•œ κ²½μš°μ—λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ₯Ό λžŒλ‹€λ‘œ λŒ€μ²΄ν•˜λŠ” 것이 μ’‹μŒ

λžŒλ‹€μ˜ λ™μž‘(μ½”λ“œ)이 κΈΈμ–΄μ§ˆ λ•Œ

  • λžŒλ‹€λŠ” 이름이 μ—†μœΌλ©°(읡λͺ…), λ¬Έμ„œν™”ν•  수 μ—†μŒ
  • λ”°λΌμ„œ ν•˜λ‚˜μ˜ λžŒλ‹€ λ‚΄μ—μ„œ μ½”λ“œ 쀄 μˆ˜κ°€ λ§Žμ•„μ§€λ©΄ 였히렀 가독성을 μ €ν•˜μ‹œν‚¬ 수 있음
    • μ΅œλŒ€ μ„Έ 쀄 μ•ˆμ— 끝내고, λΆˆκ°€λŠ₯ν•˜λ‹€λ©΄ λžŒλ‹€λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μͺ½μ„ κ³ λ €ν•΄μ•Ό 함

좔상 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 인자둜 λ„˜κΈ°λ €κ³  ν•  λ•Œ

  • λžŒλ‹€λŠ” ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ§Œ λŒ€μ²΄ν•  수 있음
  • λ”°λΌμ„œ 좔상 클래슀의 좔상 λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•΄ 인자둜 λ„˜κΈ°λ €κ³  ν•  λ•Œλ‚˜, λ©”μ„œλ“œκ°€ μ—¬λŸ¬ 개인 μΈν„°νŽ˜μ΄μŠ€/좔상 클래슀의 κ΅¬ν˜„μ²΄λ₯Ό λ„˜κ²¨μ•Ό ν•  λ•Œμ—λŠ” 읡λͺ… 클래슀λ₯Ό μ‚¬μš©ν•΄μ•Ό 함

thisκ°€ 자기 μžμ‹ μ„ μ°Έμ‘°ν•΄μ•Ό ν•  λ•Œ

  • λžŒλ‹€ ν•¨μˆ˜μ˜ thisλŠ” 읡λͺ… 클래슀의 λ°”κΉ₯ μΈμŠ€ν„΄μŠ€λ₯Ό 가리킴
    • λžŒλ‹€λŠ” ν•¨μˆ˜λ‘œ μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έ
  • 읡λͺ… 클래슀의 thisλŠ” 읡λͺ… 클래슀 μžμ‹ μ„ 가리킴
    • 읡λͺ… ν΄λž˜μŠ€λŠ” 클래슀둜 μ·¨κΈ‰λ˜κΈ° λ•Œλ¬Έ
  • λ”°λΌμ„œ, thisλ₯Ό 톡해 자기 μžμ‹ μ˜ μ°Έμ‘°λ₯Ό μ΄μš©ν•΄μ•Ό ν•˜λŠ” μ½”λ“œμΈ κ²½μš°μ—λ„ 읡λͺ… 클래슀λ₯Ό μ‚¬μš©ν•΄μ•Ό 함

직렬화해야 ν•˜λŠ” ν•¨μˆ˜ 객체인 경우

  • λžŒλ‹€μ˜ 직렬화 ν˜•νƒœλŠ” κ΅¬ν˜„λ³„(ex: 가상머신별)둜 λ‹€λ₯Ό 수 있음
  • λ”°λΌμ„œ, 직렬화해야 ν•œλ‹€λ©΄ λ°˜λ“œμ‹œ λžŒλ‹€ λŒ€μ‹  클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•΄μ•Ό 함