<Car ํด๋ž˜์Šค>

package javaInt1Lecture.lang.object.poly;

public class Car {
    public void move(){
        System.out.println("์ž๋™์ฐจ ์ด๋™");
    }
}

 

<Dogํด๋ž˜์Šค>

package javaInt1Lecture.lang.object.poly;

public class Dog {
    public void sound(){
        System.out.println("๋ฉ๋ฉ");
    }
}

 

<ObjectPolyMain>

package javaInt1Lecture.lang.object.poly;

public class ObjectPolyExample1 {

    public static void main(String[] args) {
        Dog dog = new Dog();
        Car car = new Car();

        Object o = dog;

        action(dog);
        action(car);
    }
    private static void action(Object obj) {
     // obj.sound(); // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜. Object๋Š” sound()๊ฐ€ ์—†์Œ
     // obj.move();

     // ๊ฐ์ฒด์— ๋งž๋Š” ๋‹ค์šด ์บ์ŠคํŒ… ํ•„์š”
     if(obj instanceof Dog dog) {
         dog.sound();
     } else if (obj instanceof Car car) {
         car.move();
     }
    }
}

 

Object๋Š” ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ž„์„ ์„ค๋ช…ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋Š” ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.


 

1. ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์—…์บ์ŠคํŒ…

Object o = dog;

- o = dog๋Š” ์—…์บ์ŠคํŒ…์˜ ์˜ˆ์ด๋‹ค . 

์—…์บ์ŠคํŒ…์€ Dog ํƒ€์ž… ๊ฐ์ฒด๋ฅผ Object ํƒ€์ž…์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•œ๋‹ค.

๋ชจ๋“  ํด๋ž˜์Šค๋Š” Java์—์„œ Object ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.

o ๋ณ€์ˆ˜๋Š” Object ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” Dog ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋‹ค. 

 

2. action ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ

action(dog);
action(car);

- action๋ฉ”์„œ๋“œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ Objectํƒ€์ž…์„ ๋ฐ›๋Š”๋‹ค. 

์™œ Object๋กœ ๋ฐ›์„๊นŒ?

์ด๋Š” ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

action๋ฉ”์„œ๋“œ๊ฐ€ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด (Dog,Car, ๋˜๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด)๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๊ฒƒ์ด๋‹ค. 

 

3. action๋ฉ”์„œ๋“œ์˜ ๋‚ด๋ถ€ ๋กœ์ง

private static void action(Object obj) {
     if (obj instanceof Dog dog) {
         dog.sound();
     }
}

- ์™œ obj๋ฅผ Dog์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋‚˜?

obj๋Š” Objectํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค. 

Objectํƒ€์ž…์—๋Š” sound() ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๊ธฐ ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” obj.sound() ํ˜ธ์ถœ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ instanceof๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ.

obj instanceof Dog๋Š” obj๊ฐ€ ์‹ค์ œ๋กœ Dog ๊ฐ์ฒด์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

๋งž๋‹ค๋ฉด, ํƒ€์ž… ๋ณ€ํ™˜(๋‹ค์šด ์บ์ŠคํŒ…)์„ ํ†ตํ•ด Dogํด๋ž˜์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ(sound())๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. 


์ดํ•ด ํฌ์ธํŠธ : ๋‹ค์šด ์บ์ŠคํŒ…์ด ์™œ ํ•„์š”ํ•œ๊ฐ€?

์ƒํ™ฉ ์š”์•ฝ:

1. obj๋Š” Object ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” obj๊ฐ€ ์–ด๋–ค ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ธ์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค.

2. sound()๋ฉ”์„œ๋“œ๋Š” Dogํด๋ž˜์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ์ด๋‹ค.

3. ๋”ฐ๋ผ์„œ, obj๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ Dogํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜(๋‹ค์šด์บ์ŠคํŒ…)ํ•ด์•ผ sound()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋‹ค์šด ์บ์ŠคํŒ…์˜ ๊ณผ์ •:

if (obj instanceof Dog dog) {
    dog.sound(); // ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค์šด ์บ์ŠคํŒ…๋œ dog์—์„œ sound()ํ˜ธ์ถœ
}

- instanceof ํ™•์ธ : obj๊ฐ€ ์‹ค์ œ๋กœ Dogํƒ€์ž…์ธ์ง€ ํ™•์ธํ•œ๋‹ค. 

- ๋‹ค์šด ์บ์ŠคํŒ…:

ํƒ€์ž… ํ™•์ธ ํ›„, obj๋ฅผ Dogํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๋ณ€์ˆ˜ dog์— ์ €์žฅํ•œ๋‹ค.

์ด์ œ dog๋Š” Dog ํƒ€์ž…์œผ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์ธ์‹๋˜๋ฏ€๋กœ, sound()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

 


instanceof๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ๋‹ค์‹œ ์ดํ•ดํ•˜๊ธฐ.

 

1. instanceof์˜ ๊ธฐ๋ณธ ์—ญํ• 

if (obj instanceof Dog dog) {
    dog.sound();
}

 ์—ญํ•  

- obj instanceof Dog:

obj๊ฐ€ ์‹ค์ œ๋กœ Dog ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

ํƒ€์ž… ์ถ”๋ก  (dog):

