
<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 ํ์ ์ผ๋ก ๋ค์ํ ๊ฐ์ฒด๋ฅผ ๋ฐ์ ์ ์๊ฒ ์ค๊ณํ๋ฉด์๋, ๊ตฌ์ฒด์ ์ธ ํ์ ์ ๋ฐ๋ผ ์ ์ ํ ์ฒ๋ฆฌํ ์ ์๋ค.