- 1์ฅ์์ ๋ณธ ๋ฐ์ ์ฌ๋ฅผ ๋ณด๋ฉด ๊ฐ๋ฐ์(์ธ๊ฐ)์ ๋ฐฐ๋ คํ๊ธฐ ์ํ ๊ณผ์ ์์ ์ ์ ์๋ค.
- ํ์ง๋ง 2์ฅ์์ ๋ณธ ์ ์ฐจ์ /๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ์ ์ธ๊ฐ์ด ๊ธฐ๊ณ๋ฅผ ์ดํดํ๋ ค๋ ๋
ธ๋ ฅ์์ ํฌ๊ฒ ๋ฒ์ด๋์ง ๋ชปํ๋ค.
- ํนํ ํฌ์ธํฐ๋ ๊ธฐ๊ณ ์์ค์ผ๋ก ๋๋์ด๋ฅผ ๋ฎ์ถ์ง ์์ผ๋ฉด ์ดํดํ๊ธฐ ํ๋ค๋ค.
- ๊ธฐ๊ณ ์ข
์์ ์ธ ๊ฐ๋ฐ์์ ๋ฒ์ด๋, ์ฐ๋ฆฌ๊ฐ ๋์ผ๋ก ๋ณด๊ณ ๋๋ผ๊ณ ์ํํ๋ ํ์ค ์ธ๊ณ์ฒ๋ผ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ด ๊ฐ์ฒด์งํฅ์ด๋ค.
- ํ์ค ์ธ๊ณ๋ฅผ ๋ฐ์ํ๋ค๋ ์ฆ๊ฑฐ๊ฐ ๊ฐ์ฒด๋ค.
- Devide and Conquer : ๋ช๋ง ๋ผ์ธ์ ๋ช ๋ น์ด๋ฅผ ๋ ผ๋ฆฌ์ ๋จ์(ํจ์)๋ก ๋๋์ด ๋ธ๋กํํด์ ์์ฑํ์๋ ๊ฒ
- ํจ์์ ๋ชฉ์ : 1. ์ค๋ณต์ ๊ฑฐ, 2. ๋ ผ๋ฆฌ์ ๋ถํ
-
๋์ผ๋ก ๋ณด์ฌ์ง๋ ๊ฒ, ์์ผ๋ก ๋ง์ ธ์ง๋ ๊ฒ, ๋จธ๋ฆฌ์์ผ๋ก ์์๋๋ ๋ชจ๋ ๊ฒ์ ์ฌ๋ฌผ(Object)์ด๋ค.
-
"์ฐ๋ฆฌ๊ฐ ์ฃผ๋ณ์์ ์ฌ๋ฌผ๋ก ์ธ์งํ๋ ๋ฐฉ์๋๋ก ํ๋ก๊ทธ๋๋ฐ ํ ์ ์์ง ์๊ฒ ๋๊ฐ?" โก๏ธ ๊ฐ์ฒด ์งํฅ์ ์ถ๋ฐ
-
0๊ณผ 1๋ก ๋๋ณ๋๋ ๊ธฐ๊ณ(์ปดํจํฐ)์ ๋ง์ถฐ ์ฌ๊ณ ํ๋ ๋ฐฉ์์ ๋ฒ๋ฆฌ๊ณ ํ์ค์ธ๊ณ๋ฅผ ์ธ์งํ๋ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋จ์ ๋ง๋ค์๋ ๊ฒ
-
์ฌ๋ฌผ์ด๋?
- ์ธ์์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฒ์ ์ฌ๋ฌผ, ์ฆ ๊ฐ์ฒด(Object)๋ค - ๊ฐ๊ฐ์ ์ฌ๋ฌผ์ ๊ณ ์ ํ๋ค. - ์ฌ๋ฌผ์ ์์ฑ์ ๊ฐ๋๋ค. - ์ฌ๋ฌผ์ ํ์ํ๋ค.
-
์ฌ๋ฌผ์ ๋ถ๋ฅ(class)ํด์ ์ดํดํ๋ ๊ฒ โก๏ธ ์ธ๊ฐ์ ์ธ์ง๋ฒ
- ์ง๋ฆฝ๋ณดํ์ ํ๋ฉฐ ๋ง์ ํ๋ ์กด์ฌ๋ฅผ ์ฌ๋์ด๋ผ๊ณ ๋ถ๋ฅํ๋ค. - ๊ฐ๋์(object), ํํจ์ฃผ(object), ๊น์ฐ์(object)๋ ๋ชจ๋ ์ฌ๋์ด๋ผ๋ ๋ถ๋ฅ์ ์ํ๋ค. - ๊ฐ์ฒด(object)๋ค์ ๋์ด, ํค ๋ฑ์ ์์ฑ(property)๊ณผ ๋จน๋ค, ์๋ค ๋ฑ์ ํ์(method)๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ฌ๋(class๋ช ) ๊ฐ๋์(๊ฐ์ฒด๋ช ) ์์ฑ๋ค ๋์ด, ํค ๋์ด:=35, ํค:=185 ํ์๋ค ๋จน๋ค, ์๋ค ๋จน๋ค, ์๋ค
- ๊ฐ์ฒด์งํฅ ์ด์ ์๋ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๊ฐ์ฒด๋ผ๋ ๋จ์๋ก ๋ฌถ์ง ์๊ณ ๋ฐ๋ก ๋ถ๋ฆฌ๋ ํํ๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ค.
- ๊ฐ์ฒด์งํฅ์์๋ ์ฐ๋ฆฌ๊ฐ ์ฌ๋ฌผ์ ์ธ์ง ๋ฐ ์ฌ๊ณ ํ๋ ๋ฐฉ์๋๋ก ๊ฐ์ฒด ๋จ์์ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ฅํ๋ค.
- ์์ ํ ์ธ๊ฐ ์งํฅ์ ์ค์ฒํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ง๊ด์ ์ด๊ณ ์ฝ๋ค.
- ์บก - ์บก์ํ(Encapsulation) : ์ ๋ณด ์๋ (information hiding)
- ์ - ์์(
Inheritance) : ์ฌ์ฌ์ฉ - ์ถ - ์ถ์ํ(Abstraction) : ๋ชจ๋ธ๋ง
- ๋ค - ๋คํ์ฑ(Polymorphism) : ์ฌ์ฉ ํธ์
Inheritance๋ผ๋ ๋จ์ด๋ฅผ ์ฐ์ง๋ง์. ์คํด์ ์์ง๊ฐ ํฌ๋ค.
ํด๋์ค ๊ฐ์ฒด๋ช
= new ํด๋์ค();
๋ถ์ด๋นตํ ๋ถ์ด๋นต = new ๋ถ์ด๋นตํ(); // ๋ถ์ด๋นตํ์ ๋ง๋ค์๋๋ฐ ๋ถ์ด๋นต์ด ๋์๋ค?
- ๋ถ์ด๋นตํ์ ๋ถ์ด๋นต์ ๋ง๋๋ ํฉํฐ๋ฆฌ์ผ ๋ฟ, ํด๋์ค์ ๊ฐ์ฒด๊ด๊ณ๊ฐ ์๋๋ค.
- ํด๋์ค๋ ๋ถ๋ฅ์ ๋ํ ๊ฐ๋ ์ด์ง ์ค์ฒด๊ฐ ์๋๋ค.
- ๊ฐ์ฒด๋ ์ค์ฒด์ด๋ค.
- ๋ถ์ด๋นตํ๊ณผ ๋ถ์ด๋นต์ด๋ผ๋ ๋ฉํํฌ ๋์ ์๋์ ๋ฉํํฌ๋ฅผ ์ฌ์ฉํ์.
ํด๋์ค : ๊ฐ์ฒด = ํญ๊ท : ๋ฝ๋ก๋ก = ์ฌ๋ : ๊น์ฐ์
- ์ถ์ : [๋ช ์ฌ] [์ฌ๋ฆฌ] ์ฌ๋ฌ ๊ฐ์ง ์ฌ๋ฌผ์ด๋ ๊ฐ๋ ์์ ๊ณตํต๋๋ ํน์ฑ์ด๋ ์์ฑ ๋ฐ์๋ฅผ ์ถ์ถํ์ฌ ํ์ ํ๋ ์์ฉ
- ์ถ์ํ : [๋ช ์ฌ] ์ถ์์ ์ธ ๊ฒ์ผ๋ก ๋จ. ๋๋ ๊ทธ๋ ๊ฒ ๋ง๋ฆ
-
๊ฐ์ฒด์งํฅ์ 4๋ ํน์ฑ์ ํด๋์ค๋ฅผ ํตํด ๊ตฌํ๋๋ค. ๋๋ ๊ฐ์ฒด
- ๊ฐ์ฒด: ์ธ์์ ์กด์ฌํ๋ ์ ์ผ๋ฌด์ดํ ์ฌ๋ฌผ
- ํด๋์ค : ๋ถ๋ฅ, ์งํฉ, ๊ฐ์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ด์นญํ๋ ๊ฐ๋
- ์ฆ, ๊ฐ์ฒด๋ฅผ ํน์ฑ(์์ฑ + ๊ธฐ๋ฅ)์ ๋ฐ๋ผ ๋ถ๋ฅํด๋ณด๋ ๊ฐ์ฒด๋ฅผ ํต์นญํ ์ ์๋ ์งํฉ์ ๊ฐ๋ , ์ฆ ํด๋์ค(๋ถ๋ฅ)๊ฐ ๋์ค๊ฒ ๋๋ค.
- ์์
์ฌ๋ ํ๊ธธ๋ = new ์ฌ๋();
- ์ฌ๋์ด๋ผ๋ ํด๋์ค(๋ถ๋ฅ)๋ฅผ ์ด์ฉํด์ ์ ์ผ๋ฌด์ดํ๊ณ ์๋ก์ด ํ๋์ ์ฌ๋(๊ฐ์ฒด)๋ฅผ ๋ง๋ค์ด ํ๊ธธ๋(๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์)๋ผ๋ ์ด๋ฆ์ ์ง์ด์ฃผ์๋ค.
- ๊ฐ์ฒด(object) = ํด๋์ค(class)์ ์ธ์คํด์ค(instance)
-
๊ฐ๋ฐ์๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฐฝ์กฐ์๊ฐ ๋๊ณ , ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ํด๋์ค๋ฅผ ๋จผ์ ์ค๊ณํ๊ฒ ๋๋ค.
- ์ฌ๋์ด๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฃผ๋ณ์ ๋ณด์ด๋ ์ค์ฒด๋ค, ์ฆ ์ฌ๋ ๊ฐ์ฒด๋ฅผ ๊ด์ฐฐํด์ ๊ณตํต๋ ํน์ฑ์ ์ฐพ๋๋ค.
- ํค, ๋์ด, ํ์กํ ๋ฑ(์์ฑ) + ๋จน๋ค, ์๋ค, ์ผํ๋ค ๋ฑ(๋ฉ์๋)
- ๋ชจ๋ ํน์ฑ์ ๋์ดํ ํ์๋ ์๋ค. ์? ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ๊ณ์ ์๋ ํน์ฑ๋ง ์์ผ๋ฉด ๋๋ค.
- ์ฌ๋์ด๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฃผ๋ณ์ ๋ณด์ด๋ ์ค์ฒด๋ค, ์ฆ ์ฌ๋ ๊ฐ์ฒด๋ฅผ ๊ด์ฐฐํด์ ๊ณตํต๋ ํน์ฑ์ ์ฐพ๋๋ค.
-
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ๊ณ(Context) : ๋ด๊ฐ ๋ง๋ค๊ณ ์ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋์ ์ฌ์ฉ๋ ๊ฒ์ธ๊ฐ?
์ ํ๋ฆฌ์ผ์ด์ ๊ฒฝ๊ณ ๋ณ์ ์ ํ๋ฆฌ์ผ์ด์ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ๋์ด๋ ์ฌ๋์ ํ์๋ค. ์ฌ๋์ ๊ณ ๊ฐ์ด๋ค. ํด๋์ค ๋ชจ๋ธ๋ง ์์ฑ : ์๋ ฅ, ๋ชธ๋ฌด๊ฒ, ํ์กํ, ํค
๋ฉ์๋ : ๋จน๋ค, ์๋ค, ์ด์ ํ๋ค, ์ด๋ํ๋ค์์ฑ : ๋์ด, ์ง์ , ์ฐ๋ด
๋ฉ์๋ : ์ผํ๋ค, ์ ๊ธํ๋ค, ์ถ๊ธํ๋ค, ์ด์ฒดํ๋ค- ์ถ์ํ๋ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ๋ถํดํด์ ๊ด์ฐฐ์๊ฐ ๊ด์ฌ์๋ ํน์ฑ๋ง ๊ฐ์ง๊ณ ์ฌ์กฐํฉํ๋ ๊ฒ
- IT์ฉ์ด๋ฅผ ์ด์ฉํด ๋ฐ๊พธ์ด๋ณธ๋ค๋ฉด
- ์ถ์ํ๋ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ๋ถํดํด์ ๊ด์ฌ ์์ญ(์ ํ๋ฆฌ์ผ์ด์ ๊ฒฝ๊ณ, Application Boundary)์ ์๋ ํน์ฑ๋ง ๊ฐ์ง๊ณ ์ฌ์กฐํฉ ํ๋๊ฒ = ๋ชจ๋ธ๋ง
- ์ถ์ํ๋ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ๋ถํดํด์ ๊ด์ฐฐ์๊ฐ ๊ด์ฌ์๋ ํน์ฑ๋ง ๊ฐ์ง๊ณ ์ฌ์กฐํฉํ๋ ๊ฒ
-
๋ชจ๋ธ : ์ค์ ์ฌ๋ฌผ์ ์ ํํ ๋ณต์ ํ๋ ๊ฒ์ด ์๋, ๋ชฉ์ ์ ๋ง๊ฒ ๊ด์ฌ ์๋ ํน์ฑ๋ง ์ถ์ถํด์ ํํํ๋ ๊ฒ.
- ๋ชจ๋ธ์ ์ถ์ํ๋ฅผ ํตํด ์ค์ ์ฌ๋ฌผ์ ๋จ์ํ๊ฒ ๋ฌ์ฌํ๋ ๊ฒ.
- ๋ชจ๋ธ๋ง(์ถ์ํ)๋ ๊ฐ์ฒด ์งํฅ์์ ํด๋์ค๋ฅผ ์ค๊ณํ ๋, ํ ์ด๋ธ์ ์ค๊ณํ ๋ ํ์ํ ๊ธฐ๋ฒ์ด๋ค.
-
์ ๋ฆฌ
- OOP์ ์ถ์ํ๋ ๋ชจ๋ธ๋ง์ด๋ค.
- ํด๋์ค : ๊ฐ์ฒด = ํญ๊ท : ๋ฝ๋ก๋ก
- ํด๋์ค ์ค๊ณ์์ ์ถ์ํ๊ฐ ์ฌ์ฉ๋๋ค.
- ํด๋์ค ์ค๊ณ๋ฅผ ์ํด์๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฒฝ๊ณ๋ถํฐ ์ ํด์ผ ํ๋ค.
- ๊ฐ์ฒด ์งํฅ์์ ์ถ์ํ์ ๊ฒฐ๊ณผ๋ ํด๋์ค๋ค.
-
์ถ์ํ๋ฅผ ๋๊ฒ ๋ณธ๋ค๋ฉด?
- ์์์ ํตํ ์ถ์ํ, ๊ตฌ์ฒดํ
- ์ธํฐํ์ด์ค๋ฅผ ํตํ ์ถ์ํ
- ๋คํ์ฑ์ ํตํ ์ถ์ํ
-
์ถ์ํ = ๋ชจ๋ธ๋ง = ์๋ฐ์ class ํค์๋
ํด๋์ค ๊ฐ์ฒด_์ฐธ์กฐ_๋ณ์ = new ํด๋์ค(); // ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ๋ ์์ฑํด ๊ทธ ๊ฐ์ฒด์ ์ฃผ์๊ฐ(ํฌ์ธํฐ)์ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์์ ํ ๋น
-
์ฅ ํด๋์ค๋ฅผ ์ค๊ณํด๋ณด์.
-
ํด๋์ค ์ค๊ณ(๋ชจ๋ธ๋ง)์์ ์ค์ํ ๊ฒ์ ์ถ์ํ๋ค.
-
์ถ์ํ๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ๊ฒฝ๊ณ ๋ด์์ ๊ด์ฌ ์๋ ํน์ฑ๋ค๋ง ๋ฝ์์ค์.
-
์ถ์ํ์ ๊ฒฐ๊ณผ๋ฌผ = ๋ชจ๋ธ = Java์ ํด๋์ค
์ฅ ์ฑ๋ช
๋์ด
๊ผฌ๋ฆฌ์์ธ๋ค()
-
-
UML ํด๋์ค ํ๊ธฐ๋ฒ์ ๋ฐ๋ฅธ ํด๋์ค
package section3.ex3_1; public class Mouse { public String name; public int age; public int countOfTail; public void sing() { } }
-
์์ ํ์ดํ์ผ๋ก ๋ก์ง์ ๊ตฌํํ ํด๋์ค
package section3.ex3_2; public class Mouse { public String name; public int age; public int countOfTail; public void sing() { System.out.println(name + " ์ฐ์ฐ!!!"); } }
-
ํ ์คํธ์ฉ ํด๋์ค
package section3.ex3_3; import section3.ex3_2.Mouse; public class MouseDrive { public static void main(String[] args) { Mouse mickey = new Mouse(); mickey.name = "๋ฏธํค"; mickey.age = 85; mickey.countOfTail = 1; mickey.sing(); mickey = null; Mouse jeerry = new Mouse(); jeerry.name = "์ ๋ฆฌ"; jeerry.age = 73; jeerry.countOfTail = 1; jeerry.sing(); } }
-
ํ ์ญ์ : ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ฉด, ์์ฑ์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด ํ์์ญ์ ํ ๋น๋๋ค.
- main()์ ํด๋์ค ๋ฉค๋ฒ์ ๋ฉ์๋์ด๊ณ , sing()์ ๊ฐ์ฒด์ ๋ฉค๋ฒ ๋ฉ์๋์ด๋ค.
- ํด๋์ค ๋ฉค๋ฒ๋ ๋ฐ์ค ๊ทธ์ด์ง โก๏ธ UML ํ๊ธฐ๋ฒ
Mouse mickey
: ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์๊ฐ main()๋ฉ์๋ ์คํ ํ๋ ์ ์์ ์์ฑ๋๋ค.new Mouse()
: ๊ฐ์ฒด ์์ฑ์๋ฅผ ํธ์ถํ์ฌ ํ ํ์ญ์ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์น๋๋ค.=
: ๊ฐ์ฒด์ ์ฃผ์(ํฌ์ธํฐ)๋ฅผ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์์ ํ ๋นํ๋ค.mickey.name="๋ฏธํค
: ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์์ ์ฐธ์กฐ ์ฐ์ฐ์(.
)๋ฅผ ์ด์ฉํด ์์ฑ์ ๊ฐ์ ํ ๋นํ๋ค.
sing()๋ฉ์๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ณํ๊ฐ ์๋ค. ์ฝ๋ ์คํ ์์ญ์ ์คํ๋์ด "๋ฏธํค ์ฐ์ฐ"์ ์ถ๋ ฅํ ๊ฒ.
- main()์ ํด๋์ค ๋ฉค๋ฒ์ ๋ฉ์๋์ด๊ณ , sing()์ ๊ฐ์ฒด์ ๋ฉค๋ฒ ๋ฉ์๋์ด๋ค.
-
๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector) : ์๋ฌด๋ ์ฐธ์กฐํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ฐ๋ ๊ธฐ๋ก ์ธ์งํ๊ณ ์๊ฑฐํด ๊ฐ๋ค.
mickey = null
: mickey๋ ๋ ์ด์ ํ์์ญ์ Mouse๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ง ์๋๋ค. GC๊ฐ ๋ค๋ ๊ฐ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์์ Mouse๊ฐ์ฒด๋ ์ฌ๋ผ์ง๋ค.
- ํด๋์ค ๋ฉค๋ฒ = static ๋ฉค๋ฒ = ์ ์ ๋ฉค๋ฒ
- ํด๋์ค ๋ฉค๋ฒ๋ค์ staticํค์๋์ ํจ๊ป ์ฌ์ฉ๋๊ณ T๋ฉ๋ชจ๋ฆฌ์ static ์์ญ์ ์์ฃผํ๊ฒ ๋๋ฏ๋ก static(์ ์ )๋ฉค๋ฒ๋ผ๊ณ ํ๋ค.
- ๊ฐ์ฒด ๋ฉค๋ฒ = ์ธ์คํด์ค ๋ฉค๋ฒ
- ๊ฐ์ฒด ๋ฉค๋ฒ๋ค ๊ฐ์ฒด๊ฐ ํด๋์ค์ ์ธ์คํด์ค์ด๋ฏ๋ก ์ธ์คํด์ค ๋ฉค๋ฒ๋ผ๊ณ ๋ํ๋ค.
ํด๋์ค ์ค๊ณ | |
---|---|
ํด๋ ์ค ๋ฉค๋ฒ(์ ์ ๋ฉค๋ฒ) | ํด๋์ค ๋ฉค๋ฒ ์์ฑ(์ ์ ์์ฑ) ํด๋์ค ๋ฉค๋ฒ ๋ฉ์๋(์ ์ ๋ฉ์๋) |
๊ฐ์ฒด ๋ฉค๋ฒ | ๊ฐ์ฒด ๋ฉค๋ฒ ์์ฑ ๊ฐ์ฒด ๋ฉค๋ฒ ๋ฉ์๋ |
-
์ ์ ์์ฑ : ํด๋น ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๊ฐ์ ๊ฐ์ง ๋ ์ฌ์ฉํ๋ ๊ฒ.
- ์ด ์ธ์ ๊ฒฝ์ฐ์ ์ ๋นํ ๋ ผ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์จ์ผํ๋ค.
-
์ ์ ๋ฉ์๋ : ๊ฐ์ฒด๋ค์ ์กด์ฌ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ธ ์ ์๋ ๋ฉ์๋
- ๊ฐ์ฒด๊ฐ ์๋ ํด๋์ค์ ์ํด์์ผ๋ฉฐ, JVM ๊ตฌ๋ ์ ์คํํฑ ์์ญ์ ๋ฐ๋ก ๋ฐฐ์น๋๋ค.
- ex) main(), ์ ์ ๋ณ์ ์ ๊ทผ์ ๋ฉ์๋(getter), ์ ์ ๋ณ์ ์ค์ ์ ๋ฉ์๋(setter)
์ค๋ฌด์์๋ ์ ํธ๋ฆฌํฐ์ฑ ๋ฉ์๋๋ฅผ ์ฃผ๋ก ์ ์ ๋ฉ์๋๋ก ๊ตฌ์ฑํ๋ค.
-
์ธ๊ฐ์ง ๋ณ์ ์ ํ
- ์ง์ญ ๋ณ์(local ๋ณ์)
- ๊ฐ๋ฐ์๊ฐ ๋ณ๋๋ก ์ด๊ธฐํํ์ง ์์ผ๋ฉด ์ฐ๋ ๊ธฐ ๊ฐ์ ๊ฐ๋๋ค.
- ํ ์ง์ญ์์๋ง ์ฐ๋ ๋ณ์์ด๋ค.
- ์ฌ๋ ๊ณณ : ์คํ ํ๋ ์ ์์ญ
- ๋ฉค๋ฒ ๋ณ์(instance ๋ณ์)
- ๋ณ๋์ ์ด๊ธฐํ๋ฅผ ํด์ฃผ์ง ์์๋ ์๋์ผ๋ก ์ด๊ธฐํ๋ฅผ ํด์ค๋ค.
- ๊ฐ์ฒด ์์์ ๋ค์์ ๊ฐ์ฒด ๋ฉ์๋๊ฐ ๊ณต์ ํ๋ ๊ณต์ ๋ณ์์ด๋ค.
- ์ฌ๋ ๊ณณ : ํ ์์ญ
- ํด๋์ค ๋ณ์(static ๋ณ์)
- ๋ณ๋์ ์ด๊ธฐํ๋ฅผ ํด์ฃผ์ง ์์๋ ์๋์ผ๋ก ์ด๊ธฐํ๋ฅผ ํด์ค๋ค.
- ์ ์ญ ๋ณ์๋ก์ ํ๋ก๊ทธ๋จ ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณต์ ๋ณ์์ด๋ค.
- ์ฌ๋ ๊ณณ : ์คํํฑ ์์ญ
- ๊ณต์ ๋ณ์๋ ๋ณ๋์ ์ด๊ธฐํ๊ฐ ํ์์์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ด๊ธฐํ๋๋ค.
- ๊ฐ์ฒด ๋ฉค๋ฒ๋ ์์ฑ์, ์ ์ ๋ฉค๋ฒ๋ ์ ์ ์คํ ์์ญ์ ํตํด ์ด๊ธฐํํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ํ์ง๋ง ๋๊ฐ ์ด๊ธฐํํด์ผํ๋ค๊ณ ๊ท์ ํ ์ ์๋ค.
- ์ง์ญ ๋ณ์๋ ํ ์ง์ญ์์๋ง ์ฌ์ฉ๋๊ณ ์๋ฉธ๋๋ ๋ณ์์ด๊ธฐ์ ๊ทธ ์ง์ญ์์ ์ด๊ธฐํํ๋ ๊ฒ์ด ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ง๋ค.
- ๊ฐ์ฒด ๋ฉค๋ฒ๋ ์์ฑ์, ์ ์ ๋ฉค๋ฒ๋ ์ ์ ์คํ ์์ญ์ ํตํด ์ด๊ธฐํํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ์ง์ญ ๋ณ์(local ๋ณ์)
-
์์ : ๊ฐ์ฒด์งํฅ์์ ์์์ ์์ ํด๋์ค์ ํน์ฑ์ ํ์ ํด๋์ค์์ ์์(ํน์ฑ ์์)์ ํ๊ณ ๊ฑฐ๊ธฐ์ ํ์ํ ํน์ฑ์ ์ถ๊ฐ, ์ฆ ํ์ฅํด์ ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ.
- ๋ถ๋ชจ ํด๋์ค - ์์ ํด๋์ค ๋ณด๋ค ์์ ํด๋์ค - ํ์ ํด๋์ค ๋๋ ์ํผ ํด๋์ค - ์๋ธํด๋์ค ๋ก ํํํ์.
- ์์ ํด๋์ค ์ชฝ์ผ๋ก ๊ฐ์๋ก
์ถ์ํ
,์ผ๋ฐํ
๋๋ค๊ณ ๋งํ๋ฉฐ, ํ์ ํด๋์ค ์ชฝ์ผ๋ก ๊ฐ์๋ก๊ตฌ์ฒดํ
,ํน์ํ
๋๋ค๊ณ ๋งํ๋ค.
๊ฐ์ฒด์งํฅ์ ์์์ ์กฐ์ง๋๋ ๊ณ์ธต๋๊ฐ ์๋ ๋ถ๋ฅ๋๋ผ๋ ์ฌ์ค์ ๊ธฐ์ตํด๋ผ.
ํฌ์ ๋ฅ๋ ๋๋ฌผ์ ํน์ฑ์ ํ์ฅํ๋ค๊ณ ํ ์ ์๊ณ , ๊ณ ๋๋ ํฌ์ ๋ฅ์ ํน์ฑ์ ํ์ฅํ๋ค๊ณ ํ ์ ์๋ค.
- ํ์ ํด๋์ค๋ ์์ ํด๋์ค๋ค.
- ์ด๋ ์์ ๊ด๊ณ์์ ๋ฐ๋์ ๋ง์กฑํด์ผํ๋ ๋ฌธ์ฅ์ด๋ค.
- ๋ธ์ ์๋ฒ์ง๋ค?? (๊ดด์ดํ๋ค.)
์๋ฒ์ง ์ํฌ์๋น = new ๋ธ();
- ํญ๊ท์ ๋๋ฌผ์ด๋ค. (์์ฐ์ค๋ฝ๋ค.)
๋๋ฌผ ๋ฝ๋ก๋ก = new ํญ๊ท();
- ์ด๋ ๊ฐ์ฒด ์งํฅ ์ค๊ณ 5์์น ์ค LSP(๋ฆฌ์ค์ฝํ์นํ์์น)์ ๋ํ๋ด๋ ๋ง์ด๋ค.
- ์๋ฐ์๋ inheritance(์์) ๋์ extends(ํ์ฅ) ์ด ์กด์ฌํ๋ค.
package section3.ex3_6;
public class ๋๋ฌผ {
String myClass;
๋๋ฌผ(){
myClass = "๋๋ฌผ";
}
void showMe(){
System.out.println(myClass);
}
}
package section3.inheritance01;
public class ํฌ์ ๋ฅ extends ๋๋ฌผ {
ํฌ์ ๋ฅ(){
myClass = "ํฌ์ ๋ฅ";
}
}
package section3.inheritance01;
public class Driver {
public static void main(String[] args) {
๋๋ฌผ amimal = new ๋๋ฌผ();
ํฌ์ ๋ฅ mammalia = new ํฌ์ ๋ฅ();
์กฐ๋ฅ bird = new ์กฐ๋ฅ();
๊ณ ๋ whale = new ๊ณ ๋();
๋ฐ์ฅ bat = new ๋ฐ์ฅ();
amimal.showMe();
mammalia.showMe();
bird.showMe();
whale.showMe();
bat.showMe();
}
}
- ์์ํด๋์ค์์๋ง
showMe()
๋ฅผ ๊ตฌํํ์ง๋ง ํ์ ํด๋์ค ๊ฐ์ฒด์์๋ ์ฌ์ฉํ ์ ์๋ค. - ์์ํ๋ค๋ ๊ฒ์ ์์ ํด๋์ค์ ํน์ฑ์ ์์ํ๋ค๋ ์๋ฏธ์ด๋ค.
- ๋ถ๋ชจ-์์ ๊ด๊ณ๊ฐ ์๋๋ค.
- ์ ์ฐจ์ /๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ์ ์
์ฅ์์ ํ์ ํด๋์ค๊ฐ
showMe()
๋ฅผ ๊ตฌํํ์ง ์๊ณ ์ฌ์ฌ์ฉ์ ํ ์ ์๋ค๋ ๊ฒ์ ๊ฐ๋์.
package section3.inheritance01;
public class Driver02 {
public static void main(String[] args) {
๋๋ฌผ animal = new ๋๋ฌผ();
๋๋ฌผ mammalia = new ํฌ์ ๋ฅ();
๋๋ฌผ bird = new ์กฐ๋ฅ();
๋๋ฌผ whale = new ๊ณ ๋();
๋๋ฌผ bat = new ๋ฐ์ฅ();
animal.showMe();
mammalia.showMe();
bird.showMe();
whale.showMe();
bat.showMe();
}
}
- ํ์ํด๋์ค๋ ์์ํด๋์ค๋ค. ์ฆ ํ์๋ถ๋ฅ๋ ์์๋ถ๋ฅ๋ค.
- ํฌ์ ๋ฅ ํ๋ง๋ฆฌ๋ ๋๋ฌผ์ด๋ค.
- ์ด์ฒ๋ผ ๊ฐ์ฒด ์งํฅ์ ํ์ค ์ธ๊ณ๋ฅผ, ์ธ๊ฐ์ ๋ ผ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ์ฝ๋๋ก ์ฎ๊ธธ ์ ์๋ ํ์ด ์๋ค.
toString()
ํด๋์ค ์์ ๊ตฌ์กฐ์์ ์ต์์ ํด๋์ค๋ Object๋ค. ๊ทธ๋์ ๋ชจ๋ ํด๋์ค๋ toString()๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- is a๋ ๊ฐ์ฒด์ ํด๋์ค์ ๊ด๊ณ๋ก ์คํด์ ์์ง๊ฐ ๋ง๋ค.
- ๊ฐ์ฒด is a ํด๋์ค โก๏ธ ๊น์ฐ์ is a ์ฌ๋
- is a๋ฅผ ๋ ๋ช ํํ๊ฒ ํํํ๋ฉด ? a kind of ๊ฐ๋๋ค.
- ํ์ ํด๋์ค is a kind of ์์ ํด๋์ค โก๏ธ ํญ๊ท is a kind of ์กฐ๋ฅ
- ๊ฐ์ฒด ์งํฅ์ ์์์ ์์ ํด๋์ค์ ํน์ฑ์ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
- ๊ฐ์ฒด ์งํฅ์ ์์์ ์์ ํด๋์ค์ ํน์ฑ์ ํ์ฅํ๋ ๊ฒ์ด๋ค.
- ๊ฐ์ฒด ์งํฅ์ ์์์ is a kind of๊ด๊ณ๋ฅผ ๋ง์กฑํด์ผํ๋ค.
- ์ ์๋ฐ๋ ๋ค์ค ์์์ ์ง์ํ์ง ์๋๊ฐ?
- ๋ค์ค ์์์ ๋ค์ด์๋ชฌ๋ ๋ฌธ์ ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ธ์ด๊ฐ ์ฌ๋๊ณผ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์์ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
- ์ฌ๋๋ ์์ํ ์ ์ ๋ฌผ๊ณ ๊ธฐ๋ ์์ํ ์ ์๋ค.
- ๊ทธ๋ ๋ค๋ฉด ์ธ์ด๋ ์ฌ๋์ฒ๋ผ ์์ํด์ผํ ๊น ๋ฌผ๊ณ ๊ธฐ ์ฒ๋ผ ์์ํด์ผํ ๊น?
- ๋์ ์ธํฐํ์ด์ค๋ฅผ ๋์ ํด ๋ค์ค ์์์ ๋์ ์ทจํ๊ณ ์ค์ ๊ณผ๊ฐํ ๋ฒ๋ ธ๋ค.
- ์์ : ํ์ํด๋์ค is a kind of ์์ํด๋์ค
- ํด์ : ํ์ํด๋์ค๋ ์์ํด๋์ค์ ํ ๋ถ๋ฅ๋ค.
- ์์ : ๊ณ ๋๋ ๋๋ฌผ์ ํ ๋ถ๋ฅ์ด๋ค.
- ์ธํฐํ์ด์ค : ๊ตฌํ ํด๋์ค is able to ์ธํฐํ์ด์ค
- ํด์ : ๊ตฌํ ํด๋์ค๋ ์ธํฐํ์ด์ค ํ ์ ์๋ค.
- ์์ : ๊ณ ๋๋ ํค์์น ์ ์๋ค.
- ์์ ํด๋์ค๋ ๋ฌผ๋ ค์ค ํน์ฑ์ด ํ์ฑํ ์๋ก ์ข๋ค.
- ์ด์ : LSP(๋ฆฌ์ค์ฝํ ์นํ ์์น)
- ์ธํฐํ์ด์ค๋ ๊ตฌํ์ ๊ฐ์ ํ ๋ฉ์๋๊ฐ ์ ์ ์๋ก ์ข๋ค.
- ์ด์ : ISP(์ธํฐํ์ด์ค ๋ถํ ์์น)
package section3.inheritance03;
public class Driver {
public static void main(String[] args) {
Penguin pororo = new Penguin();
pororo.name = "๋ฝ๋ก๋ก";
pororo.habitat = "๋จ๊ทน";
pororo.showName();
pororo.showHabitat();
Animal pingu = new Penguin();
pingu.name = "ํ๊ตฌ";
//pingu.habitat = "EBS";
pingu.showName();
//pingu.showHabitat();
}
}
- pingu ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ์ Animal ์ธ์คํด์ค์ด๋ค.
- pingu๋ ์์ ์ด ํญ๊ท์ด๋ผ๋ ์ฌ์ค์ ๋ชจ๋ฅด๊ณ ์๋ค. ๋๋ฌผ์ด๋ผ๋ ๊ฒ๋ง ์ธ์ํ๋ค.
- ๋ฐ๋ผ์ ํญ๊ท์ habitat๊ณผ showHabitat()์ ์ฌ์ฉํ ์ ์๋ค.
๋ช ์์ ํ๋ณํ, ์๋ฌต์ ํ๋ณํ ๊ณต๋ถํ๊ธฐ
- ๊ฐ์ฒด์งํฅ์์ ๋คํ์ฑ์ด๋ผ๊ณ ํ๋ฉด ์ค๋ฒ๋ผ์ด๋ฉ(overriding)๊ณผ ์ค๋ฒ๋ก๋ฉ(overloading)์ด๋ผ๊ณ ํ ์ ์๋ค.
- ์ค๋ฒ๋ผ์ด๋ฉ : ๊ฐ์ ๋ฉ์๋ ์ด๋ฆ, ๊ฐ์ ์ธ์ ๋ชฉ๋ก์ผ๋ก ์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์
- ์ค๋ฒ๋ก๋ฉ : ๊ฐ์ ๋ฉ์๋ ์ด๋ฆ, ๋ค๋ฅธ ์ธ์ ๋ชฉ๋ก์ผ๋ก ๋ค์์ ๋ฉ์๋๋ฅผ ์ค๋ณต ์ ์
package section3.polymorphism01;
import section3.inheritance03.Animal;
public class Penguin extends Animal {
public String habitat;
public void showHabitat(){
System.out.printf("%s๋ %s์ ์ด์\n", name, habitat);
}
// ์ค๋ฒ๋ผ์ด๋ฉ - ์ฌ์ ์ : ์์ํด๋์ค์ ๋ฉ์๋์ ๊ฐ์ ๋ฉ์๋ ์ด๋ฆ, ๊ฐ์ ์ธ์ ๋ฆฌ์คํธ
@Override
public void showName() {
System.out.println("๋ด ์ด๋ฆ์ ์์์ ๋ญํ๊ฒ์?");
}
// ์ค๋ฒ๋ก๋ฉ - ์ค๋ณต์ ์ : ๊ฐ์ ๋ฉ์๋ ์ด๋ฆ, ๋ค๋ฅธ ์ธ์ ๋ฆฌ์คํธ
public void showName(String yourName){
System.out.printf("%s ์๋
, ๋๋ %s๋ผ๊ณ ํด\n", yourName, name);
}
}
Animal pingu = new Penguin();
pingu.showName();
- Animal ๊ฐ์ฒด์ showName()์ Penguin๊ฐ์ฒด์ showName()์ ์ํด ๊ฐ๋ ค์ ธ์๋ค.
- ๋ฐ๋ผ์ Penguin๊ฐ์ฒด์ showName()์ด ์คํ๋๋ค.
- ์ฆ. ์์ ํด๋์ค ํ์ ์ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ํ์ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ(์ฌ์ ์)ํ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค๋ ์ฌ์ค์ ๊ธฐ์ตํด๋ผ.
- ์ค๋ฒ๋ก๋ฉ์ ํจ์๋ช
ํ๋๋ฅผ ๊ฐ์ง๊ณ ์ธ์๋ชฉ๋ก๋ง ๋ฌ๋ฆฌํ๋ฉด ๋๋ฏ๋ก ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๋ค.
- ์ ๋ค๋ฆญ์ ์ด์ฉํ๋ฉด ํ๋์ ํจ์๋ง ๊ตฌํํด๋ ๋ค์์ ํจ์ ๊ตฌํ ํจ๊ณผ๋ฅผ ๋ผ ์ ์๋ค.
- ์ค๋ฒ๋ผ์ด๋ฉ์ ๊ฒฝ์ฐ ํ์ ํด๋์ค๊ฐ ์ฌ์ ์ํ ๋ฉ์๋๋ฅผ ์์์ ํธ์ถํด์ค์ผ๋ก ์จ ๊น๋ํ ์ฝ๋๋ฅผ ์ ์งํ ์ ์๋ค.
๋ฉ์๋ ์ฌ์ ์, ์ค๋ฒ๋ก๋ฉ์ ํตํ ๋ฉ์๋ ์ค๋ณต ์ ์๋ฅผ ํตํด ๋คํ์ฑ์ ์ ๊ณตํ๊ณ ์ด ๋คํ์ฑ์ด ๊ฐ๋ฐ์๊ฐ ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ์ฌ์ฉํธ์์ฑ์ ์ค๋ค.
- ์บก์ํ๋ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๋ฌถ๋ ๊ฒ์ด๋ค.
- ๊ฐ์ฒด๊ฐ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์ธ๋ถ์ ๊ฐ์ถ๋ค.
- ์ด๋ฅผ ํตํด ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ ์ ์ธ๋ถ์ ์ํฅ ์์ด ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
- ์ฆ, ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์ฝ๋์๊ฒ ์ฐ์์ ์ธ ๋ณ๊ฒฝ ์ ํ๋ฅผ ์ต์ํํ๊ฒ ๋๋ค.
์ถ์ฒ : ์ต๋ฒ๊ท ์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ
- ์ ๋ณด์๋(information hiding)์ด๋ผ๊ณ ํ๋ฉด ์ ๊ทผ ์ ์ด์(private, default, protected, public)๊ฐ ์ค์ณ์ง๋๊ฐ๋ค.
- public : ๋ชจ๋๊ฐ ์ ๊ทผ ๊ฐ๋ฅ
- protected : ์์ / ๊ฐ์ ํจํค์ง ๋ด์ ํด๋์ค์์ ์ ๊ทผ ๊ฐ๋ฅ
- default : ๊ฐ์ ํจํค์ง ๋ด์ ํด๋์ค์์ ์ ๊ทผ๊ฐ๋ฅ
- private : ๋ณธ์ธ๋ง ์ ๊ทผ ๊ฐ๋ฅ
- ์์์ ๋ฐ์ง ์์๋ค๋ฉด ๊ฐ์ฒด ๋ฉค๋ฒ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ์๋ฅผ ์ด์ฉํด ์ ๊ทผํด์ผํ๋ค.
- ์ ์ ๋ฉค๋ฒ๋ ํด๋์ค๋ช .์ ์ ๋ฉค๋ฒ ํ์์ผ๋ก ์ ๊ทผํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
- ๊ธฐ๋ณธ ์๋ฃํ ๋ณ์๋ ๊ฐ์ ๊ฐ ์์ฒด๋ก ํ๋จํ๋ค.
- ์ฐธ์กฐ ์๋ฃํ ๋ณ์๋ ๊ฐ์ ์ฃผ์, ์ฆ ํฌ์ธํฐ๋ก ํ๋จํ๋ค.
- ๊ธฐ๋ณธ ์๋ฃํ ๋ณ์๋ฅผ ๋ณต์ฌํ ๋, ์ฐธ์กฐ ์๋ฃํ ๋ณ์๋ฅผ ๋ณต์ฌํ ๋ ์ผ์ด๋๋ ์ผ์ ๊ฐ๋ค.
- ์ฆ, ๊ฐ์ง๊ณ ์๋ ๊ฐ์ ๊ทธ๋๋ก ๋ณต์ฌํด์ ๋๊ฒจ์ค๋ค.
- class, extends, new, private, protected, public, static ๋ฑ
- ๊ธฐ์ตํด์ผํ ๊ฒ : ์บก! ์์ถ๋ค