์•ˆ๋…•! ์˜ค๋Š˜ ์ˆ˜์—…์—์„œ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์›๋ฆฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์™œ Java๊ฐ€ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์„ค๊ณ„๋˜์—ˆ๋Š”์ง€ ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ๋ง์€, ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ  ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํด๋ž˜์Šค์—๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ๊ฒƒ์ด ์•„๋‹Œ ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋˜๋„๋ก ์–ธ์–ด๊ฐ€ ๊ตฌ์กฐํ™”๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? "๊ฐ์ฒด"์˜ ๊ฐœ๋…์ด ๋ฐœ๋ช…๋˜๊ณ  ์ตœ์ „์„ ์— ๋†“์ธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ชจ๋“  ์–ธ์–ด๊ฐ€ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด Java์— ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ณด์‹œ๋‹ค์‹œํ”ผ ๋งŽ์€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค :) ์˜ค๋Š˜ ์ˆ˜์—…์—์„œ ๊ฐ๊ฐ์— ๋‹ตํ•ด ๋ด…์‹œ๋‹ค.

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ฌผ๋ก  Java๋Š” ๋‹จ์ง€ ์žฌ๋ฏธ๋ฅผ ์œ„ํ•ด ๊ฐœ์ฒด์™€ ํด๋ž˜์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ Java ์ œ์ž‘์ž์˜ ๋ณ€๋•์ด ์•„๋‹ˆ๋ฉฐ ๊ทธ๋“ค์˜ ๋ฐœ๋ช…ํ’ˆ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ์ฒด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ์–ธ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ดˆ์˜ ๊ทธ๋Ÿฌํ•œ ์–ธ์–ด๋Š” "Simula"๋ผ๊ณ  ๋ถˆ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋…ธ๋ฅด์›จ์ด์—์„œ 1960๋…„๋Œ€์— ๋‹ค์‹œ ๋ฐœ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ "ํด๋ž˜์Šค"์™€ "๋ฉ”์„œ๋“œ"์˜ ๊ฐœ๋…์ด Simula์— ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ๊ธฐ์ค€์— ๋”ฐ๋ฅด๋ฉด "Simula"๋Š” ๊ณ ๋Œ€ ์–ธ์–ด์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋ˆ„๊ตฌ๋‚˜ Java์™€ "ํŒจ๋ฐ€๋ฆฌ ์œ ์‚ฌ์„ฑ"์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์›๋ฆฌ - 1์•„๋งˆ๋„ ์ด ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ฝ๊ณ  ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ๋Œ€๋žต์ ์œผ๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :)

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 ์œ ํ˜•์ด ๋™์ผํ•œ ์œ ํ˜•์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค . ๋™์‹œ์— ๊ณ ์–‘์ด ์™€ ๊ฐœ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ–‰๋™์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ฐ๊ฐ ๋‹ค๋ฅด๊ฒŒ ๋งํ•ฉ๋‹ˆ๋‹ค.

OOP๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

OOP๊ฐ€ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…์œผ๋กœ ๋“ฑ์žฅํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ ˆ์ฐจ์  ์–ธ์–ด์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ ๋„๊ตฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ณธ์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐœ๋ช…ํ•˜๊ฒŒ ๋œ ๋™๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฌด์—‡๋ณด๋‹ค๋„ ๊ทธ๋“ค์ด ์ง๋ฉดํ•œ ์ž‘์—…์˜ ๋ณต์žก์„ฑ. 60๋…„ ์ „์— ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ž‘์—…์ด "์ผ๋ถ€ ์ˆ˜ํ•™์  ํ‘œํ˜„ ํ‰๊ฐ€"์™€ ๊ฐ™์€ ๊ฒƒ์ด๋ผ๋ฉด ์ด์ œ๋Š” "STALKER ๊ฒŒ์ž„์— ๋Œ€ํ•œ 7๊ฐœ์˜ ๋‹ค๋ฅธ ์—”๋”ฉ ๊ตฌํ˜„, A, B, C, DE ์ง€์ ์—์„œ ๋‚ด๋ฆฐ ํ”Œ๋ ˆ์ด์–ด์˜ ๊ฒฐ์ •์˜ ์กฐํ•ฉ์— ๋”ฐ๋ผ"์™€ ๊ฐ™์€ ๊ฒƒ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. , ๊ฒŒ์ž„์—์„œ F." ๋ณด์‹œ๋‹ค์‹œํ”ผ ์ง€๋‚œ ์ˆ˜์‹ญ ๋…„ ๋™์•ˆ ์ž‘์—…์ด ๋ถ„๋ช…ํžˆ ๋” ๋ณต์žกํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ๋”์šฑ ๋ณต์žกํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด OOP๊ฐ€ ๋“ฑ์žฅํ•œ ๋˜ ๋‹ค๋ฅธ ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ•™์  ํ‘œํ˜„์„ ์‰ฝ๊ฒŒ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๊ฐœ์ฒด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฒŒ์ž„ ์—”๋”ฉ ์ž‘์—…์€ ์ปค์Šคํ…€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋Š” ์„ค๋ช…ํ•˜๊ธฐ์กฐ์ฐจ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํด๋ž˜์Šค์™€ ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ Game, Stalker, Ending, PlayerDecision, GameEvent ๋“ฑ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์‹œ์ž‘ํ•˜์ง€ ์•Š์•„๋„ ๋จธ๋ฆฟ์†์—์„œ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ์ฑ…์„ "์Šค์ผ€์น˜"ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์˜ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ทธ๋ ‡๊ฒŒ ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฝค ์ž์ฃผ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋งŽ์€ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š” ํŠธ๋ฆฌ์™€ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์˜ ํ•œ ๋ถ„๊ธฐ ๋˜๋Š” ๋‹ค๋ฅธ ๋ถ„๊ธฐ๊ฐ€ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์†Œ๊ทœ๋ชจ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ ํŽธ๋ฆฌํ•˜์ง€๋งŒ ํฐ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด OOP์˜ ์ถœํ˜„์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์ด์œ ์˜€์Šต๋‹ˆ๋‹ค. ์ด ํŒจ๋Ÿฌ๋‹ค์ž„์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์„ "๋ชจ๋“ˆ"(ํด๋ž˜์Šค)์˜ ๋ฌถ์Œ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ–ˆ์œผ๋ฉฐ ๊ฐ ํด๋ž˜์Šค๋Š” ์ž‘์—…์˜ ์ž์ฒด ๋ถ€๋ถ„์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋กœ ์ƒํ˜ธ ์ž‘์šฉํ•จ์œผ๋กœ์จ ๋ชจ๋“  ๊ฐœ์ฒด๋Š” ์šฐ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๋งŽ์€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.