Language/JAVA

[JAVA] μΊμŠ€νŒ… (Casting)

κ΅ λ―Ό 2024. 9. 1. 16:55

πŸ“Œ μΊμŠ€νŒ… (Casting) : 데이터 νƒ€μž…μ„ λ‹€λ₯Έ 데이터 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •μœΌλ‘œ, ν˜•λ³€ν™˜μ΄λΌκ³ λ„ λΆˆλ¦°λ‹€.

 

μΊμŠ€νŒ…μ˜ ν•„μš”μ„±

  • λ‹€ν˜•μ„± : μ˜€λ²„λΌμ΄λ”©λœ ν•¨μˆ˜λ₯Ό λΆ„λ¦¬ν•΄μ„œ ν™œμš©ν•  수 μžˆλ‹€
  • 상속 : μΊμŠ€νŒ…μ„ 톡해 λ²”μš©μ μΈ ν”„λ‘œκ·Έλž˜λ°μ΄ κ°€λŠ₯ν•˜λ‹€.

 

μΊμŠ€νŒ…μ˜ μ’…λ₯˜

  • μ—…μΊμŠ€νŒ…(upcasting) : μžμ‹ ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ 클래슀둜 ν˜•λ³€ν™˜ν•˜λŠ” 것
    • 데이터 손싀 없이 μˆ˜ν–‰λœλ‹€.
    • μžλ™ λ³€ν™˜ : μžλ°” μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•œλ‹€. 
    • μ œν•œλœ μ ‘κ·Ό : μ—…μΊμŠ€νŒ…λœ κ°μ²΄λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œ μ •μ˜λœ λ©€λ²„μ—λ§Œ μ ‘κ·Όν•  수 있음.
      (μžμ‹ ν΄λž˜μŠ€μ—μ„œ μΆ”κ°€λœ λ©€λ²„λŠ” μ‚¬μš©ν•  수 μ—†λ‹€.)
      class Animal {
          public void makeSound() {
              System.out.println("Animal sound");
          }
      }
      
      class Dog extends Animal {
          public void bark() {
              System.out.println("Woof");
          }
      }
      
      public class Main {
          public static void main(String[] args) {
              Dog dog = new Dog();
              Animal animal = dog; // μ—…μΊμŠ€νŒ…
              animal.makeSound(); // Animal의 λ©”μ„œλ“œ 호좜
              // animal.bark(); // 였λ₯˜: Animal ν΄λž˜μŠ€μ—λŠ” bark() λ©”μ„œλ“œκ°€ 없기에 μ‚¬μš© λΆˆκ°€
          }
      }
    • μƒλž΅μ„ ꢌμž₯ν•œλ‹€.
  • λ‹€μš΄μΊμŠ€νŒ…(downcasting) : 큰 크기의 데이터 νƒ€μž…μ„ μž‘μ€ 크기의 데이터 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 
    • μ—…μΊμŠ€νŒ…μ΄ λ˜μ–΄ μžμ‹ μ˜ κ³ μœ ν•œ νŠΉμ„±μ„ μžƒμ€ μžμ‹ 클래슀λ₯Ό λ‹€μ‹œ μ›λž˜μ˜ ν˜•μœΌλ‘œ 볡원 μ‹œμΌœμ£ΌλŠ” 것
    • λŸ°νƒ€μž„ μ˜ˆμ™Έ : λΆ€λͺ¨ 클래슀 νƒ€μž…μ˜ 객체가 μ‹€μ œλ‘œ μžμ‹ 클래슀의 μΈμŠ€ν„΄μŠ€μΈμ§€ 확인해야 ν•œλ‹€. 
    • λ‹€μš΄μΊμŠ€νŒ…μ„ 톡해 μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ •μ˜λœ 멀버에 μ ‘κ·Όν•  수 μžˆλ‹€.
      class Animal {
          public void makeSound() {
              System.out.println("Animal sound");
          }
      }
      
      class Dog extends Animal {
          public void bark() {
              System.out.println("Woof");
          }
      }
      
      public class Main {
          public static void main(String[] args) {
              Animal animal = new Dog(); // μ—…μΊμŠ€νŒ…
              Dog dog = (Dog) animal; // λ‹€μš΄μΊμŠ€νŒ…
              dog.bark(); // Dog의 λ©”μ„œλ“œ 호좜
          }
      }

 

μ—…μΊμŠ€νŒ…μ΄ μ•ˆμ „ν•˜κ³  λ‹€μš΄μΊμŠ€νŒ…μ΄ μœ„ν—˜ν•œ 이유

: μ—…μΊμŠ€νŒ…μ˜ 경우 λ©”λͺ¨λ¦¬ 상에 μΈμŠ€ν„΄μŠ€κ°€ λͺ¨λ‘ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— 항상 μ•ˆμ „ν•˜μ—¬ μΊμŠ€νŒ…μ„ μƒλž΅ν•΄λ„ 였λ₯˜κ°€ λ‚˜μ§€ μ•Šμ§€λ§Œ, λ‹€μš΄μΊμŠ€νŒ…μ˜ 경우 μΈμŠ€ν„΄μŠ€μ— μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν•˜μœ„ νƒ€μž…μœΌλ‘œ μΊμŠ€νŒ…ν•˜λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

(ClassCastException 였λ₯˜ λ°œμƒ)

 

 

λ‹€μš΄μΊμŠ€νŒ…μ˜ μ•ˆμ „μ„± 확인 - instanceof ν‚€μ›Œλ“œ μ‚¬μš©

: λ‹€μš΄μΊμŠ€νŒ…μ€ μˆ˜ν–‰ν•˜κΈ° μ „ 객체가 μ‹€μ œλ‘œ μžμ‹ 클래슀의 μΈμŠ€ν„΄μŠ€μΈμ§€ ν™•μΈν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

if (animal instanceof Dog) {
    Dog dog = (Dog) animal; // μ•ˆμ „ν•œ λ‹€μš΄μΊμŠ€νŒ…
    dog.bark();
} else {
    System.out.println("The object is not an instance of Dog.");
}

 

 

 

'Language > JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JAVA] BufferedReader  (0) 2024.09.14
[JAVA] throws IOException  (0) 2024.09.13
[JAVA] νŒ¨ν‚€μ§€ (Package)  (1) 2024.08.30
[JAVA] μ»¬λ ‰μ…˜ (Collection)  (0) 2024.08.29
[JAVA] μ œλ„€λ¦­ (Generic)  (4) 2024.08.28