โ ๋คํ์ฑโ
1.๋คํ์ฑ์ด๋
- ๋คํ์ฑ์ด๋ : ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ํํ๋ฅผ ๊ฐ์ง๋ค, ํ๋์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ์ง ์ ํ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ.
- ๋คํ์ฑ์ ์์์ ์ ์ ์กฐ๊ฑด์ผ๋ก ํจ.
- ๋คํ์ฑ์ ์ํด ์๋ฐ๋ ์์ํด๋์ค๊ฐ ๋ถ๋ชจํด๋์ค ํ์ ์ ๊ฐ์ง์ ์๋๋ก ํ์ฉํจ. ์ฆ, ๋ถ๋ชจ ํ์ ์ ๋ชจ๋ ์์๊ฐ์ฒด๊ฐ ๋์ ๋ ์ ์์.
โถ๋คํ์ฑ ์์
//ํด๋์คA์ A๋ฅผ ์์๋ฐ๋ B์Cํด๋์ค
class A{}
class B extends A{}
class C extends A{}
public class Poly{
//ํด๋์คํ์
๋ฉค๋ฒ๋ณ์
A a = new A();
B b = new B();
//๋คํ์ฑ
A a1 = b; // A a1 = new B();
// B -> Aํ ๋ฐํ
// ๋ถ๋ชจ ํ์
A์ ์์ํ์
B๋์
// ์์ํด๋์ค๊ฐ ๋ถ๋ชจํด๋์ค ํ์
์ ๊ฐ์ง๊ฒ๋จ.
A a2 = new B();
A a3 = new C();
//์ฐ์ ์์ ๋์ ๋ฐ์ดํธ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ฏ์ด ๋คํ์ฑ์ ๋๊ฐ์ด ์๊ฐํ๋ฉด ๋จ
byte x = 1;
int y = x; // byte -> int
//++Object๋ ์๋ฐ์ ๊ฐ์ฅ ์์๊ฐ์ฒด๋ก ๋ชจ๋ ๊ฐ์ฒด ์ ์ฅ ๊ฐ๋ฅํจ.
Object o1 = new A();
Object o2 = new B();
Object o3 = "java";
++์ฐ์ ์์๊ฐ ๋ฎ์ ๋ฐ์ดํฐํ์์ ๋์ ๋ฐ์ดํฐ ํ์ผ๋ก ๋ณํํ๋ ๊ฒ๊ณผ ๋คํ์ฑ์ ๋๊ฐ์ด ์๊ฐํ๋ฉด ๋จ++
++Object๋ ์๋ฐ์ ๊ฐ์ฅ ์์๊ฐ์ฒด์++
โถ๋คํ์ฑ ์คํ์์
//<Main๋ฌธ>
public class MainClass {
public static void main(String[] args){
Child c = new Child();
c.method1(); // ์์๋ฐ์ ๋ฉ์๋
c.method2(); // ์ค๋ฒ๋ผ์ด๋ฉ๋ ๋ฉ์๋
c.method3(); // ์์์ 3๋ฒ ๋ฉ์๋
Parent p = c; // Parent p = new Child();
System.out.println(p == c); //Child๊ฐ Parent๊ธฐ๋ฅ์ ๊ฐ์ง --> true
p.method1();
p.method2(); //์ค๋ฒ๋ผ์ด๋ฉ ๋ ๋ฉ์๋ ์คํ๋จ. --> ์ค๋ฒ๋ผ์ด๋ฉ ์ฝ๋ ์ฐ์ !
p.method3(); //Child๊ฐ Parent๊ธฐ๋ฅ์ ๊ฐ์ง๊ฒ ๋์์ผ๋ฏ๋ก ์ฌ์ฉ๋ถ๊ฐ
//
// ์์ ์์๋ "Child๊ฐ ๊ฐ๋ ๊ณ ์ ํ ์ฑ์ง ์์ด๋ฒ๋ฆผ"์ ๋ณด์ฌ์ฃผ๋ ์์
//
}
}
2. ํด๋์ค ์บ์คํ (Casting)
- ํด๋์ค ์บ์คํ = ํด๋์ค ๊ฐ์ ํ๋ณํ
- ๊ฐ์ ํ์ ๋ณํ์ ๋ถ๋ชจ ํ์ ์ ์์ํ์ ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋งํจ.
- ๊ฐ์ฒด์์ ํ์ ์บ์คํ ์ฌ์ฉํ๋ ค๋ฉด ์ฐ์ Promotion์ด ์ผ์ด๋์ผ ํจ. ์ฆ, ๋ถ๋ชจํ์ ์ผ๋ก ํ๋ฒ ํ๋ณํ์ด ๋ ์์ ๊ฐ์ฒด๋ง ๊ฐ์ ํ์ ๋ณํ ์ฌ์ฉ๊ฐ๋ฅ.
- Promotion์ผ์ด๋๋ฉด ์์ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ์ฌ์ ์๋์ง ์์ ๋ฉ์๋ ์ฌ์ฉํ ์ ์๋ค๋ ๋จ์ ์ด ์์.
โ ์ด ๋จ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด ๊ฐ์ ํ์ ๋ณํ ์ฌ์ฉํด ์์ ๋ฉ์๋ ํธ์ถํ๋ ๋ฐฉ๋ฒ ์ฌ์ฉ.
โถ๋คํ์ฑ ์์
์์์ ์ฌ์ฉํ๋ Parentํด๋์ค์ Child๋ ํด๋์ค๋ฅผ ์ฌ์ฉํด๋ณด๋ ์์
//<Main๋ฌธ>
public class MainClass{
public static void main(String[] args){
// Child๊ฐ Parentํ์
์ผ๋ก ํ๋ฒ ํ๋ณํ์ด ๋๋ฉด์ Child๊ฐ ๊ฐ๋ ๊ณ ์ ํ์ฑ์ง์ ์์ด๋ฒ๋ฆผ
Parent p = new Child();
c.method3(); //์คํ๋์ง ์์.
//์์ ๋จ์ ์ ๋ณด์ํ๊ธฐ์ํด ๋ง๋ค์ด์ง Casting(๊ฐ์ ํ๋ณํ)
//Castingํตํด ๊ณ ์ ํ ์ฑ์ง ๋์ฐพ์์ด.
Child c = (Child)p;
System.out.println(c == p); // true
c.method1();
c.method2();
c.method3(); //๊ณ ์ ํ ์ฑ์ง ๋์ฐพ์์ ์คํ๋จ
}
}
์์ Main๋ฌธ์์ Chlid๊ฐ Parentํด๋์ค ํ์ ์ผ๋ก ๋ณ๊ฒฝ๋์์๋๋ Child๋ง์ ๊ณ ์ ์ฑ์ง์ด ์ฌ๋ผ์ ธ Child๋ด ๋ฉ์๋ method3์ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ๋จ.
ํ์ง๋ง, ๊ฐ์ ํ๋ณํ์ ์ฌ์ฉํด Child์ ๊ณ ์ ์ฑ์ง์ ์์๋ณต๊ท์์ผ method3์ ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค.
โถ์ค์!โ
3. ๋คํ์ฑ์ ์ฉ
โถ๋ฉค๋ฒ๋ณ์์ ๋คํ์ฑ
- ๋ฉค๋ฒ๋ณ์๋ฅผ ๋ถ๋ชจํ์ผ๋ก ์ ์ธํด ํ์ ํต์ผ
โถ๋งค๊ฐ๋ณ์์ ๋คํ์ฑ
- ๋ณดํต ๋ฉ์๋ ํธ์ถ์์๋ ๋ฉ์๋ ์ ์ธ๋ถ์์ ์ง์ ํ ๋ฐ์ดํฐ ํ์ ๊ณผ ์ผ์นํ๋ ๋งค๊ฐ๊ฐ์ ์ ๋ฌํด ํธ์ถํ์ง๋ง, ๋งค๊ฐ ๋ณ์์ ๋คํ์ฑ ์ ์ฉํ๋ฉด ์์๊ฐ์ฒด ์ ๋ฌํ ์ ์์.
โถ๋ฐฐ์ด์ ์ ์ฉํ ๋คํ์ฑ
๋ถ๋ชจํด๋์คํ ๋ฐฐ์ด์ ์์ํด๋์ค ์ธ์ ๋ ์ ์ฅ ๊ฐ๋ฅ.
โถ๋คํ์ฑ์ ์ฌ์ฉํ์ง ์์ ์ฝ๋ฉ๊ณผ, ๊ทธ ์ฝ๋ฉ์ ๋คํ์ฑ์ ์ฌ์ฉํด ๋ํ๋ธ ์ฝ๋.โ
++์์ ์์ ๋ค์ ํตํด ๋คํ์ฑ์ ์ฌ์ฉํ์ง ์์ ๋๋ณด๋ค ๋คํ์ฑ์ ์ฌ์ฉํ์ ๊ฒฝ์ฐ,
์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ๋จ์์ฑ์ด ๋์์ง์ ๋ณผ์์์++
'FOR SW ENGINEER๐ฉโ๐ป > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JAVA_์ถ์ํ(Abstract) (0) | 2021.09.13 |
---|---|
JAVA_์ ์ ์ ํ์ (Static) (0) | 2021.09.12 |
๊ตญ๋นJAVA์์ DAY-13 (0) | 2021.09.02 |
๊ตญ๋นJAVA์์ DAY-12 (0) | 2021.09.01 |
๊ตญ๋นJAVA์์ DAY-11(2) (0) | 2021.08.28 |