Skip to content

Latest commit

Β 

History

History
47 lines (34 loc) Β· 2 KB

File metadata and controls

47 lines (34 loc) Β· 2 KB

Item 28. λ°°μ—΄λ³΄λ‹€λŠ” 리슀트λ₯Ό μ‚¬μš©ν•˜λΌ

λ°°μ—΄ vs μ œλ„€λ¦­ 리슀트

λ°°μ—΄

  • 배열은 곡변(convariant)
    • 클래슀 Bκ°€ A의 ν•˜μœ„ νƒ€μž…μ΄λΌλ©΄, B[] λ˜ν•œ A[]의 ν•˜μœ„ νƒ€μž…μ΄ 됨

    • μ•„λž˜μ™€ 같은 μ½”λ“œκ°€ 문제 없이 컴파일됨

      Object[] objects = new String[3];
    • μ΄λŸ¬ν•œ 곡변성은 μ•„λž˜μ™€ 같은 μƒν™©μ—μ„œ 문제λ₯Ό μ•ΌκΈ°

      Object[] objects = new String[3];
      objects[0] = Long.valueOf(3); // String 배열에 Long을 μ €μž₯ν•˜λ € ν–ˆμœΌλ―€λ‘œ λΉ„ν—ˆμš©
      • 이 경우 ArrayStoreException이 λ°œμƒ (즉, λŸ°νƒ€μž„ μ—λŸ¬λ₯Ό μ•ΌκΈ°)
  • 배열은 싀체화(reify)κ°€ κ°€λŠ₯
    • λŸ°νƒ€μž„μ—λ„ μžμ‹ μ΄ λ‹΄λŠ” μ›μ†Œμ˜ νƒ€μž…μ„ 확인
      • String 배열인데 Long이 λ“€μ–΄μ™”λ‹€? β‡’ νƒ€μž…μ΄ λ§žμ§€ μ•ŠμœΌλ‹ˆ μ˜ˆμ™Έ λ°œμƒ

μ œλ„€λ¦­ 리슀트

  • μ œλ„€λ¦­μ€ λΆˆκ³΅λ³€(invariant)

    • Bκ°€ A의 ν•˜μœ„ νƒ€μž…μ΄μ–΄λ„ ListλŠ” List와 μ–΄λ–€ ν˜•λ³€ν™˜λ„ λΆˆκ°€ν•¨

    • μ•„λž˜μ™€ 같은 μ½”λ“œλŠ” 컴파일 μ—λŸ¬λ₯Ό λ°œμƒ

      List<Object> objectList = new ArrayList<String>();
  • μ œλ„€λ¦­μ€ 싀체가 μ—†μŒ

    • μ œλ„€λ¦­μ˜ νƒ€μž… μ •λ³΄λŠ” λŸ°νƒ€μž„μ— μ†Œκ±°λ˜κΈ° λ•Œλ¬Έμ—, λŸ°νƒ€μž„μ—λŠ” νƒ€μž… 정보 μ†Œκ±°
      • List κ°μ²΄λŠ” μ‹€μ œλ‘œ μ–΄λ–€ νƒ€μž…μ΄ λ“€μ–΄μ˜€λŠ”μ§€ μƒκ΄€ν•˜μ§€ μ•ŠμŒ
      • μ œλ„€λ¦­μ΄ νƒ€μž…μ„ κ²€μ‚¬ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ”, λŸ°νƒ€μž„μ— ClassCastException이 λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν•˜κΈ° μœ„ν•¨

μ œλ„€λ¦­ 배열은 μ„ μ–Έ λΆˆκ°€λŠ₯

  • μœ„μ™€ 같은 λ°°μ—΄κ³Ό μ œλ„€λ¦­μ˜ 차이 λ•Œλ¬Έμ— μ œλ„€λ¦­ 배열은 선언이 λΆˆκ°€λŠ₯
    • new List<String>[] 와 같은 νƒ€μž…μ€ μ„ μ–Έ λΆˆκ°€
  • λ§Œμ•½ 배열을 μ‚¬μš©ν–ˆμ„ λ•Œ 비검사 ν˜•λ³€ν™˜ κ²½κ³ κ°€ λ‚˜νƒ€λ‚œλ‹€λ©΄, 배열을 리슀트둜 λ°”κΎΈλŠ” 것이 μ’‹μŒ
    • μ œλ„€λ¦­μ€ ν•΄λ‹Ή μžλ£Œν˜•μ˜ 데이터λ₯Ό λ°˜ν™˜ν•˜λ―€λ‘œ νƒ€μž… μ•ˆμ •μ„±μ„ 확보할 수 있음