Java 16 ์ดํ›„์—์„œ๋Š” instanceof๋กœ ํƒ€์ž… ํ™•์ธ๊ณผ ๋™์‹œ์—, ๋‹ค์šด ์บ์ŠคํŒ…๋œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„ ์ฝ”๋“œ์—์„œ๋Š” dog๋ผ๋Š” ๋ณ€์ˆ˜๋กœ Dog ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. ์™œ instanceof๊ฐ€ ํ•„์š”ํ•œ๊ฐ€?

instanceof๋Š” ๋‹ค์šด ์บ์ŠคํŒ…์ด ์•ˆ์ „ํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.

 

์˜ˆ์‹œ: instanceof ์—†์ด ๋‹ค์šด ์บ์ŠคํŒ…

Dog dog = (Dog) obj; // ๋‹ค์šด ์บ์ŠคํŒ…
dog.sound();

๋ฌธ์ œ:

๋งŒ์•ฝ obj๊ฐ€ Dog๊ฐ€ ์•„๋‹ˆ๋ผ Car ๊ฐ์ฒด๋ผ๋ฉด, ClassCastException ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

ํ•ด๊ฒฐ์ฑ…:

๋‹ค์šด ์บ์ŠคํŒ… ์ „์— instanceof๋ฅผ ์‚ฌ์šฉํ•ด obj๊ฐ€ Dog ํƒ€์ž…์ธ์ง€ ํ™•์ธํ•˜๋ฉด ์•ˆ์ „ํ•˜๋‹ค.

 

 

instanceof๋ฅผ ์‚ฌ์šฉํ•œ ์•ˆ์ „ํ•œ ๋‹ค์šด ์บ์ŠคํŒ…

if (obj instanceof Dog dog) {
    dog.sound(); // ์•ˆ์ „ํ•˜๊ฒŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
} else {
    System.out.println("obj๋Š” Dog ํƒ€์ž…์ด ์•„๋‹™๋‹ˆ๋‹ค.");
}

obj instanceof Dog๊ฐ€ true์ผ ๋•Œ๋งŒ obj๋ฅผ Dog ํƒ€์ž…์œผ๋กœ ๋‹ค์šด ์บ์ŠคํŒ…ํ•œ๋‹ค.

์ด๋กœ์จ ๋ถˆํ•„์š”ํ•œ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

 

 

3. instanceof์˜ ๋™์ž‘ ์›๋ฆฌ

 

์—…์บ์ŠคํŒ… ํ›„ instanceof ์ฒดํฌ

Object obj = new Dog();
if (obj instanceof Dog) {
    System.out.println("obj๋Š” Dog ํƒ€์ž…์ž…๋‹ˆ๋‹ค.");
}

1. Object obj = new Dog();:

  • Dog ๊ฐ์ฒด๊ฐ€ Object ํƒ€์ž… ๋ณ€์ˆ˜์— ์ €์žฅ๋œ๋‹ค.

  • ์ด ๊ฒฝ์šฐ, obj๋Š” Object ํƒ€์ž…์œผ๋กœ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” Dog ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

2. obj instanceof Dog:

  • Java๋Š” obj๊ฐ€ ์‹ค์ œ๋กœ Dog ํƒ€์ž…์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

  • true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ด๋Š” obj๊ฐ€ Dog ๊ฐ์ฒด์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

 

4. instanceof์˜ ์ฝ”๋“œ ํ๋ฆ„

private static void action(Object obj) {
    if (obj instanceof Dog dog) {
        dog.sound();
    }
}

1. Object obj๊ฐ€ ์–ด๋–ค ๊ฐ์ฒด์ธ์ง€ ํ™•์ธ:

  obj๋Š” Object ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋˜์—ˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” Dog๋‚˜ Car ๊ฐ™์€ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด์ผ ์ˆ˜ ์žˆ๋‹ค.

 

2. instanceof๋ฅผ ํ†ตํ•ด ํƒ€์ž… ํ™•์ธ:

   obj instanceof Dog: obj๊ฐ€ Dog ํƒ€์ž…์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

    • true: obj๊ฐ€ Dog ๊ฐ์ฒด์ž„. ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค์šด ์บ์ŠคํŒ… ๊ฐ€๋Šฅ.

    • false: obj๊ฐ€ Dog ๊ฐ์ฒด๊ฐ€ ์•„๋‹˜.

 

3. ๋‹ค์šด ์บ์ŠคํŒ… ๋ฐ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ:

obj instanceof Dog dog:

ํ™•์ธ ํ›„, obj๋ฅผ Dog ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ณ€์ˆ˜ dog์— ์ €์žฅ.

์ด์ œ dog.sound() ํ˜ธ์ถœ ๊ฐ€๋Šฅ.

 

 instanceof์˜ ํ•ต์‹ฌ
1. ๊ฐ์ฒด์˜ ์‹ค์ œ ํƒ€์ž… ํ™•์ธ:
• obj instanceof Dog๋Š” obj๊ฐ€ Dog ํด๋ž˜์Šค ๋˜๋Š” ๊ทธ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ธ์ง€ ํ™•์ธ.

2. ๋‹ค์šด ์บ์ŠคํŒ…์˜ ์•ˆ์ „์„ฑ ๋ณด์žฅ:
• instanceof๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ํ™•์ธํ•˜๋ฉด, ๋‹ค์šด ์บ์ŠคํŒ… ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€.

3. ๋‹คํ˜•์„ฑ ํ™œ์šฉ:
• Object ํƒ€์ž…์œผ๋กœ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ์„ค๊ณ„ํ•˜๋ฉด์„œ๋„, ๊ตฌ์ฒด์ ์ธ ํƒ€์ž…์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

+ Recent posts