์์, ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ, ๊ฐ์ ๋ฉ์๋, ๋คํ์ฑ
๐ก ์์ Inheritance
: ์ด๋ฏธ ๊ตฌํ๋ ํด๋์ค๋ฅผ ์์ ๋ฐ์์ ์์ฑ/๊ธฐ๋ฅ์ด ํ์ฅ๋๋ ํด๋์ค๋ฅผ ๊ตฌํํ๋ค
: ์์ ํ๋ ํด๋์ค == ์์ ํด๋์ค , ๋ถ๋ชจ ํด๋์ค, super class, parent class : ์ผ๋ฐ์ ์ธ ์๋ฏธ (ํฌ์ ๋ฅ)
์์ ๋ฐ๋ ํด๋์ค == ํ์ ํด๋์ค, ์์ ํด๋์ค, subclass, child class : ๊ตฌ์ฒด์ ์ธ ์๋ฏธ (์ฌ๋)
: class B extends A { // B->A Bํด๋์ค๊ฐ Aํด๋์ค๋ฅผ ์์๋ฐ๋๋ค, Aํด๋์ค๊ฐ Bํด๋์ค์๊ฒ ์์ํ๋ค.
}
: ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์๋ฐ์ ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ฅ + ๋ ๋ง์ ๊ธฐ๋ฅ์ ๊ฐ๋๋ก ์์ฑํ๋ค
cf) ํฉ์ฑ
๐ก ์ ๊ทผ ์ ํ์ ๊ฐ์์ฑ
๐ ์์ : ํด๋์ค ์์ฑ ๊ณผ์
: ํ์ ํด๋์ค ์์ฑ ๋ ๋ ์์ ํด๋์ค๊ฐ ๋จผ์ ์์ฑ๋๋ค
: ์์ํด๋์ค์ ์์ฑ์๊ฐ ํธ์ถ๋๊ณ -> ํ์ํด๋์ค ์์ฑ์๊ฐ ํธ์ถ๋จ
* ํ์ ํด๋์ค์ ์์ฑ์์์๋ ๋ฌด์กฐ๊ฑด ์์ ํด๋์ค์ ์์ฑ์๊ฐ ํธ์ถ๋์ด์ผ ํ๋ค
: ์๋ฌด๊ฒ๋ ์๋๊ฒฝ์ฐ ์์ํด๋์ค ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ํธ์ถํ๊ธฐ ์ํด super(); ๋ฃ์ด์ค (ํ์ํด๋์ค ์์ฑ์์)
: ๋ง์ฝ ์์ ํด๋์ค์ ๊ธฐ๋ณธ์์ฑ์๊ฐ ์๋ ๊ฒฝ์ฐ, ํ์ ํด๋์ค๋ ๋ช ์์ ์ผ๋ก ์์ ํด๋์ค๋ฅผ ํธ์ถํด์ผํ๋ค
( == ๋งค๊ฐ๋ณ์๊ฐ ์๋ ์์ฑ์๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ)
-> super(์์ํด๋์ค์ ๋งค๊ฐ๋ณ์ ๊ฐ); or ํ์ํด๋์ค ์์ฑ์๋ ์์ํด๋์ค์ ๊ฐ์ ๋งค๊ฐ๋ณ์ ๋ฐ๊ณ super(๋งค๊ฐ๋ณ์๊ฐ);
: super(); == ์์์ฌ๋ฌ ํด๋์ค๋ฅผ ํด๋์ค ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค
๐ ์ธ์ ์ฌ์ฉํ ๊น?
: ํ๋์ ํด๋์ค์ ๊ณตํต์ ์ธ ์์๋ฅผ ๋ชจ์ผ๊ณ ๋๋จธ์ง ํด๋์ค๋ ์ด๋ฅผ ์์๋ฐ์ ๋ค์ ๊ฐ๊ฐ ํ์ํ ํน์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๊ตฌํ
: ํ๋์ ํด๋์ค์ ์ฌ๋ฌ ํน์ฑ์ ํ๊บผ๋ฒ์ ๊ตฌํ์ ๋ง์ ์ฝ๋ ๋ด์ ๋ง์ if๋ฌธ ์๊ธธ ์ ์๋ค
: ์ผ๋ฐ์ ์ธ ๊ฐ๋ ๊ณผ ๊ตฌ์ฒด์ ์ธ ๊ฐ๋ ๊ณผ์ ๊ด๊ณ
: ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค๋ฅผ ์์ ํ ๊ด๊ณ
๐ก ์ ์บ์คํ : ์์ ํด๋์ค๋ก ๋ฌต์์ ํ๋ณํ
: ์์ ํด๋์ค ํ์ผ๋ก ๋ณ์๋ฅผ ์ ์ธํ๊ณ ํ์ ํด๋์ค ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค
: ํ์ ํด๋์ค๋ ์์ ํด๋์ค์ ํ์ ์ ๋ดํฌํ๊ณ ์์ผ๋ฏ๋ก ์์ ํด๋์ค๋ก ๋ฌต์์ ํ๋ณํ์ด ๊ฐ๋ฅ
ex) Customer vc = new VIPCustomer();
: VIPCustomer() ์์ฑ์์ ํธ์ถ๋ก ์ธ์คํด์ค๋ ๋ชจ๋ ์์ฑ๋์์ง๋ง, ํ์ ์ด Customer์ด๋ฏ๋ก ์ ๊ทผ ํ ์ ์๋
๋ณ์๋ ๋ฉ์๋๋ Customer์ ๋ณ์์ ๋ฉ์๋๋ค
๐ IS-A ๊ด๊ณ
Animal dog = new Dog(); // Dog is a Animal
: ์์๊ด๊ณ์ ์์ ๋ ์์ ํด๋์ค์ ๊ฐ์ฒด๋ ๋ถ๋ชจ ํด๋์ค์ ์๋ฃํ์ธ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค
* ๋ค๋ง Dog๊ฐ์ฒด๋ฅผ Animal์๋ฃํ์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ, Dog ํด๋์ค์ ์กด์ฌํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋คAnimal ํด๋์ค์ ์๋ ๋ฉ์๋๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค* ๋ถ๋ชจ ๊ฐ์ฒด๊ฐ ์์ ํด๋์ค์ ์๋ฃํ์ ์ฌ์ฉํ ์ ์๋ค (์์๋ง ๋ถ๋ชจ ํด๋์ค ์๋ฃํ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅ)
๐ก ๋ค์ด ์บ์คํ
: ์๋ํ์ผ๋ก ๋ณต๊ท
: ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค๋ก ํ ๋ณํ ๋๋ ๊ฒ์ ๋ฌต์์ ์ผ๋ก ์ด๋ค์ง
: ์๋ ์ธ์คํด์ค์ ํ์ ์ ์ฒดํฌํ๋ ์์ฝ์ด instanceof
๐ก ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ Method Overriding
: ๋ถ๋ชจํด๋์ค์ ๋ฉ์๋๋ฅผ ์์ํด๋์ค๊ฐ ๋์ผํ ํํ๋ก ๋๋ค์ ๊ตฌํํ๋ ํ์ (๋ฉ์๋ ๋ฎ์ด์ฐ๊ธฐ)
* ์์ํด๋์ค์ ๋ฉ์๋๊ฐ ๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค
: ์์ ํด๋์ค์ ์ ์ ๋ ๋ฉ์๋ ์ค ํ์ ํด๋์ค์ ๊ธฐ๋ฅ์ด ๋ง์ง ์๊ฑฐ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ
๊ฐ์ ์ด๋ฆ, ๊ฐ์ ๋ฐํ๊ฐ, ๊ฐ์ ๋งค๊ฐ๋ณ์๋ก ์ฌ์ ์ํ๋ค.
* ์ค๋ฒ๋ก๋ฉ : ์ด๋ฆ ๋๊ฐ์๊ฒ ์ฌ๋ฌ๊ฐ ์๋๊ฑฐ
์ค๋ฒ๋ผ์ด๋ฉ : ๋ฎ์ด์ผ๋ค
๐ก ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ Method Overloading
: ๊ฐ์ ํด๋์ค ์์ ์ ๋ ฅํญ๋ชฉ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ ๋์ผํ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์๋ค
class ZooKeeper {
void feed(Tiger tiger) { // ํธ๋์ด๊ฐ ์ค๋ฉด ์ฌ๊ณผ๋ฅผ ๋์ ธ ์ค๋ค.
System.out.println("feed apple");
}
void feed(Lion lion) { // ์ฌ์๊ฐ ์ค๋ฉด ๋ฐ๋๋๋ฅผ ๋์ ธ์ค๋ค.
System.out.println("feed banana");
}
}
๐ก ๊ฐ์ ๋ฉ์๋
: ํ๋ก๊ทธ๋จ์์ ์ด๋ค ๊ฐ์ฒด์ ๋ณ์๋ ๋ฉ์๋์ ์ฐธ์กฐ๋ ๊ทธ ํ์ ์ ๋ฐ๋ผ ์ด๋ค์ง๋ค
: ํ์ ๊ณผ ์๊ด์์ด ์ค์ ์์ฑ๋ ์ธ์คํด์ค์ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ์๋ฆฌ
+ : ์ฌ์ ์ ๋์ด์ง์ง ์์ผ๋ฉด ์์๋ฐ์ ๋ฉ์๋๋ฅผ ๊ฐ๋ฅดํค๋๋ฐ ์ฌ์ ์ ๋๋ฉด ์๋กญ๊ฒ ์ ์๋ ๋ฉ์๋๋ฅผ ๊ฐ๋ฅดํจ๋ค
ex) Customer vc = new VIPCustomer();
vc.calcPrice(10000);
=> ํ์ ์ Customer์ด์ง๋ง, ์ค์ ์์ฑ๋ ์ธ์คํด์ค์ VIPCustomer ํด๋์ค์ calcPrice()๋ฉ์๋๊ฐ ํธ์ถ๋จ
๐ก ๋คํ์ฑ
: ๊ฐ์ ๋ฉ์๋์ ์ํด ๋คํ์ฑ ๊ตฌํ: ์ฝ๋ํ์ค๋ก ๋ค์ํ ๊ตฌํ์ ํ๋ ๊ฒ
: ํ๋์ ํด๋์ค๋ฅผ ์์ ๋ฐ์ ์ฌ๋ฌ ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ
: ๊ฐ ํด๋์ค๋ง๋ค ๊ฐ์ ์ด๋ฆ์ ์๋ก ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํจ
: ์์ ํด๋์ค ํ์ ์ผ๋ก ์ ์ธ๋ ํ๋์ ๋ณ์๊ฐ ์ฌ๋ฌ ์ธ์คํด์ค์ ๋์ ๋์ด ๋ค์ํ ๊ตฌํ์ด ์คํ๋ ์ ์๋ค
=> ๋ฉ์๋ ์ฌ์ ์
=> ์์๋ฐ์๋ค๊ณ ๊ฐ์ ๋ฉ์๋๊ฐ ์คํ๋๊ฒ์ด ์๋๋ผ ๊ฐ๊ฐ ์ฌ์ ์๋ ๋ฉ์๋๊ฐ ์คํ๋จ
=> ๋งค๊ฐ๋ณ์์ ์๋ฃํ == ์์ ํด๋์ค
* instanceof : ์ด๋ค ๊ฐ์ฒด๊ฐ ํน์ ํด๋์ค์ ๊ฐ์ฒด์ธ์ง๋ฅผ ์กฐ์ฌ
* ์์ ํด๋์ค์ ์ํด ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ ์ธ์ ๋ ๋ถ๋ชจ ํด๋์ค์ ์๋ฃํ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค
* ํ๋์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ๊ฐ์ ์๋ฃํ ํ์ ์ ๊ฐ์ง ์ ์๋๊ฒ == ๋คํ์ฑ