Intro
๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ ์ดํดํด์ผ ํ๋ค. ํ๋ฒ์ ์ดํด ํ ์๋ ์๋ ๋ถ๋ถ์ด๊ณ , ๊ฒฝํ์ด ํ์ํ๊ณ , ์ ๋ต์ด ์๋ ๋ถ๋ถ์ด๋ผ๊ณ ๋ค๋ค ์ค๋ช
ํ์ง๋ง ์ ๋ฐฐ๋ค์ ๋ชจ๋ ๊ฒฝํ์์ ๋น๋กฏํ ๊ทธ๋ค๋ง์ ํ์ด ์์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค. ์ด๋ป๊ฒ๋ณด๋ฉด ๊ต์ก๋ค์ ๋ค์ผ๋ฉด์ ๊ฐ์ฅ ์ง์งํ๊ฒ ๊ฐ์๋ค์ ๋ณด๊ณ ์๊ธฐ๋ ํ๊ณ , ๋ฌด์ธ๊ฐ ์ด๋ ค์๋ณด๋ค ๊ธด์ฅ๊ฐ์ด ์๋ ๋ถ๋ถ์ด๋ค.
์ด๋ป๊ฒ๋ณด๋ฉด ๋ด๊ฐ Java์ ๋งค๋ ฅ์ ๋น ์ง ๊ฒ๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด ํน์ฑ์ ์ด๋ฆด ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ๋ก , ํจ๋ฌ๋ค์, ํจํด ์ค ํ๋์ธ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object-Oriented Programming)์ ์ ์ด์ธ๋ฆฌ๊ธฐ ๋๋ฌธ์ด ์๋๊น?
๋ฌผ๋ก ๋ง์ ์ข
๋ฅ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ค์ด ์๋ค.
๊ฐ์ฒด ์งํฅ ์ธ์ด๋ผ ๋ถ๋ฆฌ์ฐ๋ ์ธ์ด ์ข
๋ฅ
๊ฐ์ฒด ์งํฅ ์ธ์ด๋ ๋ง์ง๋ง ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ์ง ์์ผ๋ฉด ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ก์จ ์ถฉ๋ถํ ํ์ฉ์ ๋ชปํ๋ ๊ฒ ์๋๊น?
์ ์ฐจ ์งํฅ๊ณผ ๊ฐ์ฒด ์งํฅ์ ์ฐจ์ด
๊ทธ๋ผ ์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๋ชป๋ ๊ฒ์ธ๊ฐ? ์๋๋ค. ๋ฐ๋ผ๋ณด๋ ๊ด์ ์ด ๋ค๋ฅด๊ณ ๋ชฉ์ ์ด ๋ค๋ฅธ ๊ฒ์ด์๋ค.
โข
์ ์ฐจ ์งํฅ ๋ชจ๋ธ๋ง์ ํ๋ก๊ทธ๋จ์ย ๊ธฐ๋ฅ์ค์ฌ์ผ๋ก ๋ฐ๋ผ๋ณด๋ ๋ฐฉ์์ผ๋กย "๋ฌด์์ ์ด๋ค ์ ์ฐจ๋ก ํ ๊ฒ์ธ๊ฐ?"๊ฐ ํต์ฌ์ด ๋๋ค. ์ฆ, ์ด๋ค ๊ธฐ๋ฅ์ ์ด๋ค ์์๋ก ์ฒ๋ฆฌํ๋๊ฐ์ ์ด์ ์ ๋ง์ถ๋ค.
โข
๊ฐ์ฒด ์งํฅ ๋ชจ๋ธ๋ง์ ๊ธฐ๋ฅ์ด ์๋ย ๊ฐ์ฒด๊ฐ ์ค์ฌ์ด ๋๋ฉฐย "๋๊ฐ ์ด๋ค ์ผ์ ํ ๊ฒ์ธ๊ฐ?"๊ฐ ํต์ฌ์ด ๋๋ค. ์ฆ, ๊ฐ์ฒด๋ฅผ ๋์ถํ๊ณ ๊ฐ๊ฐ์ ์ญํ ์ ์ ์ํด ๋๊ฐ๋ ๊ฒ์ ์ด์ ์ ๋ง์ถ๋ค.
๊ฐ์ฒด๊ฐ์ ๊ด๊ณ
๊ฐ์ฒด๋ ๋จ๋
์ผ๋ก ์กด์ฌํ ์ ์์ง๋ง ๋๋ถ๋ถ ๋ค๋ฅธ ๊ฐ์ฒด์ ๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋ค. ๊ด๊ณ์ ์ข
๋ฅ์๋ ์งํฉ ๊ด๊ณ, ์ฌ์ฉ ๊ด๊ณ, ์์ ๊ด๊ณ๊ฐ ์๋ค.
1.
์งํฉ ๊ด๊ณ
โข
์์ฑํ๊ณผ ๋ถํ์ ๊ด๊ณ๋ฅผ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ์๋์ฐจ๋ ์์ง, ํ์ด์ด, ํธ๋ค ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋๋ฏ๋ก ์๋์ฐจ์ ๋ถํ๋ค์ ์งํฉ ๊ด๊ณ๋ผ๊ณ ๋ณผ ์ ์๋ค.
2.
์ฌ์ฉ ๊ด๊ณ
โข
๋ค๋ฅธ ๊ฐ์ฒด์ ํ๋๋ฅผ ์ฝ๊ณ ๋ณ๊ฒฝํ๊ฑฐ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ด๊ณ๋ฅผ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ์ฌ๋์ด ์๋์ฐจ์๊ฒ ๋ฌ๋ฆฐ๋ค, ๋ฉ์ถ๋ค ๋ฑ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ฌ๋๊ณผ ์๋์ฐจ๋ ์ฌ์ฉ ๊ด๊ณ๋ผ๊ณ ๋ณผ ์ ์๋ค.
3.
์์ ๊ด๊ณ
โข
๋ถ๋ชจ์ ์์ ๊ด๊ณ๋ฅผ ๋งํ๋ค. ์๋์ฐจ๊ฐ ๊ธฐ๊ณ์ ํน์ง(ํ๋, ๋ฉ์๋)์ ๋ฌผ๋ ค๋ฐ๋๋ค๋ฉด ๊ธฐ๊ณ(๋ถ๋ชจ)์ ์๋์ฐจ(์์)๋ ์์ ๊ด๊ณ์ ์๋ค๊ณ ๋ณผ ์ ์๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง
1.
์ถ์ํ(abstraction) โ abstract class or abstract method, Not yet defined
2.
์บก์ํ(encapsulation) โ cover up exposed vars by public, protected, default, private(getter/setter)
3.
์์์ฑ(inheritance) โ Child class states are defined by extended from Parents classโs states
4.
๋คํ์ฑ(polymorphism) โ enable Overload and Override method to the origin
a.
๋์ ๋ฐ์ธ๋ฉ(Dynamic Binding) โ The origin will be cover over by request method which Overridden or Overloaded method
๋๋ ์ด๊ฒ๋ค์ด ๊ฐ๊ฐ ์ด๋ค ๊ฒ๋ค์ธ์ง ํ์
ํด์ผ ํ๋ค.
[1] ์ถ์ํ(abstraction)
โข
๊ฐ์ฒด๋ค์ ๊ณตํต์ ์ธ ํน์ง(๊ธฐ๋ฅ, ์์ฑ)์ ๋์ถํ๋ ๊ฒ
โฆ
๋ง์น ํฌ์ ๋ฅ๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋๋ฌผ์ ์๋๊ฒ์ฒ๋ผ.
โฆ
๊ฐ, ๊ณ ์์ด, ๋ง ๋ฑ ์์ ํด๋์ค๋ก ํ์๋๊ธฐ ์ํ ํด๋์ค
โฆ
๊ณตํต ๋ถ๋ชจ(๋์ด, ์ด๋ฆ, ๋ชธ๋ฌด๊ฒ, ํค ๋ฑ) ๋ฅผ ์ ์ํ๊ธฐ ์ํ ํด๋์ค๊ฐ ์ถ์ ํด๋์ค๋ค.
โช
๊ทธ ์๋ ์ถ์ ๋ฉ์๋๋ ์ ์ธ๋ถ๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด๋ ๊ผญ ์์ ํด๋์ค์์ ์คํ๋ถ์ ๋ํ ๋ด์ฉ์ ์ค๋ฒ๋ผ์ด๋๋ก ๊ตฌํํด์ฃผ์ด์ผ ํ๋ค.
โข
๊ฐ์ฒด์งํฅ์ ๊ด์ ์์๋ ํด๋์ค๋ฅผ ์ ์ํ๋ ๊ฒ์ ์ถ์ํ๋ผ๊ณ ํ ์ ์๋ค.(ํด๋์ค๊ฐ ์๋ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ ์กด์ฌ ex.JavaScript)
์ถ์ํด๋์ค์ ์ธํฐํ์ด์ค์ ์ฐจ์ด?
์์๊ฐ๋
, ์ธ๋ถ๊ฐ๋
์ฒ๋ผ ํฌํจ๊ด๊ณ์ธ๊ฒ = ์ถ์ํด๋์ค
๋ญ๊ฐ ์๊ฒฉ์ฆ, ๊ธฐ์ ๊ฐ์๊ฒ? = ์ธํฐํ์ด์ค โ ์ธํฐํ์ด์ค๋ ์๋ final์ด๋ค โ final์จ์คํ์์๋ค โ ์ธํฐํ์ด์ค ๋ด์์ ๊ฐ์ ํ ๋นํด์ผ ํจ โ ์ธ๋ถ์์ ๋ณ๊ฒฝ๋ชปํจ final์ด๊ธฐ ๋๋ฌธ โ ์ถ์ํด๋์ค์ฒ๋ผ ์ถ์๋ฉ์๋๊ฐ ์ธํฐํ์ด์ค ๋ด์ ์๋ค๋ฉด implements๋ฐ์ ์์์ ํด๋น ์ถ์๋ฉ์๋์ ์คํ๋ถ๋ฅผ ๊ตฌํํด์ผํจ!
[2] ์บก์ํ(encapsulation)
โข
์ค์ ๋ก ๊ตฌํ๋๋ ๋ถ๋ถ์ ์ธ๋ถ์ ๋๋ฌ๋์ง ์๋๋ก ํ์ฌ ์ ๋ณด๋ฅผ ์๋ํ ์ ์๋ค.
โฆ
์ด๊ฒ์ ์จ๊ธด๋ค๋ ์๋ฏธ ๋ณด๋ค๋ ๊ฐ๋ฐ์์ ์๋๋๋ก ํ๋ก๊ทธ๋จ์ด ์๋ํ๋๋ก ํ๋ ๊ฒ์ผ๋ก ๋ฐ๋ผ๋ด์ผ ํ๋ค. getter์ setter๋ฅผ ํตํด์๋ง private ํ๋๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๊ฒ ํ๋ ๊ฒ์ด ์์ด๋ค. ๋ง์น setter์์ ์กฐ๊ฑด์ ๊ฑธ์ด๋์ด์ ์กฐ์์ ๋ฒ์๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์์.
โข
๊ฐ์ฒด๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ์ญํ ์ ํ ์ ์๋๋ก ๋ฐ์ดํฐ์ ๊ธฐ๋ฅ์ ํ๋๋ก ๋ฌถ์ด ๊ด๋ฆฌํ๋ ๊ฒ
โข
์ฝ๋๊ฐ ๋ฌถ์ฌ์์ด์ ์ค๋ฅ๊ฐ ์์ด ํธ๋ฆฌํ๋ค.
โข
๋ฐ์ดํฐ๋ฅผ ๋ณด์ด์ง ์๊ณ ์ธ๋ถ์ ์ํธ์์ฉ์ ํ ๋๋ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ํต์ ์ ํ๋ค. ๋ณดํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ค์ด์ ์
๊ทธ๋ ์ด๋ํด ์ฌ์ฉํ ์ ์๋ค.
[3] ์์์ฑ(inheritance)
โข
ํ๋์ ํด๋์ค๊ฐ ๊ฐ์ง ํน์ง(ํจ์, ๋ฐ์ดํฐ)์ ๋ค๋ฅธ ํด๋์ค๊ฐ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ๋ ๊ฒ
โฆ
์๋ค : โ๋ ์๋ฒ์ง์ ์ง์ฃผ์๊ฐ ๊ฐ์! ๋ด ์ฃผ์๋ ์๋ฒ์ง ์ฃผ์๋ก ์ฐพ์๋ ๋ผ!โ
โข
์ด๋ฏธ ์์ฑ๋ ํด๋์ค๋ฅผ ๋ฐ์์ ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฒ
โข
๊ธฐ์กด ์ฝ๋๋ฅผ ์ฌํ์ฉํด์ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ์ฒด์งํฅ ๋ฐฉ๋ฒ์ ์ค์ํ ๊ธฐ๋ฅ ์ค ํ๋์ ์ํ๋ค.
[4] ๋คํ์ฑ(polymorphism)
โข
์ฝ๊ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋์ํ๋ ํจ์๋ฅผ ๋์ผํ ์ด๋ฆ์ผ๋ก ํธ์ถํ๋ ๊ฒ
โฆ
์๋ค : โ๋๋ ์๋ฒ์ง๋ ์ธ์ฌ๋ง์ด ๋ฌ๋ผโ
โข
๋์ผํ ๋ช
๋ น์ ํด์์ ์ฐ๊ฒฐ๋ ๊ฐ์ฒด(์ธ์คํด์ค)์ ์์กดํ๋ ๊ฒ
โข
์ค๋ฒ๋ผ์ด๋ฉ(Overriding), ์ค๋ฒ๋ก๋ฉ(Overloading)
โฆ
์ค๋ฒ๋ผ์ด๋ฉ(Overriding) - ๋ถ๋ชจํด๋์ค์ ๋ฉ์๋์ ๊ฐ์ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉฐ ๋งค๊ฐ๋ณ์๋ ๊ฐ๋ ๋ด๋ถ ์์ค๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ
โช
์๋ค : โ๋ ์๋ฒ์ง๋ ๋ค๋ฅธ ์ผ์ ํด!โ
โฆ
์ค๋ฒ๋ก๋ฉ(Overloading) - ๊ฐ์ ์ด๋ฆ์ ํจ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ํ ํ ๋งค๊ฐ๋ณ์๋ฅผ ๋ค๋ฅด๊ฒ ํ์ฌ ๊ฐ์ ์ด๋ฆ์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ํธ์ถํ์ฌ ์ฌ์ฉํ๋ ๊ฒ
โช
ํ์์ : โํ์์ ์
๋ ฅํ๋ฉด ๋ ์ถ๊ฐ๋ก ํ์์์ด๋ผ๊ณ ์๊ฐ๋ง์ํดโ
[+@] ๋์ ๋ฐ์ธ๋ฉ(Dynamic Binding) - ๋คํ์ฑ์ ์ผํ
โฆ
๊ฐ์ ํจ์(Java์์ ๋ฉ์๋)๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ์ปดํ์ผํ ๋, ๋ฐ์ธ๋ฉ์ ์คํ์๊ฐ์ ๊ฒฐ์ ํ๋ ๊ฒ.
โฆ
ํ์ ํด๋์ค์ ๊ฐ์ฒด์ ๋ํด, ๊ธฐ๋ณธ ํด๋์ค์ ํฌ์ธํฐ๋ก ๊ฐ์ ํจ์๊ฐ ํธ์ถ๋ ๋ ์ผ์ด๋๋ค.
โช
์ค์๋์ด ์๋ ค์ค ์ค๋ฒ๋ผ์ด๋ฉ ๋์๋ ๊ฐ์ฒด์ ๋ฉ์๋ ์ถ๋ ฅ๋ฌธ์์ด์ด ์๋ณธ ํด๋์ค์ ์ถ๋ฌธ์์ด์ด ์๋, ํ์ ํด๋์ค์์ ํ ๋น๋ ๊ฐ์ด ๋ฎ์ด์์์ง๋ ๊ฒ์ ์๊ฐํ์.
โฆ
ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋์ ๋ฐ์ธ๋ฉ์ ํตํด ํ์ ํด๋์ค์ ์ค๋ฒ๋ผ์ด๋ฉ ๋ ํจ์๊ฐ ์คํ
โฆ
ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฐ์ฑ์ ๋์ฌ์ฃผ๋ฉฐ ํ์ ํด๋์ค์์ ์ฌ์ ์ํ ํจ์์ ํธ์ถ์ ๋ณด์ฅ(๋คํ ๊ฐ๋
์คํ)
์ฝ๋๋ก ์ฐ์ตํ๊ธฐ
[1] ์ถ์ํ(abstraction)
package oop_concepts_Abstraction;
import oop_concepts_Encapsulation.Member;
public class Main {
public static void main(String[] args){
Animal cat = new Cat("Hore",12,12.3,"Korea");
Animal dog = new Dog("LALA",5,15.6,"States");
Animal chicken = new Chicken("Coo",2,4.3,"Japan");
cat.bark();
dog.bark();
chicken.bark();
//-------------- Encapsulation example test
Member member = new Member();
System.out.println(member.memberNum); //memberNum์ public์ด๋ผ ๋ค๋ฅธ ํจํค์ง์์๋ ์ด์ฉ ํ ์ ์์.
//System.out.println(member.memo);
//System.out.println(member.id); // private, default ์ญ์ ๋ค๋ฅธ ํจํค์ง์์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
System.out.println(member.getId()); //private id์ง๋ง, getId() getter๋ public์ด๋ผ ์ฌ์ฉ ๊ฐ๋ฅ!
}
}
Java
๋ณต์ฌ
package oop_concepts_Abstraction;
public abstract class Animal {
String name;
int age;
double speed;
String country;
public Animal(String name, int age, double speed, String country) {
this.name = name;
this.age = age;
this.speed = speed;
this.country = country;
}
public void move() {//๊ณตํต์ ์ธ ์์ง์
System.out.println("์ด๋ํ๋ค");
}
public void eat() {//๊ณตํต์ ์ธ ๋จน๋ ํ์
System.out.println("๋จน๋๋ค");
}
public void play() {//๊ณตํต์ ์ธ ๋
ธ๋ ํ์
System.out.println("์ฅ๋์น๋ค");
}
public abstract void bark(); //์ง๋ ์๋ฆฌ๋ ๋๋ฌผ๋ง๋ค ๋ค๋ฅด๋ฏ๋ก ์ถ์๋ฉ์๋๋ก ์์ฑ
// ์ถ์ ๋ฉ์๋๋ฅผ ํ๋๋ผ๋ ๊ฐ์ง๋ ํด๋์ค๋ ๋ฐ๋์ ์ถ์ ํด๋์ค๊ฐ ๋์ด์ผ ํจ
}
Java
๋ณต์ฌ
[2] ์บก์ํ(encapsulation)
package oop_concepts_Encapsulation;
public class Main {
public static void main(String[] args) {
Member member = new Member();
System.out.println(member.memberNum); //Member Class์ public ์ ๊ทผ ์ ์ด์๋ก ์ ์ธ๋ ํ๋ memberNum์ ์ธ์คํด์ค๋ก ๋ฐ๋ก ์ ๊ทผ ๊ฐ๋ฅ.
//System.out.println(member.id); //private ์ ๊ทผ ์ ์ด์๋ก ์ ์ธ๋ id ๋ฑ์ ์ธ์คํด์ค์์ ๋ชป๊บผ๋
//System.out.println(member.age); //private ์ ๊ทผ ์ ์ด์๋ก ์ ์ธ๋ id ๋ฑ์ ์ธ์คํด์ค์์ ๋ชป๊บผ๋
System.out.println(member.getId()); //private์ธ ํ๋๋ ํด๋์ค์์ getter, setter๋ฅผ ํตํด ์ ๊ทผ ํ ์ ์์.
System.out.println(member.getAge()); //private์ธ ํ๋๋ ํด๋์ค์์ getter, setter๋ฅผ ํตํด ์ ๊ทผ ํ ์ ์์.
}
}
Java
๋ณต์ฌ
package oop_concepts_Encapsulation;
public class Member {
public int memberNum; //public ์ ๊ทผ ์ ์ด์๋ก ๋ชจ๋ ๊ฐ์ฒด์์ ์ ๊ทผ ๊ฐ๋ฅ. (ํด๋น ํ๋ก์ ํธ ๋ด)
private String id; //private ์ ๊ทผ ์ ์ด์๋ก ํด๋น ํด๋์ค(member) ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ.
private String pw;
private int age;
String memo = "Memo"; //default ์ ๊ทผ ์ ์ด์ ๋์ผํ ํจํค์ง ์์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
//getter
public String getId() {
return id;
}
public String getPw() {
return pw;
}
public int getAge() {
return age;
}
//setter
public void setId(String id) {
this.id = id;
}
public void setPw(String pw) {
this.pw = pw;
}
public void setAge(int age) {
this.age = age;
}
}
Java
๋ณต์ฌ
[3] ์์์ฑ(inheritance)
package oop_concepts_Inheritance;
public class Main {
public static void main(String[] args) {
//์ฌ๋ > ์์ฌ ์ ๊ฐ์ ์์๊ด๊ณ๊ฐ ์๋ค.
//type ๋ณ์๋ช
= new ํด๋์ค๋ช
( );
Doctor doc = new Doctor(); //์์ฌํด๋์ค ํ์
์ ์์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด,
doc.heal(); //์์ฌ ๊ธฐ์ ์ธ ์น๋ฃ๋ฅผ ์ธ ์ ์๋ค
System.out.println(doc.age); //๋ํ ์ฌ๋(๋ถ๋ชจํด๋์ค)์ ์์ ๋ฐ์๊ธฐ ๋๋ฌธ์ ๋์ด๋ผ๋ ์ ๋ณด๋ ๋ณผ ์ ์๋ค.
Person doc2 = new Doctor(); //ํ์ง๋ง ์ฌ๋ํด๋์ค ํ์
์ ์์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด,
//doc2.heal(); //์์์ธ ์์ฌ ํด๋์ค์ ๊ธฐ์ ์ ์ธ ์ ์๋ค. doc2๋ผ๋ ์ฐธ์กฐ ๋ณ์์ ํ์
์ด Person์ด๋ผ๋ ํด๋์ค๊ธฐ ๋๋ฌธ์ Person์ ๋ฅ๋ ฅ๋ฐ์ ๋ชป์ด๋ค.
doc2.eat();//์ด๊ฑด ์ฌ๋์ ๊ธฐ๋ณธ ๊ธฐ์ ์ด๋ค.
doc2.play();//์ด๊ฑด ์ฌ๋์ ๊ธฐ๋ณธ ๊ธฐ์ ์ด๋ค.
//Doctor doc3 = new Person(); //์ ์ด์ ์์ ํด๋์ค ๋ณ์๋ ๋ถ๋ชจ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ ํ ์ ์๋ค.
Student stu = new Student();
stu.study();
Person stu2 = new Person(); //์ด๊ฑด ๋ช
์นญ๋ง stu์ง ์ฌ๋ํ์
์ ์ฌ๋๊ฐ์ฒด๋ค.
Person stu3 = new Student();
stu3.play();//Personํด๋์ค์ ๋ฉ์๋๋ค.
}
}
Java
๋ณต์ฌ
package oop_concepts_Inheritance;
public class Person {
int age;
int weight;
int height;
void eat(){
System.out.println("๋จน์ด์");
}
void sleep(){
System.out.println("์์");
}
void play(){
System.out.println("๋์์");
}
}
Java
๋ณต์ฌ
package oop_concepts_Inheritance;
public class Doctor extends Person{
public void heal(){
System.out.println("์์ฌ๋ผ ์น๋ฃํด์");
}
}
Java
๋ณต์ฌ
[4] ๋คํ์ฑ(polymorphism) + ๋ฐ์ธ๋ฉ
package oop_concepts_Polymorphism;
public class Main {
public static void main(String[] args) {
Superman sup = new Superman(25,56,123,"john",321,212);
System.out.println("age:"+sup.age);//๋ถ๋ชจ๋ก๋ถํฐ ์์๋ฐ์๊ฒ
System.out.println("weight:"+sup.weight);//๋ถ๋ชจ๋ก๋ถํฐ ์์๋ฐ์๊ฒ
System.out.println("height:"+sup.height);//๋ถ๋ชจ๋ก๋ถํฐ ์์๋ฐ์๊ฒ
System.out.println("name:"+sup.name);//์ค๋ฒ๋ก๋ฉํ ๋งค๊ฐ๋ณ์
System.out.println("power:"+sup.power);//์ค๋ฒ๋ก๋ฉํ ๋งค๊ฐ๋ณ์
System.out.println("speed:"+sup.speed);//์ค๋ฒ๋ก๋ฉํ ๋งค๊ฐ๋ณ์
sup.attack();//๋ณธ์ธ
sup.move();// --> Override ๋ถ๋ชจ์ ๋ด๋ถ ์์ค ์ฌ์ ์ <<------ Superman์ด ๋ฎ์, Dynamic Binding
}
}
Java
๋ณต์ฌ
package oop_concepts_Polymorphism;
public class Human {
int age=22;
int weight=22;
int height=22;
public Human(int age, int weight, int height){
}
public void move(){
System.out.println("์์ง์ฌ์");
}
public void stop(){
System.out.println("๋ฉ์ถฐ์");
}
}
Java
๋ณต์ฌ
package oop_concepts_Polymorphism;
public class Superman extends Human{
String name;
int power; //superman ๋ง์ ํน์ ๋ฅ๋ ฅ
int speed; //superman๋ง์ ํน์ ๋ฅ๋ ฅ (๋ถ๋ชจ๋ก ์์๋ฐ์ง ์์๊ฒ์)
public Superman(int age, int weight, int height, String name, int power, int speed){
super(age, weight, height); // ๊ฐ์ฒด ์์ฑ ์ age, weight๋ ๋ถ๋ชจํด๋์ค์ ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ํ์ฉ<< ์ ์ ๋ฐ์ธ๋ฉ Static binding ๋ ์ํ
this.name = name;
this.power = power; //๊ฐ์ฒด (์ธ์คํด์ค)์์ฑ ์ ์ธ์๋ก ์ ๋ฌํ์ฌ ๋งค๊ฐ๋ณ์๋ก ๋ค์ด์จ power, speed๋ฅผ this๋ฅผ ํตํด ๊ฐ์ฒด(์ธ์คํด์ค)์ power์ ํ ๋น
this.speed = speed;
}
public void move(){
System.out.println("์ฌ๋น ๋ฅด๊ฒ"); // <<<<<------ ๋ถ๋ชจ์๊ฒ๋ ์๋ move()์ง๋ง ์์์์ ์ค๋ฒ๋ก๋ฉํด์ ๊ฐ์ฒด๋ Superman ํ์
์ด๋ผ ์ด๊ฒ์ด ์คํ๋จ.(๋ฎ์ด์ง)
System.out.println("์์ง์ด๊ณ ");
System.out.println("ํผํ๊ธฐ!!");
}
public void fly(){
System.out.println("๋ ๋ผ์");
}
public void attack(){
System.out.println("๋๋ ค์");
}
}
Java
๋ณต์ฌ