์๋
! ์ค๋ ์์
์์๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๋ฆฌ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. ์ Java๊ฐ ์๋ ๊ทธ๋๋ก ์ค๊ณ๋์๋์ง ๊ถ๊ธํ ์ ์ด ์์ต๋๊น? ๋ด ๋ง์, ํด๋์ค๋ฅผ ์ ์ธํ๊ณ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ํด๋์ค์๋ ๋ฉ์๋๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฐ๋ฐ ํ๋ก๊ทธ๋จ์ด ๋ค๋ฅธ ๊ฒ์ด ์๋ ํด๋์ค์ ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋๋๋ก ์ธ์ด๊ฐ ๊ตฌ์กฐํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น? "๊ฐ์ฒด"์ ๊ฐ๋
์ด ๋ฐ๋ช
๋๊ณ ์ต์ ์ ์ ๋์ธ ์ด์ ๋ ๋ฌด์์
๋๊น? ๋ชจ๋ ์ธ์ด๊ฐ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋์์ต๋๊น? ๊ทธ๋ ์ง ์๋ค๋ฉด Java์ ์ด๋ค ์ด์ ์ด ์์ต๋๊น? ๋ณด์๋ค์ํผ ๋ง์ ์ง๋ฌธ์ด ์์ต๋๋ค :) ์ค๋ ์์
์์ ๊ฐ๊ฐ์ ๋ตํด ๋ด
์๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ด๋ ๋ฌด์์ ๋๊น?
๋ฌผ๋ก Java๋ ๋จ์ง ์ฌ๋ฏธ๋ฅผ ์ํด ๊ฐ์ฒด์ ํด๋์ค๋ก ๊ตฌ์ฑ๋์ด ์์ง ์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ Java ์ ์์์ ๋ณ๋์ด ์๋๋ฉฐ ๊ทธ๋ค์ ๋ฐ๋ช ํ๋ ์๋๋๋ค. ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ค๋ฅธ ๋ง์ ์ธ์ด๊ฐ ์์ต๋๋ค. ์ต์ด์ ๊ทธ๋ฌํ ์ธ์ด๋ "Simula"๋ผ๊ณ ๋ถ๋ ธ์ต๋๋ค. ๊ทธ๊ฒ์ ๋ ธ๋ฅด์จ์ด์์ 1960๋ ๋์ ๋ค์ ๋ฐ๋ช ๋์์ต๋๋ค. ๋ํ "ํด๋์ค"์ "๋ฉ์๋"์ ๊ฐ๋ ์ด Simula์ ๋ฑ์ฅํ์ต๋๋ค. ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๊ธฐ์ค์ ๋ฐ๋ฅด๋ฉด "Simula"๋ ๊ณ ๋ ์ธ์ด์ฒ๋ผ ๋ณด์ด์ง๋ง ๋๊ตฌ๋ Java์ "ํจ๋ฐ๋ฆฌ ์ ์ฌ์ฑ"์ ๋ณผ ์ ์์ต๋๋ค. ์๋ง๋ ์ด ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์ฝ๊ณ ๊ทธ๊ฒ์ด ๋ฌด์์ ํ๋์ง ๋๋ต์ ์ผ๋ก ์ค๋ช ํ ์ ์์ ๊ฒ์ ๋๋ค :)
Begin
Class Rectangle (Width, Height); Real Width, Height;
Begin
Real Area, Perimeter;
Procedure Update;
Begin
Area := Width * Height;
OutText("Rectangle is updating, Area = "); OutFix(Area,2,8); OutImage;
Perimeter := 2*(Width + Height);
OutText("Rectangle is updating, Perimeter = "); OutFix(Perimeter,2,8); OutImage;
End of Update;
Update;
OutText("Rectangle created: "); OutFix(Width,2,6);
OutFix(Height,2,6); OutImage;
End of Rectangle;
Rectangle Class ColouredRectangle (Color); Text Color;
Begin
OutText("ColouredRectangle created, color = "); OutText(Color);
OutImage;
End of ColouredRectangle;
Ref(Rectangle) Cr;
Cr :- New ColouredRectangle(10, 20, "Green");
End;
์ด ์ฝ๋ ์ํ ์ฝ๋๋ Weekly-geekly์ "Simula - 50 years of OOP"์์ ๊ฐ์ ธ์์ต๋๋ค. ๋ณด์๋ค์ํผ Java๋ ์กฐ์๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ต๋๋ค. :) ์ด๊ฒ์ Simula์ ๋ฑ์ฅ์ผ๋ก ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๋ ์๋ก์ด ๊ฐ๋
์ ํ์์ ์๋ ธ๊ธฐ ๋๋ฌธ์
๋๋ค. Wikipedia๋ OOP๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํฉ๋๋ค. "๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ ํ๋(์ข
์ข
์์ฑ์ด๋ผ๊ณ ๋ ํจ) ํ์์ ๋ฐ์ดํฐ์ ์ ์ฐจ(์ข
์ข
๋ฐฉ๋ฒ์ผ๋ก ์๋ ค์ง)." ์ ์๊ฐ์๋ ์ด๊ฒ์ ์ ๋ง ์ข์ ์ ์์
๋๋ค. Java๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์์ํ ์ง ์ค๋๋์ง ์์์ง๋ง ์ด ์ ์์๋ ๋ชจ๋ฅด๋ ๋จ์ด๊ฐ ํฌํจ๋์ด ์์ง ์์ ๊ฒ์
๋๋ค. :) ์ค๋๋ OOP๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ๋ก ์
๋๋ค. ์๋ฐ ์ธ์๋, OOP ์์น์ ์ฌ๋ฌ๋ถ์ด ๋ค์ด๋ดค์ ์ ์๋ ๋ง์ ๋์ค์ ์ธ ์ธ์ด์์ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, C++(๊ฒ์ ๊ฐ๋ฐ์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉ๋จ), Objective-C ๋ฐ Swift(Apple ์ฅ์น์ฉ ํ๋ก๊ทธ๋จ ์์ฑ์ ์ฌ์ฉ๋จ), Python(๊ธฐ๊ณ ํ์ต์์ ๊ฐ์ฅ ์ธ๊ธฐ ์์), PHP(๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์น ๊ฐ๋ฐ ์ธ์ด ์ค ํ๋), JavaScript( ๊ทธ๊ฒ์ด ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ ๋งํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค) ๋ฐ ๊ธฐํ ๋ง์ ๊ฒ๋ค. ๊ทธ๋ ๋ค๋ฉด OOP์ ์์น์ ๋ฌด์์
๋๊น? ์์ธํ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ด์จ๋ OOP์ ์์น์ ๋ฌด์์
๋๊น? ์์ธํ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ด์จ๋ OOP์ ์์น์ ๋ฌด์์
๋๊น? ์์ธํ ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค.
OOP ์์น
์ด๋ค์ ์ฌ๋จ์ ๊ธฐ์ด์ ๋๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ํจ๊ป ํ์ฑํ๋ 4๊ฐ์ง ์ฃผ์ ๊ธฐ๋ฅ. ๊ทธ๊ฒ๋ค์ ์ดํดํ๋ ๊ฒ์ ์ฑ๊ณต์ ์ธ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋๊ธฐ ์ํด ํ์์ ์ ๋๋ค.์์น 1. ์์
ํฌ์์: ๋น์ ์ ์ด๋ฏธ OOP์ ๋ช ๊ฐ์ง ์์น์ ์๊ณ ์์ต๋๋ค! :) ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์์ ์์ ์์์ ๋ช ๋ฒ ๋ง๋ฌ๊ณ ๊ทธ๊ฒ์ ์ฌ์ฉํ ์ ์์์ต๋๋ค. ์์์ ๊ธฐ์กด(์์) ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํด๋์ค๋ฅผ ์ค๋ช ํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ ์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ฐจ์ฉํฉ๋๋ค. ์์์ด๋ ๋ฌด์์ด๋ฉฐ ์ด๋ค ์ด์ ์ด ์์ต๋๊น? ๋ฌด์๋ณด๋ค ์ฝ๋ ์ฌ์ฌ์ฉ. ๋ถ๋ชจ ํด๋์ค์์ ์ ์ธ๋ ํ๋์ ๋ฉ์๋๋ ์์ ํด๋์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ ์ ํ์ ์๋์ฐจ์ 10๊ฐ์ ๊ณตํต ํ๋์ 5๊ฐ์ ๋์ผํ ๋ฉ์๋๊ฐ ์๋ ๊ฒฝ์ฐ Auto ๋ก ์ด๋ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.๋ถ๋ชจ ํด๋์ค. ์๋ฌด ๋ฌธ์ ์์ด ์์ ํด๋์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ฒฌ๊ณ ํ ์ฅ์ : ์์ (์ฝ๋ ๊ฐ์) ๋ฐ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ง์ (ํด๋์ค๊ฐ ํจ์ฌ ๋จ์ํด์ง). ๋ํ ์์์ ๋งค์ฐ ์ ์ฐํฉ๋๋ค. ์์์ ์๋ ๋ณ๋์ ์ฐ๊ธฐ ๊ธฐ๋ฅ(ํน์ ํด๋์ค์ ํน์ ํ ์ผ๋ถ ํ๋ ๋๋ ๋์)์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ค์ํ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฐ๋ฆฌ ๋ชจ๋๋ ๋ถ๋ชจ์ ๋ค์ ๋น์ทํ์ง๋ง ์ด๋ป๊ฒ ๋ ๋ค๋ฆ ๋๋ค :)์์น 2. ์ถ์ํ
์ด๊ฒ์ ๋งค์ฐ ๊ฐ๋จํ ์๋ฆฌ์ ๋๋ค. ์ถ์ํ๋ ์ด๋ค ๊ฒ์ ์ฃผ์ํ๊ณ ๊ฐ์ฅ ์ค์ํ ํน์ฑ์ ์๋ณํ๋ ๋์์ ์ฌ์ํ๊ณ ์ค์ํ์ง ์์ ๊ฒ์ ๋ชจ๋ ๋ฒ๋ฆฌ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช ํ ํ์๊ฐ ์์ต๋๋ค. ์์ ์ ๋ํ ์ค๋๋ ์์ ์ ์๋ฅผ ์๊ฐํด ๋ด ์๋ค. ํ์ฌ ์ง์์ ์ํ ํ์ผ๋ง ์์คํ ์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. "์ง์" ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ง์ ํด๋์ค ๋ฅผ ์์ฑํ์ต๋๋ค . ํ์ฌ ํ์ผ ์์คํ ์์ ์ค๋ช ํ๋ ๋ฐ ์ค์ํ ํน์ฑ์ ๋ฌด์์ ๋๊น? ์ด๋ฆ, ์๋ ์์ผ, SSN ๋ฐ ์ง์ ID. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ํ์ ๋ ์ฝ๋์ ์ง์์ ํค, ๋ ์๊น ๋๋ ๋จธ๋ฆฌ ์๊น์ด ํ์ํ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์์ต๋๋ค. ํ์ฌ๋ ์ง์์ ๋ํ ๊ทธ๋ฌํ ์ ๋ณด๋ฅผ ํ์๋ก ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ Employee ํด๋์ค์์ ๋ค์ ๋ณ์๋ฅผ ์ ์ธํฉ๋๋ค., int age , int socialSecurityNumber ๋ฐ int employeeId . ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋ ์๊น๊ณผ ๊ฐ์ ๋ถํ์ํ ์ ๋ณด๋ฅผ ์ถ์ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ธ๋ง ์์ด์ ์๋ฅผ ์ํ ํ์ผ๋ง ์์คํ ์ ๋ง๋ค๊ณ ์๋ค๋ฉด ์ํฉ์ด ๊ทน์ ์ผ๋ก ๋ฐ๋๋๋ค. ๋ชจ๋ธ์ ํค, ๋ ์๊น, ๋จธ๋ฆฌ ์๊น์ ์ค์ํ ํน์ฑ์ด์ง๋ง ๊ทธ๋ ์ SSN์ ์ฐ๋ฆฌ์ ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ Model ํด๋์ค์์ String height , String hair , String eyes ๋ณ์๋ฅผ ์์ฑํฉ๋๋ค .์์น 3. ์บก์ํ
์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด๊ฒ์ ๋ถ๋ช์ณค์ต๋๋ค. Java์์ ์บก์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ์ ์ ํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ณด์๋ค์ํผ ์ด ์ฉ์ด๋ "์บก์"์ด๋ผ๋ ๋จ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ฐ๋ฆฌ๋ "์บก์"์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์ฌ๋์ด ๋ณ๊ฒฝํ์ง ์์์ผ๋ฉด ํ๋ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธธ ๊ฒ์ ๋๋ค. ๋ค์์ ์ค์ํ์ ๊ฐ๋จํ ์์ ๋๋ค. ์ด๋ฆ๊ณผ ์ฑ์ด ์์ต๋๋ค. ๋ชจ๋ ์น๊ตฌ๋ค์ด ๊ทธ๋ค์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทํ์ ์ฑ๊ณผ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์๋ ๊ถํ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํํ๋ ํ๋ก์ธ์ค๋ ๋ฒ์ ์์คํ ์ ์ํด "์บก์ํ"๋์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ทํ๋ ๋ฒ์ ์๊ธฐ๋ฅผ ํตํด์๋ง ์ฑ์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ๊ทํ๋ง์ด ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ "์ฌ์ฉ์"๋ ๊ทํ์ ์ฑ๊ณผ ์ด๋ฆ์ ๋ํ "์ฝ๊ธฐ ์ ์ฉ" ์ก์ธ์ค ๊ถํ์ ๊ฐ์ง๋๋ค. :) ๋ ๋ค๋ฅธ ์์๋ ์ง์ ๋ณด๊ด๋ ํ๊ธ์ ๋๋ค. ๋ฐฉ ํ๊ฐ์ด๋ฐ ๋์ ์ ๋๋ ๊ณณ์ ๋๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋๋ค. ๋ชจ๋ "์ฌ์ฉ์"(๊ทํ์ ์ง์ ์ค๋ ์ฌ๋)๋ ๊ทํ์ ๊ธ์ก์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ฆ, ๊ทํ์ ๋์ ๊ฐ์ ธ๊ฐ ์ ์์ต๋๋ค. ๊ธ๊ณ ์ ๋ฃ์ด๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ทํ๋ง ์ก์ธ์คํ ์ ์์ผ๋ฉฐ ํน์ ์ฝ๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด๋ฏธ ์์ ํ ์บก์ํ์ ๋ช ๋ฐฑํ ์๋ ์ก์ธ์ค ์์ ์(๊ฐ์ธ, ๊ณต๊ฐ ๋ฑ)์ ์ธํฐ ๋ฐ ๊ฒํฐ์ ๋๋ค. ์บก์ํํ์ง ์์ผ๋ฉดCat ํด๋์ค์ ๋์ด ํ๋๋ ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
Cat.age = -1000;
์บก์ํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ฉด ๋์ด๊ฐ ์์๋ก ์ค์ ๋์ง ์๋๋ก ํ ์ ์๋ setter ๋ฉ์๋๋ก ๋์ด ํ๋๋ฅผ ๋ณดํธํ ์ ์์ต๋๋ค.
์์น 4. ๋คํ์ฑ
๋คํ์ฑ์ ์ฌ๋ฌ ์ ํ์ด ๋์ผํ ์ ํ์ธ ๊ฒ์ฒ๋ผ ์์ ํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋ํ ๊ฐ์ฒด์ ๋์์ ํด๋น ์ ํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ณต์กํ๊ฒ ๋ค๋ฆฌ๋์? ์ง๊ธ ๋น์ฅ ์ดํดํฉ์๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ์๋ฅผ ๋ค์ด๋ณด์: ๋๋ฌผ. ๋จ์ผ speak() ๋ฉ์๋์ ๋ ๊ฐ์ ํ์ ํด๋์ค์ธ Cat ๋ฐ Dog ๋ก Animal ํด๋์ค๋ฅผ ๋ง๋ญ๋๋ค .
public class Animal {
public void speak() {
System.out.println("Hello!");
}
}
public class Dog extends Animal {
@Override
public void speak() {
System.out.println ("Woof-woof!");
}
}
public class Cat extends Animal {
@Override
public void speak() {
System.out.println("Meow!");
}
}
์ด์ ์ฐ๋ฆฌ๋ Animal ์ฐธ์กฐ ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์ฌ๊ธฐ์ Dog ๊ฐ์ฒด๋ฅผ ํ ๋นํ๋ ค๊ณ ํฉ๋๋ค.
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.speak();
}
}
์ด๋ค ๋ฉ์๋๊ฐ ํธ์ถ๋ ๊ฒ ๊ฐ๋์? Animal.speak() ๋๋ Dog.speak() ? Dog ํด๋์ค ์ ๋ฉ์๋ ์ด๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Woof-woof! ์ฐ๋ฆฌ๋ Animal ์ฐธ์กฐ ๋ฅผ ๋ง๋ค์์ง ๋ง ๊ฐ์ฒด๋ Dog ์ฒ๋ผ ๋์ํฉ๋๋ค . ํ์ํ ๊ฒฝ์ฐ ๊ณ ์์ด, ๋ง ๋๋ ๋ค๋ฅธ ๋๋ฌผ์ฒ๋ผ ํ๋ํ ์ ์์ต๋๋ค. ์ค์ํ ๊ฒ์ ์ผ๋ฐ Animal ์ฐธ์กฐ ๋ณ์์ ํน์ ํ์ ํด๋์ค๋ฅผ ํ ๋นํ๋ ๊ฒ์
๋๋ค. ๋ชจ๋ ๊ฐ๋ ๋๋ฌผ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. "๊ฐ์ฒด์ ๋์์ ์ ํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค."๋ผ๊ณ ๋งํ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ผ๋์ ๋์๋ ๊ฒ์
๋๋ค. Cat ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๋ฉด ...
public static void main(String[] args) {
Animal cat = new Cat();
cat.speak();
}
speak () ๋ฉ์๋๋ "์ผ์น!"์ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ '์ฌ๋ฌ ์ ํ์ด ๋์ผํ ์ ํ์ธ ๊ฒ์ฒ๋ผ ์์
ํ ์ ์๋ ๋ฅ๋ ฅ'์ด๋ ๋ฌด์์ ์๋ฏธํฉ๋๊น? ์ด๊ฒ์ ๋ํ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋๋ฌผ์ ์ํ ์ด๋ฐ์๋ฅผ ๋ง๋ ๋ค๊ณ ์์ํด ๋ด
์๋ค. ์ด๋ฐ์๋ ๋ชจ๋ ๋๋ฌผ์๊ฒ ์์ง์ ์ ๊ณตํ ์ ์์ด์ผ ํ๋ฏ๋ก Animal ๋งค๊ฐ๋ณ์(๋๋ฌผ์ด ๋จธ๋ฆฌ๋ฅผ ์๋ฅด๋ ๊ฒ)๋ฅผ ์ฌ์ฉํ์ฌ trim() ๋ฉ์๋๋ฅผ ๋ง๋ญ๋๋ค.
public class AnimalBarbershop {
public void trim(Animal animal) {
System.out.println("The haircut is done!");
}
}
์ด์ Cat ๋ฐ Dog ๊ฐ์ฒด๋ฅผ trim() ๋ฉ์๋ ์ ์ ๋ฌํ ์ ์์ต๋๋ค !
public static void main(String[] args) {
Cat cat = new Cat();
Dog dog = new Dog();
AnimalBarbershop barbershop = new AnimalBarbershop();
barbershop.trim(cat);
barbershop.trim(dog);
}
๋ช
ํํ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. AnimalBarbershop ํด๋์ค๋ Cat ๋ฐ Dog ์ ํ์ด ๋์ผํ ์ ํ์ธ ๊ฒ์ฒ๋ผ ์๋ํฉ๋๋ค . ๋์์ ๊ณ ์์ด ์ ๊ฐ๋ ์๋ก ๋ค๋ฅธ ํ๋์ ํฉ๋๋ค. ๊ทธ๋ค์ ๊ฐ๊ฐ ๋ค๋ฅด๊ฒ ๋งํฉ๋๋ค.
GO TO FULL VERSION