์˜ค๋ฅธ์ชฝ ํƒ€์ž…์— ์™ผ์ชฝ์— ์žˆ๋Š” ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž…์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๋Œ€์ž…ํ•ด๋ณด๋ฉด ๋œ๋‹ค.
    [ ์ธ์Šคํ„ด์Šค + instanceof + ๊ฐ์ฒด ํƒ€์ž…]
    ๋Œ€์ž…์ด ๊ฐ€๋Šฅํ•˜๋ฉด true, ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉด false๊ฐ€ ๋œ๋‹ค.
    new Parent() instanceof Parent
    Parent p = new Parent() - ๊ฐ™์€ ํƒ€์ž… true

    new Child() instanceof Parent
    Parent p = new Child() - ๋ถ€๋ชจ๋Š” ์ž์‹์„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค. true

    new Parent() instanceof Child
    Child c = new Parent() - ์ž์‹์€ ๋ถ€๋ชจ๋ฅผ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค . false

    new Child() instanceof Child
    Child c = new Child() - ๊ฐ™์€ ํƒ€์ž… true

 

instanceof๋Š” Java์—์„œ ๊ฐ์ฒด๊ฐ€ ํŠน์ • ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค.

์ฃผ๋กœ ๊ฐ์ฒด์˜ ๋Ÿฐํƒ€์ž„ ํƒ€์ž…์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ํƒ€์ž… ์บ์ŠคํŒ… ์ „์— ์•ˆ์ „์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

 

๊ตฌ๋ฌธ

 

object  instanceof  ClassName

 

object: ๊ฒ€์‚ฌํ•˜๋ ค๋Š” ๊ฐ์ฒด

ClassName: ๊ฒ€์‚ฌํ•  ๋Œ€์ƒ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค

 

๊ฒฐ๊ณผ

true: object๊ฐ€ ClassName ๋˜๋Š” ๊ทธ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๋ฉด

false: ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด


์„ค๋ช… ๋ฐ ์˜ˆ์ œ

1. ๊ฐ™์€ ํƒ€์ž…์ผ ๊ฒฝ์šฐ:

Parent p = new Parent();
System.out.println(p instanceof Parent); // true

Parent ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ๋‹น์—ฐํžˆ Parent ํƒ€์ž…์ด๋ฏ€๋กœ true.

 

2. ๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์ž์‹์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒฝ์šฐ:

Parent p = new Child();
System.out.println(p instanceof Parent); // true

 

Child๋Š” Parent๋ฅผ ์ƒ์†๋ฐ›์•˜์œผ๋ฏ€๋กœ, ๋ถ€๋ชจ ํƒ€์ž…(Parent) ๋ณ€์ˆ˜๋กœ ์ž์‹ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Child ๊ฐ์ฒด๋„ Parent ํƒ€์ž…์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด true.

 

3. ์ž์‹ ํƒ€์ž…์œผ๋กœ ๋ถ€๋ชจ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ ค๋Š” ๊ฒฝ์šฐ:

Parent p = new Parent();
System.out.println(p instanceof Child); // false

 

Parent ๊ฐ์ฒด๋Š” Child ํƒ€์ž…์ด ์•„๋‹ˆ๋ฏ€๋กœ false.

 

4. ๊ฐ™์€ ์ž์‹ ํƒ€์ž…์ผ ๊ฒฝ์šฐ:

Child c = new Child();
System.out.println(c instanceof Child); // true

Child ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋Š” ๋‹น์—ฐํžˆ Child ํƒ€์ž…์ด๋ฏ€๋กœ true.

 

5. ์ธํ„ฐํŽ˜์ด์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

interface MyInterface {}
class Parent implements MyInterface {}
Parent p = new Parent();
System.out.println(p instanceof MyInterface); // true

Parent๊ฐ€ MyInterface๋ฅผ ๊ตฌํ˜„ํ–ˆ์œผ๋ฏ€๋กœ, p๋Š” MyInterface ํƒ€์ž…์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ๋‹ค.


์ค‘์š” ํฌ์ธํŠธ

1. ์ƒ์† ๊ด€๊ณ„์™€ ๋Œ€์ž… ๊ฐ€๋Šฅ์„ฑ์— ๊ธฐ๋ฐ˜:

instanceof๋Š” ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น ํƒ€์ž…์œผ๋กœ ๋Œ€์ž… ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.

๋ถ€๋ชจ๋Š” ์ž์‹์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ž์‹์€ ๋ถ€๋ชจ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.

2. null์€ ํ•ญ์ƒ false:

Parent p = null;
System.out.println(p instanceof Parent); // false

null์€ ์–ด๋–ค ํด๋ž˜์Šค ํƒ€์ž…์—๋„ ์†ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ false.

 

3. ์ปดํŒŒ์ผ ์‹œ์  vs ๋Ÿฐํƒ€์ž„ ์‹œ์ :

instanceof๋Š” ๋Ÿฐํƒ€์ž„์— ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ํ™•์ธํ•œ๋‹ค.

์ปดํŒŒ์ผ ์‹œ์ ์—๋Š” ํƒ€์ž… ๊ฒ€์‚ฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.


์ •๋ฆฌ

 

instanceof๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๋‹ค:

ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๊ณ ์ž ํ•  ๋•Œ

๋‹ค์šด์บ์ŠคํŒ…์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ

๋‹คํ˜•์„ฑ(polymorphism)๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ์—์„œ ๋Ÿฐํƒ€์ž„ ํƒ€์ž…์„ ํŒ๋ณ„ํ•˜๊ณ ์ž ํ•  ๋•Œ

 

if (p instanceof Child) {
    Child c = (Child) p;
    // ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค์šด์บ์ŠคํŒ…ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
}

+ Recent posts