GiantStepDEV

λ‹€μš΄ μΊμŠ€νŒ…μ΄λž€?

  • μƒμœ„ ν΄λž˜μŠ€ν˜•μœΌλ‘œ λ³€ν™˜ λ˜μ—ˆλ˜ ν•˜μœ„ 클래슀λ₯Ό λ‹€μ‹œ μ›λž˜ μžλ£Œν˜•μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것

instanceof

  • ν˜• λ³€ν™˜ κ°€λŠ₯ μ—¬λΆ€ 확인(μ°Έμ‘° λ³€μˆ˜κ°€ μ°Έμ‘°ν•˜κ³  μžˆλŠ” 객체(μΈμŠ€ν„΄μŠ€)의 μ‹€μ œ νƒ€μž…μ„ μ•ŒκΈ° μœ„ν•΄ μ‚¬μš©)

μ‰¬μš΄ 예λ₯Ό λ“€μ–΄.. 상속 관계λ₯Ό 생각해 보면 λͺ¨λ“  인간은 λ™λ¬Όμ΄μ§€λ§Œ λͺ¨λ“  동물은 인간이 μ•„λ‹™λ‹ˆλ‹€.
λ”°λΌμ„œ λ‹€μš΄ μΊμŠ€νŒ…μ„ ν•˜κΈ° 전에 μƒμœ„ 클래슀둜 ν˜• λ³€ν™˜λœ μΈμŠ€ν„΄μŠ€μ˜ μ›λž˜ μžλ£Œν˜•μ„ 확인해야 λ³€ν™˜ν•  λ•Œ 였λ₯˜λ₯Ό 막을 수 μžˆμŠ΅λ‹ˆλ‹€.
public class Animal {
    public void move() {
        System.out.println("동물이 μ›€μ§μž…λ‹ˆλ‹€.");
    }
}

class Human extends Animal {
    @Override
    public void move() {
        System.out.println("μ‚¬λžŒμ€ 두 발둜 κ±·μŠ΅λ‹ˆλ‹€.");
    }
    public void readBook() {
        System.out.println("μ‚¬λžŒμ΄ 책을 μ½μŠ΅λ‹ˆλ‹€.");
    }
}

class Tiger extends Animal {
    @Override
    public void move() {
        System.out.println("ν˜Έλž‘μ΄κ°€ λ„€ 발둜 λœλ‹ˆλ‹€.");
    }
    public void hunting() {
        System.out.println("ν˜Έλž‘μ΄κ°€ 사λƒ₯을 ν•©λ‹ˆλ‹€.");
    }
}

class Eagle extends Animal {
    @Override
    public void move() {
        System.out.println("λ…μˆ˜λ¦¬κ°€ ν•˜λŠ˜μ„ λ‚©λ‹ˆλ‹€.");
    }
    public void fly() {
        System.out.println("λ…μˆ˜λ¦¬κ°€ λ‚ κ°œλ₯Ό μ­‰ 펴고 멀리 λ‚ μ•„κ°‘λ‹ˆλ‹€.");
    }
}
import java.util.ArrayList;

public class DownCasting {
    ArrayList<Animal> aniList = new ArrayList<>();
    public static void main(String[] args) {
        DownCasting downCasting = new DownCasting();
        downCasting.addAnimal();
        downCasting.testCasting();
    }
    public void addAnimal() {
        // ArrayList에 μΆ”κ°€λ˜λ©΄μ„œ νƒ€μž…μ΄ Animal ν˜•μœΌλ‘œ λ³€ν™˜
        aniList.add(new Human());
        aniList.add(new Tiger());
        aniList.add(new Eagle());
        for(Animal e : aniList) e.move();
    }
    public void testCasting() {
        for(int i = 0; i < aniList.size(); i++) {
            Animal ani = aniList.get(i); // List의 ν•΄λ‹Ή 인덱슀의 값을 κ°€μ Έμ˜΄
            // Human νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜ κ°€λŠ₯ μ—¬λΆ€ λ¬Όμ–΄λ΄„..(= λ‹€μš΄μΊμŠ€νŒ…)
            if(ani instanceof Human) {
                Human h = (Human) ani;
                h.readBook();
            } else if(ani instanceof Tiger) {
                Tiger t = (Tiger) ani;
                t.hunting();
            } else if(ani instanceof Eagle) {
                Eagle e = (Eagle) ani;
                e.fly();
            } else {
                System.out.println("지원 λ˜μ§€ μ•ŠλŠ” ν˜• μž…λ‹ˆλ‹€.");
            }
        }
    }
}
μ‚¬λžŒμ€ 두 발둜 κ±·μŠ΅λ‹ˆλ‹€.
ν˜Έλž‘μ΄κ°€ λ„€ 발둜 λœλ‹ˆλ‹€.
λ…μˆ˜λ¦¬κ°€ ν•˜λŠ˜μ„ λ‚©λ‹ˆλ‹€.
μ‚¬λžŒμ΄ 책을 μ½μŠ΅λ‹ˆλ‹€.
ν˜Έλž‘μ΄κ°€ 사λƒ₯을 ν•©λ‹ˆλ‹€.
λ…μˆ˜λ¦¬κ°€ λ‚ κ°œλ₯Ό μ­‰ 펴고 멀리 λ‚ μ•„κ°‘λ‹ˆλ‹€.
profile

GiantStepDEV

@kongmi

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!