[Java] ์ž๋ฐ”์˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object-Oriented Programming)

2021. 2. 28. 20:53ใ†๊ฐœ๋… ์ •๋ฆฌ ์ž‘์—…์‹ค/Java

728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”? ์ฃผ๋‹ˆํ•˜๋ž‘ ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ฃผ๋‹ˆํ•˜๋ž‘์€ ๊ตญ๋น„์ง€์›์œผ๋กœ ์ž๋ฐ”๋ฅผ ๋ฐฐ์šฐ๊ณ  ์žˆ๊ณ , ๊ทธ ๊ณต๋ถ€ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๋ณต์Šตํ• ๊ฒธ ๋˜ํ•œ, ์ž๋ฐ” ๊ณต๋ถ€๋ฅผ ํ•˜์‹œ๋Š” ๋ถ„๋“ค๊ป˜ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋Š” ์ ์—์„œ ๋ธ”๋กœ๊ทธ์— ๊ธ€์„ ์˜ฌ๋ฆฌ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์ผ๋‹จ, ์ž๋ฐ”์˜ ๊ฐ์ฒด์ง€ํ–ฅ์€ C์–ธ์–ด๋ฅผ ๊ฐ€๋ณ๊ฒŒ ๋ฐฐ์› ๋˜ ๋ถ„๋“ค์ด๋ผ๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ๋งŽ์ด ์–ด๋ ค์›€์„ ๋Š๋ผ์‹ค๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด์—์š”. ์ €๋„ ๊ทธ๋žฌ๊ณ , ๊ฐ™์ด ๊ณต๋ถ€ํ•˜๋Š” ๋ช‡๋ช‡ ๋ถ„๋“ค๋„ ๊ทธ๋Ÿฌํ•œ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋‹จ, ์ฃผ๋‹ˆํ•˜๋ž‘์€ ๊ฐ์ฒด์ง€ํ–ฅ์— ๋Œ€ํ•ด ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๋ฐ” ์ œ๊ฐ€ ์ดํ•ดํ–ˆ๋˜ ๋ฐฉ๋ฒ•์„ ์—ฌ๋Ÿฌ๋ถ„๋“ค๊ป˜ ์†Œ๊ฐœ ํ•˜๋ฉด์„œ ๋งŽ์€ ๋ถ„๋“ค์ด ์ €๋ณด๋‹ค๋Š” ์ข€ ๋” ์‰ฝ๊ฒŒ ๊ฐ์ฒด์ง€ํ–ฅ์„ ์ดํ•ดํ•˜์‹œ๊ธธ ๋ฐ”๋ผ๋Š” ๊ฒƒ์ด์—์š”.

์ด ๊ธ€์€ ๊ฐœ๋… ์œ„์ฃผ๋กœ ์ž‘์„ฑํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท ๊ฐ•์˜ ๋“ฑ์„ ํ†ตํ•ด ์ž๋ฐ”์˜ ๊ฐ์ฒด์ง€ํ–ฅ์„ ๊ณต๋ถ€ ํ–ˆ๋Š”๋ฐ, ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐ€์‹ ๋‹ค๋ฉด ๋„์›€์ด ๋  ๊ฒƒ์ด์ง€๋งŒ, ์™„์ „ ๋‚ด์šฉ์„ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ๋Š” ๋‹ค์†Œ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋ฐ”๋กœ ์‹œ์ž‘ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

 


 

 

๐Ÿ“Œ Java Code์—์„œ ๊ฐ์ฒด(๊ฐ์ฒด์ง€ํ–ฅ)


   ๐Ÿ“์„ค๋ช…ํ•˜๊ธฐ์— ์ „

๋ณธ๊ฒฉ์ ์ธ ์„ค๋ช…์— ์•ž ์จ์„œ ๊ฐ๊ฐ์˜ ๋ช…์นญ์— ์ œ๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ๋˜ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์†Œ๊ฐœ๋ฅผ ํ•ด ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์˜ˆ์‹œ๋“ค์ด ์žˆ๋Š”๋ฐ, ์ œ๊ฐ€ ๊ต์œก ๋ฐ›์œผ๋ฉด์„œ ์˜ˆ์‹œ๋กœ ๋“ค์—ˆ๋˜ ๊ฒƒ๊ณผ ์ œ๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ๋˜ ์˜ˆ์‹œ๋ฅผ ๋‘๊ฐ€์ง€๋กœ ์„ค๋ช… ๋“œ๋ฆฌ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 ๐Ÿ‘‰ ์ฒซ๋ฒˆ์งธ. Class(๊ฐ์ฒด) ํ˜น์€ ์ธ์Šคํ„ด์Šค

๊ต์œก์˜ ์˜ˆ์‹œ: ์ œํ’ˆ ์„ค๊ณ„๋„

์ฃผ๋‹ˆํ•˜๋ž‘์˜ ์˜ˆ์‹œ: ํšŒ์‚ฌ (Main์ด ์žˆ๋Š” ๋˜ํ•œ, ํŒŒ์ผ ์ œ๋ชฉ๋ช…๊ณผ ๋™์ผํ•œ Class๋ช…์„ ๊ฐ€์ง„ Class๋ฅผ ์šฐ๋ฆฌ ํšŒ์‚ฌ๋ผ๊ณ  ์ƒ๊ฐ

 

 

 ๐Ÿ‘‰ ๋‘๋ฒˆ์งธ. ํ•จ์ˆ˜ (Method)

๊ต์œก์—์„œ์˜ ์˜ˆ์‹œ: ๅ‡ฝๆ•ธ. ์ฆ‰, ๋ฌผ๊ฑด์„ ๋‹ด๋Š” ์ƒ์ž์— ์ž…๋ ฅ(๋งค๊ฐœ๋ณ€์ˆ˜)๊ฐ’์„ ๋„ฃ์–ด ์ถœ๋ ฅ(Return)๊ฐ’์„ ์–ป๋Š” ์ƒ์ž.์ฃผ๋‹ˆํ•˜๋ž‘์˜ ์˜ˆ์‹œ: 1) ๊ณ„์‚ฐ๊ธฐ. ์ž…๋ ฅ(๋งค๊ฐœ๋ณ€์ˆ˜)๊ฐ’์„ ์ž…๋ ฅ์„ ๋ฐ›์•„ ๊ทธ ๊ฒฐ๊ณผ์ธ ์ถœ๋ ฅ(Return)์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ณ„์‚ฐ๊ธฐ. ์ด ๊ณ„์‚ฐ๊ธฐ๋Š” ๋ฌธ์ž๋„ ๊ณ„์‚ฐ์ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์ปดํ“จํ„ฐ๋ผ๋Š” ๊ณ„์‚ฐ๊ธฐ๋Š” ๋ฌธ์ž๋„ ์‚ฌ์‹ค 0๊ณผ 1๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

2) ๊ทธ ํšŒ์‚ฌ์˜ ๊ฐ ํŒ€. ํšŒ์‚ฌ๋ผ๋Š” Class(๊ฐ์ฒด)์—๋Š” ํŒ€์ด ์žˆ๊ณ , ๊ทธ ํŒ€์—๋Š” ํŒ€์›์ด ์กด์žฌ. Main์ด๋ผ๋Š” Method๋Š” ์šฐ๋ฆฌํšŒ์‚ฌ์ด๊ณ , ์ด ์ผ์„ ํ•˜์ฒญ์„ ์ฃผ์–ด ๋‹ค๋ฅธ ํšŒ์‚ฌ(Class)์—๊ฒŒ ์™ธ์ฃผ๋ฅผ ์ฃผ๋Š”๋ฐ, ๊ทธ ์™ธ์ฃผ ์—…์ฒด ์•ˆ์—๋Š” ํŒ€์ด ์žˆ๊ณ , ํŒ€์›์ด ์กด์žฌ. 

 

 

 ๐Ÿ‘‰ ์„ธ๋ฒˆ์งธ. ๋ณ€์ˆ˜

๊ต์œก์—์„œ์˜ ์˜ˆ์‹œ: ๋ฌผ๊ฑด์„ ๋‹ด๋Š” ํ•˜๋‚˜์˜ ๊ทธ๋ฆ‡

์ฃผ๋‹ˆํ•˜๋ž‘์˜ ์˜ˆ์‹œ: ์–ด๋–ค ํšŒ์‚ฌ์˜ ํšŒ์‚ฌ์› 1๋ช…. ์ด ํšŒ์‚ฌ์›์€ ํ•˜๋ฃจ์— ํ•˜๋‚˜์˜ ์ผ๋งŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ.

 

 

 ๐Ÿ‘‰ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋ž€?

๊ธฐ์กด์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(์ ˆ์ฐจ์ง€ํ–ฅ ์–ธ์–ด)์— ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๊ทœ์น™ ์ถ”๊ฐ€

์žฅ์ : ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ - ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฝ”๋“œ ๊ด€๋ฆฌ ์šฉ์ด - ์ฝ”๋“œ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ด์šฉ ์ ์€ ๋…ธ๋ ฅ์œผ๋กœ ์‰ฝ๊ฒŒ ์ฝ”๋“œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

์‹ ๋ขฐ์„ฑ์ด ๋†’์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์ œ์–ด์ž์™€ Method๋ฅผ ์ด์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ , ์ฝ”๋“œ์˜ ์ค‘๋ณต ์ œ๊ฑฐ๋กœ ์ฝ”๋“œ์˜ ๋ถˆ์ผ์น˜๋กœ ์ธํ•œ ์˜ค๋™์ž‘ ๋ฐฉ์ง€ 

 

 

 

 ๐Ÿ‘‰๊ฐ์ฒด ์ƒ์„ฑ ์ˆœ์„œ

 1) Class ์ •์˜

 2)๊ฐ์ฒด ์ƒ์„ฑ (new)   

3) ๊ฐ์ฒด์™€ ๊ฐ์ฒด ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ( ์„œ๋กœ ํ˜ธ์ถœ, ์‘๋‹ต)           

   - ๊ฐ์ฒด ์•ˆ์—๋Š” ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค. ('๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ „๋‹ฌ๊ณผ ๋ฐ˜ํ™˜์„ ํ†ตํ•ด ๊ฐ’์„ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค'๋ฅผ ์ƒํ˜ธ ์ž‘์šฉ์ด๋ผ ์นญํ•จ.)       

4) ๊ฐ์ฒด๊ฐ„์˜ ๊ด€๊ณ„ (์ƒ์†๊ณผ ๊ตฌํ˜„) => ๋ฉ”์„œ๋“œ ์ค‘์‹ฌ => ํ•จ์ˆ˜ํ˜• ์–ธ์–ด์˜ ๋Œ€๋‘           

  - ๋ฐ์ดํ„ฐ๋Š” ๋ณ€์ˆ˜์—๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ , ๊ธฐ๋Šฅ์€ ํ•จ์ˆ˜๋กœ ์ด์šฉ.           

  - ์ƒ์†์ด๋ž€? ๊ธฐ์กด์— ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ํ•„์š”์— ์˜ํ•ด ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€๋กœ ๋งŒ๋“ค๊ฒ ๋‹ค. ๋ผ๋Š” ์˜๋ฏธ

  - ๊ตฌํ˜„(Implements)์ด๋ž€? ์•„์ง ๋งŒ๋“ค์ง€ ์•Š์€ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ฒ ๋‹ค๋Š” ์˜๋ฏธ.

5) Class์—์„œ ๊ฐ์ฒด๋ฅผ ์ •์˜ ํ•  ๋•Œ, ์ „ํ™”๋ฒˆํ˜ธ์™€ ๊ฐ™์ด ๊ฐ๊ฐ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค๋ฉด Static์„ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค๋ฉด Static์„ ๋ถ™ํ˜€์ฃผ์–ด์•ผ ํ•œ๋‹ค.

6) ํ•„๋“œ๋Š” ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ผ๋Š” ์˜๋ฏธ์ด๊ณ , ๋ฉ”์„œ๋“œ๋Š” ์–ด๋–ค ๊ธฐ๋Šฅ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ผ๋Š” ์˜๋ฏธ

   - ํ•„๋“œ๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์ด๋ฉฐ, ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ์ „์—ญ ๋ณ€์ˆ˜์ด๋‹ค. ์ฃผ๋‹ˆํ•˜๋ž‘์€ ๊ทธ ํด๋ž˜์Šค์˜ ์ง์›์œผ๋กœ ์ดํ•ด.

   - ๋ฉ”์„œ๋“œ๋Š” ๊ทธ ํด๋ž˜์Šค์˜ ํŒ€์ด๋‹ค. ํŒ€์€ ํŒ€์› ๊ฐ๊ฐ์ด ์ž๊ธฐ์˜ ์—ญํ• ์„ ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•œ๋‹ค.

   - ๊ฒฐ๊ตญ ์‹คํ–‰์€ ํ•จ์ˆ˜๋กœ ํ•œ๋‹ค.

7) ์€๋‹‰ํ™”(์บก์Šํ™”)

   - Main์—์„œ ์˜๋„ํ•˜์ง€ ์•Š์€ Class์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์žƒ๋Š”๋‹ค. ๊ฐœ๋ฐœ์‹œ์— ์ด๊ฒƒ์„ ๋ง‰์•„์•ผ ํ•œ๋‹ค.

   - ๊ฐ์ฒด๋ช…์— ์ (.)์„ ์ฐ์—ˆ์„ ๋•Œ, ๋‚˜์˜ค๋Š” ๋ณ€์ˆ˜๋ช…๋“ค์ด๋‚˜, ๊ธฐ๋Šฅ๋“ค์ด ์•ˆ ๋‚˜์˜ค๊ฒŒ ํ•˜๊ฒ ๋‹ค๋Š” ๊ฒƒ.

   - Member ์ค‘ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒƒ์— ์ ‘๊ทผ๊ถŒํ•œ, ์ ‘๊ทผ ์ง€์ •์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ.

      => Public: ๊ณต๊ฐœ(Method์— ์‚ฌ์šฉ)

      => Private: ๋น„๊ณต๊ฐœ(Field์— ์‚ฌ์šฉ)

      => Protected: ์ œํ•œ์  ๊ณต๊ฐœ

      => (defualt): ์ œํ•œ์  ๊ณต๊ฐœ

 

์œ„์˜ ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ์ ‘๊ทผ ์ œ์–ด์ž์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋„๋ก ํ•  ๊ฒƒ์ด์—์š”! 

8) Classํ˜• ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ Class์•ˆ์— ํ•„๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ๊ทธ Class๋Š” ํ•„๋“œ๋ฅผ ์˜์กด. ์˜์กด์„ฑ์ด๋ž€ ์—†์œผ๋ฉด ์•ˆ๋˜๋Š” Class(๊ฐ์ฒด)๋“ฑ์ด ์žˆ๋‹ค๋ผ๋Š” ์˜๋ฏธ.

 

 

 

 

 

 ๐Ÿ“ ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค


ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šคํ™”๋ผ๊ณ  ํ•˜๋ฉฐ, ์–ด๋–ค ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ฅผ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด: ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ์šฉ์–ด

์ธ์Šคํ„ด์Šค: ํŠน์ • ํด๋ž˜์Šค๋กœ ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๊ฐ์ฒด

 

๐Ÿ‘‰ ๊ฐ์ฒด์˜ ๊ตฌ์„ฑ์š”์†Œ - ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ


์†์„ฑ(Property): ๋ฉค๋ฒ„๋ณ€์ˆ˜, ํŠน์„ฑ, ํ•„๋“œ(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜), ์ƒํƒœ

๊ธฐ๋Šฅ(Function): Method, ํ•จ์ˆ˜, ํ–‰์œ„

/**
* ์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„
*/

class Tv {	// Tv๋ผ๋Š” ์™ธ๋ถ€ ์—…์ฒด

// ๋ณ€์ˆ˜ = TvํšŒ์‚ฌ์˜ ์ง์›๋“ค์˜ ํŠน์„ฑ๊ณผ ์ง์›๋ช…. (Data Type = ์ง์› ํŠน์„ฑ, ๋ณ€์ˆ˜ = ์ง์›๋ช…)
	
    String color;	// ์ƒ‰๊น”
    boolean power;  // ์ „์›์ƒํƒœ
    int channel;	// ์ฑ„๋„
    
    // Method = Tv๋ผ๋Š” ํšŒ์‚ฌ์˜ ๊ฐ ํŒ€.
    
   	void power() {
    	power = !power; 
    }
    
    void chanelUp() {
    	channel ++; 
    }
    
    void channelDonw() {
    	channel --;
    }
    

์†์„ฑ์€ ํฌ๊ธฐ, ๊ธธ์ด, ๋†’์ด, ์ƒ‰์ƒ, ๋ณผ๋ฅจ, ์ฑ„๋„ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ๊ณ , ๊ธฐ๋Šฅ์€ ์ผœ๊ธฐ, ๋„๊ธฐ, ๋ณผ๋ฅจ ๋†’์ด๊ธฐ / ์ค„์ด๊ธฐ, ์ฑ„๋„ ๋ณ€๊ฒฝํ•˜๊ธฐ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

๐Ÿ‘‰ ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ


 ์•ž ์จ ์ฃผ๋‹ˆํ•˜๋ž‘์€ ํด๋ž˜์Šค๋ฅผ ํšŒ์‚ฌ๋ผ๊ณ  ์ƒ๊ฐ์„ ํ–ˆ๊ณ , ๊ต์œก์—์„œ๋Š” ์„ค๊ณ„๋„๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์„ค๋ช…์„ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

/**
* ์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„
*/

// [ํด๋ž˜์Šค๋ช…] [๋ณ€์ˆ˜๋ช…]				// ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ
                                  // ์™ธ์ฃผ ์—…์ฒด๋ฅผ ๊ด€๋ฆฌํ•  ์ง์› ์ฑ„์šฉ
                                  
// [๋ณ€์ˆ˜๋ช…] = new [ํด๋ž˜์Šค๋ช…]		// ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ๋’ค, ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐ ๋ณ€์ˆ˜์— ์ €์žฅ
								  // ์–ด๋Š ์—…์ฒด(ํด๋ž˜์Šค)์— ์™ธ์ฃผ ํ•˜์ฒญ ๊ณ„์•ฝ์„œ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค ๋ณ€์ˆ˜๊ฐ€ ๊ทธ ํšŒ์‚ฌ ์—ฐ๋ฝ์ฒ˜ ๋ณด๊ด€

Tv t;							  // Tv ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜ t๋ฅผ ์„ ์–ธ
								  // Tv ํŠน์„ฑ์„ ๊ฐ€์ง„ t๋ผ๋Š” ์ง์›์„ ์™ธ์ฃผ ์—…์ฒด ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ฑ„์šฉ
                                  
t = new Tv();					  // Tv์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ. ์ƒ์„ฑ๋œ Tv ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ t์— ์ €์žฅ
								  // t๋ผ๋Š” ์ง์›์ด TvํšŒ์‚ฌ์™€ ์™ธ์ฃผ ํ•˜์ฒญ ๊ณ„์•ฝ์„ ๋งบ์–ด Tv ์—…์ฒด์˜ ์—ฐ๋ฝ์ฒ˜๋ฅผ ๋ณด๊ด€

 

TvTest.java
/**
*์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„
*/

Class Tv {
	// Tv์˜ ์†์„ฑ(๋ฉค๋ฒ„๋ณ€์ˆ˜)
   	String color;				// ์ƒ‰์ƒ
    boolean power;				// ์ „์›์ƒํƒœ(on/off)
    int channel;				// ์ฑ„๋„
    
        // Tv์˜ ๊ธฐ๋Šฅ(๋ฉ”์„œ๋“œ)
        void power() {				// TV๋ฅผ ์ผœ๊ฑฐ๋‚˜, ๋„๋Š” ๊ธฐ๋Šฅ ๋ฉ”์„œ๋“œ
            power = !power;
      }

        void chaanelUP() {			// TV์˜ ์ฑ„๋„์„ ๋†’์ด๋Š” ๊ธฐ๋Šฅ ๋ฉ”์„œ๋“œ
            ++channel;
      }

        void channelDown() {		// TV์˜ ์ฑ„๋„์„ ๋‚ฎ์ถ”๋Š” ๊ธฐ๋Šฅ ๋ฉ”์„œ๋“œ
            --channel;
      }
  }
  
  /* ########################### Main ############################### */
  
  class TvTest {
  	public static void main(String[] args) {
    	Tv t;								// Tv๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ t ์„ ์–ธ
        t = new Tv();						// Tv๊ฐ์ฒด(์ธ์Šคํ„ด์Šค) ์ƒ์„ฑ.
        t.channel = 7;						// Tv๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋‚ด์— channel ๋ณ€์ˆ˜์— 7 ๊ฐ’ ์ž…๋ ฅ.
        t.channelDown();					// Tv๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋‚ด์— channelDown(); ๋ฉ”์„œ๋“œ ํ˜ธ์ถœํ•˜์—ฌ ๊ทธ ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋Šฅ ๋™์ž‘
       
        System.out.println("ํ˜„์žฌ ์ฑ„๋„์€ " + t.channel + "์ž…๋‹ˆ๋‹ค.");
        
        }
 }
 
 
 
/* ############################ ์‹คํ–‰ ๊ฒฐ๊ณผ  ############################	*/
 
 // ํ˜„์žฌ ์ฑ„๋„์€ 6 ์ž…๋‹ˆ๋‹ค.
  

 

๊ฐ์ฒด ์ƒ์„ฑ ์˜ˆ์‹œ - ์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

 

 

 

 ๐Ÿ“Class ์ •์˜


Class๋ผ๋Š” ์˜ˆ์•ฝ์–ด๋กœ ์ •์˜๋œ ๋’ค {} ์ค‘๊ด„ํ˜ธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋ฉฐ, ์•ž๊ธ€์ž๊ฐ€ ๋Œ€๋ฌธ์ž ์ž๋ฃŒํ˜•์˜ ํ•˜๋‚˜์ด๋‚˜, ๊ธฐ๋ณธํ˜•์€ ์•„๋‹ˆ๊ณ , ๋ณตํ•ฉํ˜•์œผ๋กœ ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์š”์ฒญ์„ ํ•˜๋Š” ์ชฝ์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Main Method์—์„œ ์–ด๋–ค ๊ฐ์ฒด(Class)๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด Main์ด ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์ด ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ํด๋ž˜์Šค์˜ ์ •์˜๋Š” ๊ฐ์ฒด๋ฅผ ์ •์˜ ํ•ด ๋†“์€ ๊ฒƒ์ด๊ณ , ๊ทธ ์šฉ๋„๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์‚ฌ์šฉ์ด ๋ฉ๋‹ˆ๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ์ฒด์˜ ์ •์˜๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๊ฐ์ฒด๋Š” ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ. ์‚ฌ๋ฌผ ๋˜๋Š” ๊ฐœ๋…์ด๋ฉฐ, ๊ทธ ์šฉ๋„๋Š” ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ๊ณผ ์†์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

์‚ฌ์šฉ์ž Type: ์›ํ•˜๋Š” Type์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ž˜์Šค๋Š” ์„ค๊ณ„๋„ ํ˜น์€ ํšŒ์‚ฌ๋กœ ๋น„์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ตฌ์š”. ์‚ฌ์šฉ์ž ์ •์˜ Data Type ์ž…๋‹ˆ๋‹ค.

 

โœ๏ธ ์˜ˆ์‹œ

int hour: 

int min; 

int sec;

// ์„ธ ๊ฐœ์˜ ์‹œ๊ฐ„์„ ์ €์žฅํ•˜๋ ค๋ฉด 3๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์ด์—์š”. 
// ๋งŒ์•ฝ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค๋ฉด ์‹œ๊ฐ„ ๋”ฐ๋กœ ๋ถ„ ๋”ฐ๋กœ ๊ฐ๊ฐ์˜ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๊ฒ ์ง€์š”? 
// Class๋ฅผ ๋งŒ๋“ค๋ฉด ํ•˜๋‚˜์˜ Class๋กœ ์‹œ, ๋ถ„, ์ดˆ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.



################## Time Class ์ƒ์„ฑ ########################

class Time {
	int hour;
    int min;
    int sec;
} // Time Class End

################## Test Class ์ƒ์„ฑ ########################

class Test {
	public static void main(String[] args) {
    	Time t = new Time();
   } // Main End
} // Test Class End
1. ๋ณ€์ˆ˜: ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„
2. ๋ฐฐ์—ด: ๊ฐ™์€ ์ข…๋ฅ˜์˜ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„
3. ๊ตฌ์กฐ์ฒด: ์„œ๋กœ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์ข…๋ฅ˜ ๊ด€๊ณ„ ์—†์ด ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„
4. ํด๋ž˜์Šค: ๋ฐ์ดํ„ฐ์™€ ํ•จ์ˆ˜์˜ ๊ฒฐํ•ฉ(๊ตฌ์กฐ์ฒด + ํ•จ์ˆ˜)

 

์ž๋ฐ” ๊ฐ์ฒด์ง€ํ–ฅ ์ˆ˜์—… ํ•„๊ธฐ์ž๋ฃŒ 1.1
์ž๋ฐ” ๊ฐ์ฒด์ง€ํ–ฅ ์ˆ˜์—… ํ•„๊ธฐ์ž๋ฃŒ 1.2
์ž๋ฐ” ๊ฐ์ฒด์ง€ํ–ฅ ์ˆ˜์—… ํ•„๊ธฐ์ž๋ฃŒ 1.3

 ์ฐธ๊ณ ํ˜• ๋ฐฐ์—ด์„ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ์ฐธ์กฐํ˜• ๋ฐฐ์—ด๋ช… ์•ž์— ์ž๋ฃŒํ˜• ํƒ€์ž…์€ ์ ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค!

์•ˆ ๊ทธ๋Ÿฌ๋ฉด ์ž๋ฃŒํ˜• ์•ˆ ๋งž๋Š”๋‹ค๊ณ , ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋  ๊ฒƒ์ด์—์š”!

 

 

  ๐Ÿ“ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ


๋ณ€์ˆ˜๋Š” ์ž๋ฃŒํ˜•์ด ์ •ํ•ด์ ธ์•ผ ํ•˜๋ฉฐ, ๊ธฐ๋ณธํ˜•(Primitive Type)์ธ ๊ฒฝ์šฐ '๊ฐ’์ด ์–ผ๋งˆ๊ฐ€ ์žˆ๋‹ค'๋ผ๋Š” ์˜๋ฏธ์ด๊ณ , Classํ˜•(์ฐธ์กฐํ˜• - Reference Type)์ธ ๊ฒฝ์šฐ ๋ณ€์ˆ˜์•ˆ์— ๊ฐ’์ด ์•„๋‹ˆ๊ณ , ์ฃผ์†Œ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ž๋ฃŒํ˜•์ด ๋‹ค๋ฅด๋ฉด ๋‹น์—ฐํžˆ ์ฒ˜๋ฆฌ๊ฐ€ ๋‹ค๋ฅด๊ฒ ์ง€์š”?

์ฆ‰, ๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜๋Š” ๊ฐ’ ํ•˜๋‚˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜์ด๊ณ , int num = 10;์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด num์€ 10์ด๋‹ค๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์ฆ‰, ๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜๋Š” ๊ทธ ์ž์ฒด๊ฐ€ ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๋Š” ๊ฐ’์˜ ์œ„์น˜(์ฃผ์†Œ)๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜์—์š”. String๊ณผ ๊ฐ™์ด ์ฒซ๊ธ€์ž๊ฐ€ ๋Œ€๋ฌธ์ž์ธ ๊ฒƒ์„ Classํ˜•(์ฐธ์กฐํ˜•) ๋ณ€์ˆ˜๋ผ๊ณ  ํ•œ๋‹ต๋‹ˆ๋‹ค.

string obj = [์ฃผ์†Œ๋ฅผ ์ €์žฅ]

์œ„์˜ ๋œป์€ obj์— ๊ฐ€๋ฉด String์ด ์žˆ๋‹ค๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.

์ (.) ์—ฐ์‚ฐ์€ Class(์ฐธ์กฐ)ํ˜• ๋ณ€์ˆ˜์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์  ์—ญ์‹œ ์—ฐ์‚ฐ์ž ์ž…๋‹ˆ๋‹ค. ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์œผ๋กœ ๊ฐ€์„œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฒƒ์„ ๋ณด์•„๋ผ! ๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๋ช…์— ์ ์„ ์ฐ๊ณ  ๋‚˜์˜ค๋Š” ๊ฒƒ๋“ค ์ค‘ ์ดํด๋ฆฝ์Šค ์ƒ์—์„œ ๋ณด์ด๋Š” ์ดˆ๋ก์ƒ‰ ๋™๊ทธ๋ผ๋ฏธ ํ‘œ์‹œ๋Š” Method๋ฅผ ๋‚˜ํƒ€ ๋ƒ…๋‹ˆ๋‹ค.

println(); ์—์„œ ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๋ช…์„ ์ถœ๋ ฅํ•˜๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ๋‚˜์˜ค๋Š” ๊ฒƒ์€ .toStirng();์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜๋Š” ๊ทธ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์„ ์ง์ ‘ ์ฐ์ง€๋งŒ, ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๋Š” ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅด๋‹ค๋Š” ์  ๊ธฐ์–ต ํ•ด ์ฃผ์„ธ์š”!

 

Class๋Š” ๊ฐœ๋ฐœ์žํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋งŒ๋“  ์ž๋ฃŒํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด๋‚˜, ์ปดํ“จํ„ฐ๋Š” ๊ทธ ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— Class Method๋ฅผ  ํ˜ธ์ถœํ•  ๋•Œ (.) ์ ์„ ์ฐ๋Š” ํ‘œํ˜„์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์ ์–ด์ฃผ๋ฉด  ๊ทธ ์ฃผ์†Œ๋กœ ๊ฐ€๋ฉด ๊ทธ ์•ˆ์— ์–ด๋–ค ์ž๋ฃŒํ˜•์ด ์žˆ๋Š”์ง€ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

[Class Type] [๋ณ€์ˆ˜๋ช…] = new [Class Type (๊ฐ์ฒด๋ช… ํ˜น์€ ์ƒ์„ฑ์ž๋ช…์ด๋ผ๊ณ ๋„ํ•จ)] ์ด๋Ÿด ๋•Œ ' Class Type์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ๋ณ€์ˆ˜์— ๋„ฃ๊ฒ ๋‹ค'๋ผ๋Š” ์˜๋ฏธ๋กœ ์ดํ•ด ํ•˜์‹œ๋ฉด ํŽธํ•˜๊ฒ ๋„ค์š”!

                   

โœ๏ธ ์˜ˆ์‹œ

Car go = new Car();

'Car Type์„ ๊ฐ–๋Š” ๋ณ€์ˆ˜ go์— Car ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋„ฃ๋Š”๋‹ค'๋ผ๋Š” ์˜๋ฏธ ์ž…๋‹ˆ๋‹ค.

 

๐Ÿ’ฌ ๋น„์œ 

๊ต์œก์šฉ ์˜ˆ์‹œ: Car Type์„ ๊ฐ–๋Š” ํ•œ ๊ฐœ์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ƒ์ž์ธ go์— Car()๋ผ๋Š” ์ œํ’ˆ ์„ค๊ณ„๋„๋ฅผ ๋งŒ๋“ค์–ด ๋„ฃ๊ฒ ๋‹ค.

์ฃผ๋‹ˆํ•˜๋ž‘์˜ ์˜ˆ์‹œ: Car Type์„ ๊ฐ–๋Š” ์šฐ๋ฆฌ ํšŒ์‚ฌ ์ง์› go๊ฐ€ ์™ธ์ฃผ ์—…์ฒด์ธ Car()์™€ ํ•˜์ฒญ ๊ณ„์•ฝ์„ ๋งบ์–ด ๊ทธ ์—…์ฒด ์—ฐ๋ฝ์ฒ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

Class Variables {
// ํด๋ž˜์Šค ์˜์—ญ (์„ ์–ธ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ดˆ๊ธฐํ™” ๋ถˆ๊ฐ€)
	int iv;			// ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ (ํ•„๋“œ)
    static int cv;	// ํด๋ž˜์Šค ๋ณ€์ˆ˜, static๋ณ€์ˆ˜, ๊ณต์œ ๋ณ€์ˆ˜ (์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ์•ž์— static์„ ๋ถ™ํžˆ๋ฉด ํด๋ž˜์Šค ๋ณ€์ˆ˜)
    
// ๋ฉ”์„œ๋“œ ์˜์—ญ
	void method() {
    	int lv = 0;	// ์ง€์—ญ ๋ณ€์ˆ˜
    }	// Method End
}	// Class End
    

 

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

 

 

๐Ÿ‘‰ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜(ํ•„๋“œ) - Instance Variable (Filed)

ํด๋ž˜์Šค ์˜์—ญ์— ์„ ์–ธ๋˜๋ฉฐ, ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑ ์‹œ ๋งŒ๋“ค์–ด ์ง‘๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ฝ์–ด ์˜ค๊ฑฐ๋‚˜, ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ•„๋“œ๋Š” ๋…๋ฆฝ์ ์ธ ์ €์žฅ๊ณต๊ฐ„์„ ๊ฐ–๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๊ณ ์œ ํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์†์„ฑ์€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ‘‰ ํด๋ž˜์Šค ๋ณ€์ˆ˜(Class Variable)


์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜(ํ•„๋“œ)๋ช… ์•ž์— static์„ ๋ถ™ํžˆ๊ธฐ๋งŒ ํ•˜๋ฉด ํด๋ž˜์Šค ๋ณ€์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณตํ†ต๋œ ์ €์žฅ๊ณต๊ฐ„(๋ณ€์ˆ˜)๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•œ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋“ค์ด ๊ณตํ†ต ๊ฐ’์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํด๋ž˜์Šค๋ณ€์ˆ˜๋กœ ์„ ์–ธ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , (new [๊ฐ์ฒด๋ช…])์„ ํ•˜์ง€ ์•Š๊ณ ๋„, ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , 'ํด๋ž˜์Šค๋ช….ํด๋ž˜์Šค๋ณ€์ˆ˜' ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉ ๋ฉ๋‹ˆ๋‹ค.

๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ ๋‚ด ์–ด๋””์„œ๋‚˜ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ์ „์—ฐ๋ณ€์ˆ˜(Global Variable)์˜ ์„ฑ๊ฒฉ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿ‘‰ ์ง€์—ญ๋ณ€์ˆ˜(Local Variable)


๋ฉ”์„œ๋“œ ๋‚ด์— ์„ ์–ธํ•˜๊ณ , ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๊ฐ™์ด Memory์—์„œ ์†Œ๋ฉธ๋˜์–ด ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

 

class Card {
// ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜(ํ•„๋“œ)
	String kind;	// ๋ฌด๋Šฌ
    int number;		// ์ˆซ์ž
    
// ํด๋ž˜์Šค(๊ณตํ†ต) ๋ณ€์ˆ˜
    static int width = 100;	 // ํญ
    static int height = 250; // ๋†’์ด
    


class Test {
	static void main(Stirng[] args) {
    	Card c = new Card();
        
        // ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ๊ฐ’ ๋„ฃ๊ธฐ
        
        c.kind = "HEART";
        c.number = 5;
        
        // ํด๋ž˜์Šค ๋ณ€์ˆ˜์— ๊ฐ’ ๋„ฃ๊ธฐ
        Card.width = 200;
        Card.height = 300;
        
        // ํด๋ž˜์Šค ๋ณ€์ˆ˜๋Š” ํด๋ž˜์Šค๋ช….~~๋กœ ํ˜ธ์ถœ
        // ์ธ์Šคํ„ด์Šค(ํ•„๋“œ) ๋ณ€์ˆ˜๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜.ํ•„๋“œ๋ช…์ด์ง€๋งŒ, ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค๋ช…. ์ด๋‹ค.

 

๐Ÿ‘‰ return๋ฌธ


return๋ฌธ์€ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ๋’ค ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ๋กœ ๋˜๋Œ์•„ ๊ฐ‘๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ํƒ€์ž…์ด void์ธ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๊ธฐ์— return์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ return ; ์„ ์ถ”๊ฐ€ ํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ ์ž…๋‹ˆ๋‹ค.

void printGugudan(int dan) {
	for(int i = 1; <= 0 ; ++i) {
    	Sysstem.out.printf("%d * %d = %d%n", dan, i, dan * i);
    } // for End
    return;				// 	๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜ํƒ€์ž…์ด void์ž„์œผ๋กœ ์ƒ๋žต ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.
} // printGugudan End


###################### ๋ฐ˜ํ™˜ ํƒ€์ž…์ด void๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ #############################

int multplay (int x, int y) {
	int result = x * y;
	return result;			// ๋ฐ˜ํ™˜ ํƒ€์ž…์ด void๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ, ์ƒ๋žต ๋ถˆ๊ฐ€
} // multplay Mthod End

 

 

๐Ÿ‘‰๋ฐ˜ํ™˜๊ฐ’(return value)


return๋ฌธ์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์ฃผ๋กœ ๋ณ€์ˆ˜๊ฐ€ ์˜ค๊ธด ํ•˜๋Š”๋ฐ, ํ•ญ์ƒ ๊ทธ๋Ÿฐ๊ฒƒ์€ ์•„๋‹Œ ๊ฒƒ์ด์—์š”.

int add (int x, int y) {
	int result = x + y;
    return result;
}



#############################

int add (int x, int y) {
	return x + y;
}


// ์œ„์™€ ๊ฐ™์ด ์ˆ˜์‹์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์€ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ฐ”๋กœ ๊ณ„์‚ฐ์‹์„ ๋„ฃ์–ด ๋ฐ˜ํ™˜ํ•  ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด์—์š”!

๋ฐ˜ํ™˜ ํƒ€์ž… (return Type)์ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋Š” ์ข…๋ฃŒ ์‹œ ๊ฒฐ๊ณผ๊ฐ’์„ ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ ๋“ฑ์—๊ฒŒ ๋ฐ˜ํ™˜ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

main()์ด firstMehotd()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , firstMethod()๊ฐ€ secondMethod๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋„ค์š”. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„, ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ๋ฉ”์„œ๋“œ ์•ž์— static ๋ถ™์ด๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ ์žŠ์ง€ ์•Š์œผ์…จ์ฃ ?

 

 

๐Ÿ‘‰๋งค๊ฐœ๋ณ€์ˆ˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ


๋ฉ”์„œ๋“œ ๊ตฌํ˜„๋ถ€(Body) { } ์ค‘๊ด„ํ˜ธ ์•ˆ์˜ ๋‚ด์šฉ์„ ์ž‘์„ฑ ์‹œ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ’์ด ์ ์ ˆํ•œ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๊ฒƒ์ด์—์š”.

๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑ ์‹œ ํ˜ธ์ถœ ์ชฝ์—์„œ ์ ์ ˆํ•œ ๊ฐ’์„ ๋„˜๊ฒจ ์ฃผ๊ฒ ์ง€?๋ผ๋Š” ์ฐฉ๊ฐ์€ ์ ˆ๋Œ€๋กœ ํ•˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด์—์š”. Type๋งŒ ๋งž์œผ๋ฉด ์–ด๋–ค ๊ฐ’๋„ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๋„˜์–ด์˜ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ ์ž‘์„ฑ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ฝ”๋“œ ์ž‘์„ฑ์€ ํ•„์ˆ˜ ๋ž๋‹ˆ๋‹ค! 

 

๐Ÿ‘‰๊ธฐ๋ณธํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ฐธ์กฐํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜


์ž๋ฐ”์—์„œ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•œ ๊ฐ’์„ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ฒจ ์ฃผ๋Š” ๊ฒƒ์ด์—์š”.

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๊ธฐ๋ณธํ˜•(primitive) ์ผ ๋• ๊ธฐ๋ณธํ˜• ๊ฐ’์ด ๋ณต์‚ฌ๋˜๊ฒ ์ง€๋งŒ, ์ฐธ์กฐํ˜•(reference)์ด๋ฉด ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ๋ณต์‚ฌ ๋œ๋‹ต๋‹ˆ๋‹ค.

๊ธฐ๋ณธํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜: ๋ณ€์ˆ˜์˜ ๊ฐ’ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅ.
์ฐธ์กฐํ˜• ๋งค๊ฐœ๋ณ€์ˆ˜: ๋ณ€์ˆ˜์˜ ๊ฐ’ ์ฝ๊ณ  ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ.

 

 

 

 

 

 

 

   ๐Ÿ“ Class ์„ ์–ธ


ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ(ํ”„๋กœ์ ํŠธ)์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Class(๊ฐ์ฒด)๊ฐ€ ์‚ฌ์šฉ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ด์œ ๋กœ ๊ฐ๊ฐ์˜ Class์— ์„ ์–ธ๋œ Member ๊ฐ„์— ์„œ๋กœ ์–ฝํž˜์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ์š”. ์ด ๋•Œ, ์š”์ฒญ(Class - ์ „๋‹ฌ)๊ณผ ์‘๋‹ต (return - ๋ฐ˜ํ™˜)์ด ๋ฐœ์ƒ๋˜๊ฒŒ ๋˜๋Š”๋ฐ, ์š”์ฒญ์€ ๊ฐ์ฒด์˜ 'Method๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ()์†Œ๊ด„ํ˜ธ์— ์ธ์ž(๋งค๊ฐœ๋ณ€์ˆ˜)๊ฐ’์„ ์ „๋‹ฌํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด๋Š” ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๋ฉฐ, '๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค'๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ‘‰ ์ ‘๊ทผ ์ง€์ •์ž ํ˜น์€ ์ ‘๊ทผ ์ œํ•œ์ž(Access Modifier)


ํ•„๋“œ(Class ๋ณ€์ˆ˜) ์ž…์žฅ์—์„œ ๋ดค์„ ๋•Œ, ์š”์ฒญํ•˜๋Š” ์ชฝ์—์„œ ๋‚˜์—๊ฒŒ ํ•จ๋ถ€๋Ÿฌ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๊ถŒํ•œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋ฅผ ๋น„์œ ๋กœ ๋“ค์ž๋ฉด ํ•„๋“œ ์ž…์žฅ์—์„œ ๋‚ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌผ๊ฑด์„ ์•„๋ฌด๋‚˜ ์™€์„œ ๊ฐ€์ ธ๊ฐ€๊ณ , ๋ฐ”๊พธ๊ณ  ํ•˜๋ฉด ๊ธฐ๋ถ„์ด ๋‚˜์˜๊ฒ ์ง€์š”? ๊ทธ๋ž˜์„œ ์ด๊ฒƒ์„ ๋ชปํ•˜๋„๋ก ๋‚ด ๋ฌผ๊ฑด์„ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด Class(๊ฐ์ฒด)์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜(ํ•„๋“œ)๋ฅผ ์€๋‹‰ํ™”๋ฅผ ํ•˜์—ฌ ๋ณ€์ˆ˜ ์ž๋ฃŒํ˜• ์•ž์— Private๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ๋ชจ๋“  Methodsms public์œผ๋กœ ์„ ์–ธํ•˜๋Š”๊ฒŒ ์ข‹๋‹ต๋‹ˆ๋‹ค. (์ดˆ๋ณด์ž๋งŒ!) 

์ ‘๊ทผ ์ œ์–ด์ž๋Š” public๊ณผ private์™ธ์—๋„ ๋‘๊ฐ€์ง€๊ฐ€ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. protected์™€ default๊ฐ€ ๊ทธ๊ฒƒ์ž…๋‹ˆ๋‹ค. protected๋Š” ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋‹ค๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ์žˆ๋Š” ํด๋ž˜์Šค์˜ ์ ‘๊ทผ๋„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. default๋Š” ์ ‘๊ทผ ์ œ์–ด ์ง€์‹œ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•˜๋Š”๋ฐ, ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ์—†๋Š” ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ™์€ ํŒจํ‚ค์ง€์— ์žˆ๊ณ , ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ๋งŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ ์ ‘๊ทผ ์ œ์–ด์ž ๋ณ„๋กœ ์ ‘๊ทผ ํ—ˆ์šฉ ๋ฒ”์œ„๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด์—์š”. ์•ˆ์ชฝ์— ์žˆ์„์ˆ˜๋ก ์ ‘๊ทผ ํ†ต์ œ๊ฐ€ ์‚ผ์—„ํ•˜๊ณ , ๋ฐ–์— ์žˆ์„์ˆ˜๋ก ์ ‘๊ทผ์ด ์ž์œ ๋กญ์Šต๋‹ˆ๋‹ค.

์ ‘๊ทผ ์ œ์–ด์ž๋Š” Member ๋˜๋Š” Class์— ์‚ฌ์šฉ ๋œ๋‹ต๋‹ˆ๋‹ค!

์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ณณ - Class, Member ๋ณ€์ˆ˜, Method, ์ƒ์„ฑ์ž
  - private : ๊ฐ™์€ ํด๋ž˜์Šค ๋‚ด ์ ‘๊ทผ ๊ฐ€๋Šฅ
  - defulat : ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  - protected : ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด์™€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ์ž์† Class์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  - public : ์–ด๋–ค ๊ณณ์—์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅ 

์ถœ์ฒ˜: ์ƒํ™œ์ฝ”๋”ฉ

                   

 

  public protected default private
๊ฐ™์€ ํŒจํ‚ค์ง€, ๊ฐ™์€ ํด๋ž˜์Šค ํ—ˆ์šฉ ํ—ˆ์šฉ ํ—ˆ์šฉ ํ—ˆ์šฉ
๊ฐ™์€ ํŒจํ‚ค์ง€, ์ƒ์† ๊ด€๊ณ„ ํ—ˆ์šฉ ํ—ˆ์šฉ ํ—ˆ์šฉ ๋ถˆ์šฉ
๊ฐ™์€ ํŒจํ‚ค์ง€, ์ƒ์† ๊ด€๊ณ„ 
์•„๋‹˜
ํ—ˆ์šฉ ํ—ˆ์šฉ ํ—ˆ์šฉ ๋ถˆ์šฉ
๋‹ค๋ฅธ ํŒจํ‚ค์ง€, ์ƒ์† ๊ด€๊ณ„ ํ—ˆ์šฉ ํ—ˆ์šฉ ๋ถˆ์šฉ ๋ถˆ์šฉ
๋‹ค๋ฅธ ํŒจํ‚ค์ง€, ์ƒ์† ๊ด€๊ณ„ 
์•„๋‹˜
ํ—ˆ์šฉ ๋ถˆ์šฉ ๋ถˆ์šฉ ๋ถˆ์šฉ

 

public > protected > (default) > private

 

 

๐Ÿ’ป ์˜ˆ์‹œ ์ฝ”๋“œ


Main Method

package oopconcept;

// Phone Class์— ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.

// new: ์ง€์ •๋œ Class์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ์ฐธ์กฐ๊ฐ’(์ฃผ์†Œ)๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

// ๋ฐ›๋Š”๋‹ค๋ผ๋Š” ์˜๋ฏธ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , ๋Œ€์ž…์—ฐ์‚ฐ์„ ํ†ตํ•ด์„œ ์ €์žฅํ•ด๋ผ (์ž๋ฃŒํ˜• ๊ฒฐ์ •)

 

       Phone01 phone = new Phone01(); //์ฐธ์กฐํ˜• ๋ณ€์ˆ˜: phone

 

// ์ฒ˜์Œ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

// 1. Phone Class๋ฅผ ์ •์˜ ํ•ด์•ผ ํ•œ๋‹ค.

// 2. ํŒจํ‚ค์ง€์— ๋”ฐ๋ผ import๋ฅผ ํ–ˆ๋Š”๊ฐ€?

 

        phone.setMeta(10);       // ์—ฌ๊ธฐ์„œ . ์•ž์—๋Š” Main์ด setMeta Method๋ฅผ ํ˜ธ์ถœํ•˜๋ ค ํ•  ๋•Œ phone์•ˆ์— ์žˆ์œผ๋‹ˆ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•œ๋‹ค.

                                 // ๋งŒ์•ฝ setMeta();๊ฐ€ Main์ด๋‚˜, ๊ฐ™์€ Class์•ˆ์— ์žˆ๋‹ค๋ฉด . ์•ž์—๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. 

                                 // ๊ฒฐ๊ตญ 10์ด๋ผ๋Š” ์ •์ˆ˜๋ฅผ setMeta์— ์ €์žฅํ•ด๋ผ. 

                                 // Setํ•˜๊ณ  ๋’ค์— ๋‚˜์˜ค๋Š” ์ด๋ฆ„์€ ์œ„์— ํ•„๋“œ๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ผ.   

 

     } // Main End

} Class End

 

Phone Class

package oopconcept.vo;

// ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ(ํ”„๋กœ์ ํŠธ)์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Class(๊ฐ์ฒด)๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

// ์œ„์˜ ์ด์œ ๋กœ ๊ฐ๊ฐ์˜ Class์— ์„ ์–ธ๋œ Member๋“ค์ด ์–ฝํž˜์ด ์ƒ๊ธด๋‹ค.

// ์ด ๋•Œ, ์š”์ฒญ(Call ์ „๋‹ฌ)๊ณผ ์‘๋‹ต(return - ๋ฐ˜ํ™˜)์ด ๋ฐœ์ƒ๋˜๋Š”๋ฐ, ์š”์ฒญ์€ ๊ฐ์ฒด์˜ Method๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

// ๊ฐ์ฒด๊ฐ„ ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.


public class Phone {

    // Class ์ค‘๊ด„ํ˜ธ ์•ˆ์— ์„ ์–ธ๋œ ๊ฒƒ๋“ค์„ Member๋ผ๊ณ  ํ•œ๋‹ค.

    // Class ์ค‘๊ด„ํ˜ธ ์•ˆ์— ์ •์˜๋œ ๋ณ€์ˆ˜๋ฅผ Member ๋ณ€์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.

            int meta;          // Member ๋ณ€์ˆ˜ ํ˜น์€ ํ•„๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

      public int setMeta(int param) {    // Method๋Š” ๋ฌด์กฐ๊ฑด public์œผ๋กœ ์„ ์–ธ

        this.meta = param   // ์œ„์— ์žˆ๋Š” ํ•„๋“œ(Classํ˜• ๋ณ€์ˆ˜)์— param์ธ์ž๋กœ ๋ฐ›์€ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

        return meta;

        // Method ์ค‘๊ด„ํ˜ธ ์•ˆ์— ๋‚ด์šฉ์„ Body๋ผ๊ณ  ํ•œ๋‹ค.

   } // setMeta Method End

} // Main End

 

 

 

 

 

 

 

 

 

 

 

 

 ๐Ÿ“Getter์™€ Setter


 โœ๏ธGetter๋Š” ํ•„์š”์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ Class์— ํ•„๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋ฌด์กฐ๊ฑด ํ•ด๋‹น ํ•„๋“œ๋ช… ์•ž์— get์„ ๋ถ™ํ˜€ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 โœ๏ธGetter: ํ•„๋“œ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” Method.

 โœ๏ธ Seteer: ํ•„๋“œ์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” Method. ์™ธ๋ถ€์—์„œ ๋ฐ›์€ ๊ฐ’์„ ์œ„์˜ ํ•„๋“œ(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)์— ์ €์žฅํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

โœ๏ธ ์˜ˆ์‹œset[ํ•„๋“œ๋ช…](); : set์„ ์ œ์™ธํ•œ ์ฒซ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐ์ดํ„ฐ ์€๋‹‰ํ™”๋ฅผ ์œ„ํ•ด ํ•„๋“œ๋ฅผ privated๋กœ ์„ค์ • ์‹œ์— mainํ•จ์ˆ˜์—์„œ ์ง์ ‘ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.ํ•„๋“œ๋ช…๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜(์ง€์—ญ ๋ณ€์ˆ˜)๋ช…์ด ๊ฐ™์€ ๊ฒฝ์šฐ1) ๋งค๊ฐœ๋ณ€์ˆ˜๋ช…(์ง€์—ญ ๋ณ€์ˆ˜๋ช…)์„ ๋ฐ”๊พผ๋‹ค.2) ํ•„๋“œ๋ช…(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ช…)์„ ๋ฐ”๊พผ๋‹ค.3) this ์˜ˆ์•ฝ์–ด๋กœ ๋ณ€์ˆ˜๋ช…์„ ์ž‘์„ฑํ•˜๋ฉด ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

 

  

๐Ÿ’ป ์˜ˆ์‹œ ์ฝ”๋“œ


Public class Test {

	private String name;
    
    
    public String getName() {
    	return name;
        
    }

์œ„์™€ ๊ฐ™์ด ํ•„๋“œ๊ฐ€ private๋กœ ์„ ์–ธ์ด ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ž๊ธฐ ์ž์‹ ์™ธ์— ์‚ฌ์šฉํ•  ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— getter๋ฅผ ๋งŒ๋“ค์–ด ํ•„๋“œ ๋‚ด์šฉ์„ ๋ฐ›์•„ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด์ง€์š”!

 

Setter๋Š” ํ•„์š”์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ Class์— ํ•„๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋ฌด์กฐ๊ฑด ํ•ด๋‹น ํ•„๋“œ๋ช… ์•ž์— set์„ ๋ถ™ํ˜€ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ’ป ์˜ˆ์‹œ ์ฝ”๋“œ


Public class Test {

	public void setName (String name) {
    	this.name = name;
    
    }

์‚ฌ์šฉ ์ด์œ ๋Š” getter์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— setter๋ฅผ ๋งŒ๋“ค์–ด Class ํ•„๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋Œ€์ƒ์ด ์ค€ ์ž…๋ ฅ๊ฐ’์„ ํ†ตํ•ด ํ•„๋“œ์— ์ˆ˜์ •์„ ํ•œ ๋’ค ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ค๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ํ˜•์‹์ด void๊ฐ€ ์•„๋‹ˆ๋ฉด return ๋ฌธ์€ ๊ผญ ์จ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค!

 

 

 

 

 

 

 

 

 

 

 

   ๐Ÿ“๊ฐ์ฒด ๋ฐฐ์—ด


๋ฐฐ์—ด๋„ Class์ด๋ฉฐ, Array๋ผ๋Š” Class(์ฐธ์กฐ)ํ˜• ๊ฐ์ฒด ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ ์‹œ new๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์—์š”. ์ฆ‰, ์ž๋ฃŒํ˜•์„ ๊ธฐ๋ณธํ˜• ์š”์†Œ๋กœ ํ•˜๋Š” ๋ฐฐ์—ด์ด ๋˜๊ฒ ์ง€์š”?

int[] nums = new int[5]; 

๋Œ€๊ด„ํ˜ธ๊ฐ€ ๋ถ™์€ ๊ฒƒ์€ ๊ธฐ๋ณธํ˜•์ด ์•„๋‹ˆ๊ณ , ๋ฐฐ์—ดํ˜• ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ int๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐฐ์—ดํ˜•์— ๊ฐ”๋”๋‹ˆ int๊ฐ€ ์žˆ๋„ค!๋ผ๊ณ  ์ดํ•ด ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ์˜๋ฏธ๋Š” intํ˜• nums์˜ ๋ณ€์ˆ˜๋ฅผ 5๊ฐœ ๋‚˜์—ดํ•ด๋ผ ์ž…๋‹ˆ๋‹ค. intํ˜• ๋ฐฐ์—ด์€ ์ž๋™ ์ดˆ๊ธฐํ™”๋กœ 0์ด ๋“ค์–ด๊ฐ€๋‹ˆ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

nums[0] = 10;

nums[1] = 40;

์œ„์˜ ๋œป์€ 0๋ฒˆ ๋ฐฐ์—ด์— 10์„ ๋„ฃ๊ณ , 1๋ฒˆ ๋ฐฐ์—ด์— 40์ด๋ผ๋Š” ์ •์ˆ˜๊ฐ’์„ ๋„ฃ์œผ๋ผ๋Š” ์˜๋ฏธ์ด์ฃ ? ๋ฐฐ์—ด๋ช…์œผ๋กœ ์˜ค๋Š” ๊ฒƒ์€ ๋Œ€์ž… ์—ฐ์‚ฐ์ž ์™ผ์ชฝ์— ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋˜ํ•œ ๋ณ€์ˆ˜ ์ž…๋‹ˆ๋‹ค.

class CDdata {
	int data;
}

#################################################

public class Review {
	public static void main(String[] args) {
    
    CData[] ref = new CData[5];			// ์—ฌ๊ธฐ์„œ REF๋Š” ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜์ด๋ฉด์„œ ๋ฐฐ์—ด๋ช… ์ž…๋‹ˆ๋‹ค.
    
    ref[0] = new CData[5];				// ์ฐธ์กฐํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— CData(Class)์˜ ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. 
    									// ์ž๋ฃŒํ˜•์ด ๋งž์•„์•ผ ๋Œ€์ž…์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅธ์ชฝ๊ณผ ์™ผ์ชฝ์˜ ์ž๋ฃŒํ˜•์ด ๋งž์•„์•ผ ๊ฒ ์ฃ ?
   	ref[0] = new CData();				// CData๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•˜์—ฌ ref[0]๋ฐฐ์—ด์— ๋„ฃ๋Š”๋‹ค.
    ref[0].data = 10;					// ref ์š”์†Œ๋ฒˆํ˜ธ 0๋ฒˆ ์•ˆ์— data๊ฐ€ ์žˆ๊ณ , ๊ทธ ๊ณณ์— 10์„ ๋„ฃ์–ด๋ผ.
    ref[1] = new CDdata();
    ref[1].data = 20;
    
    
    // ref [0]๊ณผ [1]์€ ๊ฐ€๋ฅดํ‚ค๋Š” ๊ณณ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฒƒ์ž„์„ ์žŠ์ง€ ๋งˆ์„ธ์š”!

๊ฐ์ฒด ๋ฐฐ์—ด์•ˆ์—๋Š” ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ฒƒ์ด์—์š”. ๊ผญ! ๊ธฐ์–ตํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

 

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

์œ„์˜ ๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๊ฐ์ฒด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€, ๊ทธ์ € ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ์ฐธ์กฐ ๋ณ€์ˆ˜๋“ค์ด ๋ชจ์ธ ์—ฌ๋Ÿฌ ๋ฐฉ์ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ผ ๋ฟ, ์•„์ง ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ์ž˜ ์ดํ•ดํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ ๊ทธ๋Ÿผ ์ •๋ง ํ˜ผ๋ž€ ์Šค๋Ÿฌ์šด ๊ฒƒ์ด์—์š”! ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ฐ์ฒด ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ์ €์žฅ์„ ๊ผญ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ๋ฐฐ์—ด์—์„œ ์ดˆ๋ณด์ž๋“ค์ด ๊ฐ€์žฅ ์–ด๋ ค์›Œ ํ•˜๋Š” ๋ถ€๋ถ„์ด ๊ฐ์ฒด ๋ฐฐ์—ด๋งŒ ์ƒ์„ฑํ•ด ๋†“๊ณ , "๋ถ„๋ช…ํžˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ๋Š”๋ฐ, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์š”!"๋ผ๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 

Product p1 = new Tv();
Product p2 = new Computer();
Product p3 = new Audio();

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์œ„์™€ ๊ฐ™์€ ๊ฒƒ์ด์—์š”. ๊ฐ p1, p2, p3 ๋ณ€์ˆ˜๋Š” ๊ฐ๊ฐ์˜ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”!

 

Product[] p = new Product[3];

p[0] = new Tv();
p[1] = new Computer();
p[2] = new Audio();

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒƒ์ด์—์š”. ์œ„์˜ ๋‚ด์šฉ๊ณผ ๋‹ค๋ฅธ์ ์€ ๋ฐฐ์—ด์„ ์‚ฌ์šฉ ํ–ˆ๋‹ค๋Š” ์  ์ธ ๊ฒƒ์ด์—์š”.

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

 

์ฐธ์กฐํ˜• ๋ฐฐ์—ด์„ ์ด์šฉํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๊ทธ๋ฆผ 1.1

 

์ฐธ์กฐํ˜• ๋ฐฐ์—ด์„ ์ด์šฉํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๊ทธ๋ฆผ 1.2

์œ„ ๊ทธ๋ฆผ์—์„œ ๋ณด๋“ฏ์ด ๊ฐ™์€ ๋ฐฐ์—ด์— new๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ–๊ฒŒ ๋˜์–ด ๊ทธ ์ฃผ์†Œ๊ฐ’์„ ์ฐธ์กฐํ˜• ๋ฐฐ์—ด์ด ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์— ์ƒ์„ฑ๋˜์—ˆ๋˜ ๊ฐ์ฒด์™€๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ผ๋Š” ์  ์žŠ์ง€ ๋งˆ์„ธ์š”!

 

 

 

๐Ÿ’ป ์˜ˆ์‹œ ์ฝ”๋“œ


Tv[] tvArr = new Tv[3]; 		// ์ฐธ์กฐ๋ณ€์ˆ˜ ๋ฐฐ์—ด(๊ฐ์ฒด ๋ฐฐ์—ด)์„ ์ƒ์„ฑ.
// ๋ฐฐ์—ด๋งŒ ์ƒ์„ฑํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„์ง ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์—์š”!!

//๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ์ €์žฅ
	tvArr[0] = new Tv();
    tvArr[1] = new Tv();
    tvArr[2] = new Tv();
    
// ์œ„์˜ ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐํ™”๋ฅผ ํ•œ ์ค„๋กœ ์ •๋ฆฌํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

	Tv[] tvArr = { new Tv(), new Tv(), new Tv() };
    
// ๋‹ค๋ค„์•ผ ํ•  ๊ฐ์ฒด๊ฐ€ ๋งŽ๋‹ค๋ฉด ์šฐ๋ฆฌ์˜ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด์—์š”.

	Tv[] tvArr = new Tv[100]
    
    for(int i = 0; i < tvArr.length; ++i) {
    	tvArr[i] = new Tv();
	}
    

 

 

๐Ÿ’ฌ ์ฐธ๊ณ ์‚ฌํ•ญ


RAM์€ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ์ธ์ด ์•„๋‹ˆ๊ณ , OS๊ฐ€ ์ฃผ์ธ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— OS์—๊ฒŒ ์‚ฌ์šฉ์„ ์š”์ฒญํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Memory ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— OS์—๊ฒŒ ์š”์ฒญ์„ ํ•ด์„œ Memory ๊ณต๊ฐ„์„ ํ• ๋‹น ๋ฐ›์•„์•ผ ํ•ด์„œ new๋ผ๋Š” ๊ฒƒ์„ ์จ์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

CData[] a = ref.clone();
System.out.println ( ref );
System.out.println ( a );


########์ถœ๋ ฅ ๊ฒฐ๊ณผ#############

[LReview_210226.CData;@2f0e140b

[LReview_210226.CData;@7440e464

// @ ์˜ค๋ฅธ์ชฝ์€ Memory์˜ ์ฃผ์†Œ๊ฐ’์ด๊ณ , ์ด ์ฃผ์†Œ์— ๊ฐ€๋ฉด  LRevew_210226.CData๋ผ๋Š” ๋ฐฐ์—ด([)์ด ์žˆ๋‹ค๋ผ๋Š” ์˜๋ฏธ.
// ๋‘ ๊ฐœ์˜ ์ฃผ์†Œ๊ฐ’์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์ด ๋‘ ๊ฐœ๋ผ๋Š” ๊ฒƒ.

// ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜

.clone();			// ๋ฐฐ์—ด ์ „์ฒด๋ฅผ ๋‹ค ๋– ์„œ ๋‹ค๋ฅธ ๋ฐฐ์—ด์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ.

 

 

 

 

 

 

 

  ๐Ÿ“์ƒ์„ฑ์ž


ํ•„๋“œ๋Š” ๋ฌด์กฐ๊ฑด ์„ ์–ธ๋งŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด meta๋ผ๋Š” ํ•„๋“œ์— 10์„ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”๊ฐ€ํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

public class test() {
	private int meta = 10;     // ์ด๋ ‡๊ฒŒ ํ•„๋“œ์—์„œ ์ดˆ๊ธฐํ™”๊นŒ์ง€ ํ•˜๋ฉด ์•ˆ๋จ.
}

 

์ดˆ๊ธฐํ™”๋Š” Method๋‚˜, ์ƒ์„ฑ์ž์—์„œ๋งŒ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‚ด๊ฐ€ ์–ด๋–ค ํ•„๋“œ์— ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ์ƒ์„ฑ์ž๋ฅผ ์“ด๋‹ค๊ณ  ์ดํ•ด ํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž๋Š” ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ์ƒ์„ฑ์ž๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„œ์˜ค๋”œ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” '์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ'๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž๋Š” ์˜ค๋ฒ„๋กœ๋”ฉ(๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ)์ด ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

 

 

    ๐Ÿ‘‰ ์ƒ์„ฑ์ž ์ƒ์„ฑ ๊ทœ์น™

 


        โœ๏ธ ๋ฐ˜ํ™˜ (return)์€ ๋ช…์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

        โœ๏ธ ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑ์ž๋ช…์€ Class๋ช…๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.  

        โœ๏ธ ๋ชจ๋“  ๊ฐ์ฒด๋Š” 1๊ฐœ ์ด์ƒ์˜ ์ƒ์„ฑ์ž๊ฐ€ ๋ฌด์กฐ๊ฑด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๐Ÿ‘‰ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž(Defulat Constructor)


์‚ฌ์‹ค ๋ชจ๋“  ํด๋ž˜์Šค์—๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ƒ์„ฑ์ž๊ฐ€ ์ •์˜ ๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”. ๊ทธ๋Ÿฐ๋ฐ, ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ด์œ ๋Š” ์—ญ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ '๊ธฐ๋ณธ ์ƒ์„ฑ์ž'๋ฅผ ์ƒ์„ฑ ํ•ด ์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ์ด์—์š”.

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋„ ์—†๊ณ , ์•„๋ฌด๋Ÿฐ ๋‚ด์šฉ๋„ ์—†๋Š” ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๊ฒƒ์ด์—์š”.

ํŠน๋ณ„ํžˆ ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™” ์ž‘์—…์ด ์š”๊ตฌ๋˜์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๊ณ , ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์€ ๊ฒƒ์ด์ง€๋งŒ! ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” ๋ฐ˜๋“œ์‹œ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์Šต๊ด€์„ ๋“œ๋ฆฌ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํ•˜๋„ค์š”.

 

class Data2 {

	int value;
    
    Data2(int x) { 	// ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž
    	value = x;
    } // ์ƒ์„ฑ์ž End
} // Data2 Class End

######################### Main Method ####################################

class ConstructorTest {
	public static void main(Stirng[] args) {
    	Data1 d1 = new Data1();				// ์—ฌ๊ธฐ์„œ new๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
        									// Data1();์€ ๊ทธ ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด์—์š”.
       	Data1 d2 = new Data2();				// ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋„ฃ์–ด์ค˜์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด์—์š”.
        									// ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์„ ์–ธํ–ˆ๋‹ค๋ฉด ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋„ ๋ฐ˜๋“œ์‹œ ์ •์˜ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.
    }	// Main End
} // ConstructorTest Class End

 

 

๐Ÿ‘‰ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž


์ƒ์„ฑ์ž๋„ ๋ฉ”์„œ๋“œ์ฒ˜๋Ÿผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ ํ˜ธ์ถœ ์‹œ ๊ฐ’์„ ๋„˜๊ฒจ ๋ฐ›์•„ ์ธ์Šคํ„ด์Šค์˜ ์ดˆ๊ธฐํ™” ์ž‘์—…์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ดˆ๊ธฐํ™”๋Š” ๋งค์šฐ ์ข‹์€ ๊ฒƒ์ด์—์š”.

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

 

 

 

๐Ÿ‘‰ ์ƒ์„ฑ์ž์—์„œ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž ํ˜ธ์ถœํ•˜๊ธฐ - this() ์™€ this์˜ ์ฐจ์ด


๊ฐ™์€ ํด๋ž˜์Šค์˜ ๋งด๋ฒ„๋“ค ๊ฐ„ ์„œ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ ๋“ฏ ์ƒ์„ฑ์ž ๊ฐ„์—๋„ ์„œ๋กœ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด์—์š”.

1. ์ƒ์„ฑ์ž์˜ ์ด๋ฆ„์œผ๋กœ ํด๋ž˜์Šค ์ด๋ฆ„ ๋Œ€์‹  this๋ฅผ ์‚ฌ์šฉ
2. ํ•œ ์ƒ์„ฑ์ž์—์„œ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœ ์‹œ ๋ฐ˜๋“œ์‹œ ์ฒซ ์ค„์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ

 

1. ์ฐธ์กฐ๋ณ€์ˆ˜(ํ•„๋“œ)์˜ this
  - ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜(ํ•„๋“œ)๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ.
  - ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ (static ๋ถ™์€ ๋ฉ”์„œ๋“œ)์—์„œ ์‚ฌ์šฉ ๋ถˆ๊ฐ€.

2. ์ƒ์„ฑ์ž์˜ this()
  - this, this(์ธ์ž ํ˜น์€ ๋งค๊ฐœ๋ณ€์ˆ˜)
  - ๊ฐ™์€ ํด๋ž˜์Šค ์•ˆ์— ๋‹ค๋ฅธ ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉ.

 

๐Ÿ’ฌ ์ฐธ๊ณ ์‚ฌํ•ญ


์ƒ์„ฑ์ž๋„ ๋ฉ”์„œ๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌํ„ด๊ฐ’์ด ์—†๋‹ค๋Š” ์˜๋ฏธ์˜ void๋ฅผ ๋ถ™ํ˜€์•ผ ํ•˜์ง€๋งŒ, ๋ชจ๋“  ์ƒ์„ฑ์ž๊ฐ€ ๋ฆฌํ„ด๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ, void๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

ํด๋ž˜์Šค์˜ '์ ‘๊ทผ ์ œ์–ด์ž'๊ฐ€ public์ธ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋กœ 'public ํด๋ž˜์Šค์ด๋ฆ„() { }์ด ์ถ”๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

๐Ÿ’ป ์˜ˆ์‹œ ์ฝ”๋“œ


public class testMain {
	public static void main(String[] args) {
    
    Test test = new Test();			// Test ์ž๋ฃŒํ˜• ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ test ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜์— Test ์ฃผ์†Œ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
    
    test.setNumber(10, 20);			// 10์ •์ˆ˜๋ฅผ ์ธ์ž๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•˜์—ฌ Test๊ฐ์ฒด์˜ setNumber Method์— ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ „๋‹ฌํ•œ๋‹ค.
    	}
    }
    
    
    
    ======================================================================================================
    
   
   
   
   public class Test {
    
    	// Class์•ˆ์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ํ•„๋“œ๋ผ๊ณ  ํ•œ๋‹ค.
        // ํ•„๋“œ๋Š” ์„ ์–ธ๋งŒ ํ•ด์•ผ ํ•˜๋ฉฐ, ์ดˆ๊ธฐํ™”๋‚˜ ์—ฐ์‚ฐ์„ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
        
        private int meta;			// ์ •์ˆ˜ํ˜• meta ํ•„๋“œ ์„ ์–ธ
        pirvate int[] arr;			// ์ •์ˆ˜ํ˜• arr ๋ฐฐ์—ด ์„ ์–ธ.
        
        
        
        // ์ƒ์„ฑ์ž ์ƒ์„ฑ (์ƒ์„ฑ์ž๋Š” Class๋ช…๊ณผ ๋™์ผํ•ด์•ผ ํ•˜๊ณ , ()์†Œ๊ด„ํ˜ธ ์•ˆ ์ฆ‰, ์ธ์ž๊ฐ’์„ ๋„ฃ์ง€ ์•Š์œผ๋ฉฐ, ๋ฐ˜ํ™˜๊ฐ’๋„ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.)
        public Test() {
        	
            meta = 0;				// ์ •์ˆ˜ํ˜• meta ํ•„๋“œ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
            arr = new int[10]		// ์ •์ˆ˜ํ˜• ๋ฐฐ์—ด arr 10์˜ ๊ธธ์ด๋กœ ์ดˆ๊ธฐํ™”.
        
        }
        
        
        // meta ํ•„๋“œ Setter ์ƒ์„ฑ
        
        public int setMeta (int a, int b) {
        
        	this.meta = a + b;
            
            // ๋ฐ˜ํ™˜๊ฐ’์ด void๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ฌด์กฐ๊ฑด return์„ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.
            
            return meta;
            
            }
 }

                         

 

 

 

 

 

 

 

 

 

 

   ๐Ÿ“์ƒ์†


Main Method์—์„œ ์ƒˆ๋กœ์šด Class๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋ฃŒํ˜• ํƒ€์ž…๋ช…์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๊ณ , Class ๋ณ€์ˆ˜๋ช…์„ ๋™์ผํ•˜๊ฒŒ ํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด

Class๋ช…์„ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ extend๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ์ด๊ฑธ '์ƒ์† ๋ฐ›๋Š”๋‹ค'๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€๋ชจ ๊ฐ์ฒด์™€ ์ž์‹ ๊ฐ์ฒด๋Š” ์—„์—ฐํžˆ ๋‹ค๋ฅธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Method์—์„œ ์ž์‹ ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ๋ฐ”๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ,

๋ถ€๋ชจ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Super๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ถ€๋ชจ ํ•„๋“œ๊ฐ€ Private์ด๋ฉด ์ž์‹ ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํ•„๋“œ๊ฐ€ Protected์ด๋ฉด

์ œํ•œ์  ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ์ธ๋ฐ, ์ž์‹ ๊ฐ์ฒด๋Š” ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ƒ์†์€ ๊ฒฐ๊ตญ ์–ด๋–ค Class ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ ,  ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด ์“ฐ๋‹ค๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ๋” ๋„ฃ๊ณ  ์‹ถ์„ ๋•Œ, ์ž์‹ Class ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ถ€๋ชจ๋Š” ํ•˜๋‚˜๋ฐ–์— ๊ฐ€์งˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ถ€๋ชจ์—๊ฒŒ๋งŒ ์ƒ์† ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ๊ธฐ์กด Class๋ฅผ ํ™•์žฅํ•ด์„œ ์ƒˆ๋กœ์šด Class๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด Class๋ฅผ Base ๋˜๋Š” Parent(๋ถ€๋ชจ)๋ผ ํ•˜๊ณ , ์ƒˆ๋กœ ๋งŒ๋“  Class๋ฅผ ํŒŒ์ƒ ๋˜๋Š” Child Class๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

public class AdvanceWhell extends Wheel {

	public void back() {
    	System.out.println("๋’ค๋กœ ๊ตด๋Ÿฌ๊ฐ„๋‹ค.");
        
    } // back End
} // Class End

์œ„์˜ ์ฝ”๋“œ์—์„œ Class๋ช… ์ ๋Š” ๊ณณ์— extends ์™ผ์ชฝ์€ ์ž์‹ Class๋ช…์ด ์˜ค๊ณ , ์˜ค๋ฅธ์ชฝ์€ ๋ถ€๋ชจ Class๋ช…์ด ์˜ต๋‹ˆ๋‹ค.

๋ถ€๋ชจ Class๋Š” ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋Ÿ‰์„ ๋งŽ์ด ์ค„์ผ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ‘‰ํด๋ž˜์Šค๊ฐ„์˜ ๊ด€๊ณ„ - ํฌํ•จ ๊ด€๊ณ„


ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„ 
  1. ์ƒ์†: ์—ฌ๋Ÿฌ ์ œ์•ฝ์ด ๋งŽ์•„ ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์•„๋‹ˆ๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ.
     - '~์€ ~์ด๋‹ค. (is-a)' ๋ผ๊ณ  ํ‘œํ˜„
 2. ํฌํ•จ: ๋Œ€๋ถ€๋ถ„ ํด๋ž˜์Šค ๊ฐ„ ํฌํ•จ ๊ด€๊ณ„ ์‚ฌ์šฉ.
     - '~์€ ~์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. (has-a)'๋ผ๊ณ  ํ‘œํ˜„

Main Method์—์„œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ๊ฐ์ฒด์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋ฉด ํฌํ•จ ๊ด€๊ณ„๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

๐Ÿ’ป ์˜ˆ์‹œ ์ฝ”๋“œ


public class TestPhone01 {

 

public static void main(String[] args) {

	// phone Class์˜ ์ธ์Šคํ„ด์Šค(๊ฐ์ฒด)๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”.
    // new: ์ง€์ •๋œ Class์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ์ฐธ์กฐ๊ฐ’(์ฃผ์†Œ)๋ฅผ ๋ฐ˜ํ™˜ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.
    // '๋ฐ›๋Š”๋‹ค'๋ผ๋Š” ์˜๋ฏธ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , ๋Œ€์ž…์—ฐ์‚ฐ์„ ํ†ตํ•ด์„œ ์ €์žฅํ•ด๋ผ ๋ผ๋Š” ์˜๋ฏธ (์ž๋ฃŒํ˜• ๊ฒฐ์ •)
    
    
    	Phone phone = new Phone();		// ์ฐธ์กฐํ˜• ๋ณ€์ˆ˜๋ช…์€ phone
        
  		phone.setMeta(10);				
        
        /** ์œ„์˜ ๋‚ด์šฉ ์ค‘ (.) ์  ์•ž์—๋Š” Main์ด Phone Class์˜ setMeata Method๋ฅผ ํ˜ธ์ถœํ•˜๋ ค ํ•  ๋•Œ,
          * 'phone์•ˆ์— ์žˆ์œผ๋‹ˆ ์ €๊ธฐ๋กœ ๊ฐ€๋ผ'๋ผ๋Š” ์˜๋ฏธ.
          * ๋งŒ์•ฝ setMeta(); ๊ฐ€ Main์ด๋‚˜, ๊ฐ™์€ Class์•ˆ์— ์žˆ๋‹ค๋ฉด (.) ์  ์•ž์—๋ฅผ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
		  * ๊ฒฐ๊ตญ 10์ด๋ผ๋Š” ์ •์ˆ˜๋ฅผ setMeta์— ์ €์žฅํ•˜๋ผ๋Š” ์˜๋ฏธ.
        /*  setํ•˜๊ณ , ๋’ค์— ๋‚˜์˜ค๋Š” ์ด๋ฆ„์€ ' ํ•ด๋‹น Class ์œ„์— ํ•„๋“œ๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค'๋ผ๋Š” ์˜๋ฏธ๋กœ ์ƒ๊ฐ.
        
        
  } // Main End
  
  
  =====================================================================================
  
  


// ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ(ํ”„๋กœ์ ํŠธ)์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Class(๊ฐ์ฒด)๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.
// ์œ„์˜ ์ด์œ ๋กœ ๊ฐ๊ฐ์˜ Class์— ์„ ์–ธ๋œ Member๋“ค์˜ ์–ฝํž˜์ด ๋ฐœ์ƒ๋œ๋‹ค.
// ์ด๋•Œ, ์š”์ฒญ(Call - ์ „๋‹ฌ)๊ณผ ์‘๋‹ต(retrun - ๋ฐ˜ํ™˜)์ด ๋ฐœ์ƒ๋˜๋Š”๋ฐ, ์š”์ฒญ์€ ๊ฐ์ฒด์˜ Method๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋ผ๋Š” ํ‘œํ˜„์ด๋‹ค.
// ๊ฐ์ฒด๋ผ๋ฆฌ๋Š” ์„œ๋กœ ์‚ฌ์šฉ ์ž‘์šฉ์„ ํ•˜๋Š”๋ฐ, '์„œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค'๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

public class Phone {

	// Class ์ค‘๊ด„ํ˜ธ ์•ˆ์— ์„ ์–ธ๋œ ๊ฒƒ๋“ค์„ Member๋ผ๊ณ  ํ•œ๋‹ค.
    // Class ์ค‘๊ด„ํ˜ธ ์•ˆ์— ์ •์˜๋œ ๋ณ€์ˆ˜๋ฅผ Member ๋ณ€์ˆ˜ ํ˜น์€ ํ•„๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    
    	int meta;		// Member ๋ณ€์ˆ˜ ํ˜น์€ ํ•„๋“œ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
        
        // ์ดˆ๋ณด์ž๋Š” Method๋ฅผ ๋ฌด์กฐ๊ฑด public์œผ๋กœ ์„ ์–ธ.
        
    public int setMeta(int param) {	
    
    // ํ•„๋“œ๋กœ ์„ ์–ธ๋œ meta์— Method ์ธ์ž๋กœ ์ „๋‹ฌ ๋ฐ›์€ param ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค.
    
    	this.meta = param				
        
        return meta;
        
        // Method {} ์ค‘๊ด„ํ˜ธ ์•ˆ์— ๋‚ด์šฉ์„ Body๋ผ๊ณ  ํ•œ๋‹ค.
        
        }
        
  }
    
 

 

์ƒˆ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ž์‹ ๊ฐ์ฒด ์ƒ์„ฑ

public static void main (String[] args) {

   // ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ phone ์ด๋ผ๋Š” Class์—์„œ ์ƒˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
   SmsPhone phone = new SmsPhone();
   
   phone.setMeta(10);    // ๋ถ€๋ชจ Class(phone)์—๊ฒŒ ์ •์ˆ˜ 10์„ ์ „๋‹ฌํ•˜์—ฌ ํ˜ธ์ถœ
   phone.send("๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์ฃผ๋ผ");		// ์ž์‹ Class(send)์—๊ฒŒ "๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์ฃผ๋ผ"๋ผ๋Š” ๋ฌธ์ž์—ด ์ „๋‹ฌํ•˜์—ฌ ํ˜ธ์ถœ





=======================================================================================

// phone Class

	public Class phone {
    
    int meta;
    
    
    public int setMeta(int param) {
    
    this.meta = param;
    
    return meta;
   
    }
    
}






=======================================================================================


// Phone Class๋ฅผ ์ƒ์†๋ฐ›๋Š” send Class

// [์ž์‹ Class๋ช…] extends [๋ถ€๋ชจ Class๋ช…] = ์ฝ์„ ๋•Œ(์˜ค๋ฅธ์ชฝ ๋ถ€ํ„ฐ)๋ถ€๋ชจ Class์—๊ฒŒ ์ž์‹์ด ์ƒ์† ๋ฐ›๋Š”๋‹ค.
public class SmsPhone extends Phone {	

	public void send (String msg) {
    
    System.out.println("SMS: " + msg);
    
    }
}







 

 

๐Ÿ’ฌ ์ฐธ๊ณ ์‚ฌํ•ญ


์ฒ˜์Œ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๋ฉด ์˜ˆ์™ธ(์—๋Ÿฌ)๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ. Class๋ฅผ ์ •์˜ ํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€

๋‘˜์งธ. ํŒจํ‚ค์ง€์— ๋”ฐ๋ผ import ํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€

 

 

 

 

 

 

 

 

 

 

 

 

   ๐Ÿ“๋‹คํ˜•์„ฑ (Polymorphism)


์กฐ์ƒ Type ์ฐธ์กฐ ๋ณ€์ˆ˜๋กœ ์ž์† Type ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด์—์š”.

์ฆ‰, ์กฐ์ƒ Type ๋ณ€์ˆ˜๋กœ ์ž์† ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ์ž์†์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ ์ค‘ ์กฐ์ƒ์˜ ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด์—์š”.

๋‹คํ˜•์„ฑ์€ ์ƒ์†๊ณผ ๋งค์šฐ ๊นŠ์€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ต๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ๊ฐœ๋…์—์„œ ๋‹คํ˜•์„ฑ์€ '์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ'์„ ์˜๋ฏธํ•˜๊ณ , ์ž๋ฐ”์—์„œ๋Š” ํ•œ Type์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ์—ฌ๋Ÿฌ Type์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ์—ฌ๋Ÿฌ Type ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด์—์š”.

๋‹คํ˜•์„ฑ์˜ ์žฅ์ ์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ์š”? ๋‹คํ˜•์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์— ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์กฐ์ƒ Class Type์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ์ž์† Class์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐ!

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

Tv Class์™€ CaptionTv Class๊ฐ€ ์ด์™€ ๊ฐ™์ด ์ •์˜ ๋˜์—ˆ์„ ๋•Œ, ๋‘ Class ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒƒ์ด์—์š”.

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

Tv Class์™€ CaptionTv๋Š” ์„œ๋กœ ์ƒ์† ๊ด€๊ณ„์— ์žˆ์œผ๋ฉฐ, ์ด ๋‘ Class์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

Tv t = new Tv();
CaptionTv c = new CaptionTv();

###############################

Tv t = new CaptionTv();			// ์กฐ์ƒ Type์˜ ๋ณ€์ˆ˜ t์— ์ž์† Type ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋„ฃ๋Š”๋‹ค.

 

๋ถ€๋ชจ Type์œผ๋กœ ์ž์† Type์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋‚˜, ๋ฐ˜๋Œ€๋กœ ์ž์† Type์œผ๋กœ ๋ถ€๋ชจ Type์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋Š” ์—†๋Š” ๊ฒƒ์ด์—์š”.

๊ทธ ์ด์œ ๋Š” ์ž์†์ด ๋ถ€๋ชจ๋ณด๋‹ค Member๊ฐ€ ๋งŽ์€๋ฐ, ์ž์† Type๋ณ€์ˆ˜๋กœ ์กฐ์ƒ Type ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์—†๋Š” ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•œ ๊ฒƒ์ด์—์š”.

์ž์† Type์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ์กฐ์ƒ Type์˜ ์ธ์Šคํ„ด์Šค ์ฐธ์กฐ๋Š” ๋ถˆ๊ฐ€๋Šฅ!

 

 

๐Ÿ‘‰ ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ํ˜• ๋ณ€ํ™˜


์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Member์˜ ๊ฐœ์ˆ˜๋งŒ์„ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ. (์ฃผ์†Œ๊ฐ’, ๊ฐ์ฒด๋Š” ๋ณ€ํ™” ์—†์Œ)
๊ธฐ๋ณธํ˜• ํ˜• ๋ณ€ํ™˜์€ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€์ง€๋งŒ, ์ฐธ์กฐํ˜• ํ˜• ๋ณ€ํ™˜์€ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค.

๊ธฐ๋ณธํ˜• ๋ณ€์ˆ˜์™€ ๊ฐ™์ด ์ฐธ์กฐ๋ณ€์ˆ˜๋„ ํ˜• ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ต๋‹ˆ๋‹ค! ๋‹จ, ์„œ๋กœ ์ƒ์†๊ด€๊ณ„์˜ Class์‚ฌ์ด์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์† Type์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ์กฐ์ƒ Type์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ์กฐ์ƒ Type์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ์ž์† Type์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋กœ ํ˜• ๋ณ€ํ™˜๋งŒ ๊ฐ€๋Šฅ ํ•˜๋‹ต๋‹ˆ๋‹ค!

 

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„
์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์„ธ Class Car, FireEngine, Ambulance๊ฐ€ ์ •์˜ ๋˜์—ˆ์„ ๋•Œ, ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์œ„์™€ ๊ฐ™์€ ๊ฒƒ์ด์—์š”.

 

 

๐Ÿ’ฌ ์ฐธ๊ณ ์‚ฌํ•ญ


๋ฐ”๋กœ ์œ— ์กฐ์ƒ์ด๋‚˜, ์ž์†์ด ์•„๋‹Œ ์กฐ์ƒ์˜ ์กฐ์ƒ์œผ๋กœ๋„ ํ˜• ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ต๋‹ˆ๋‹ค! ๋ชจ๋“  ์ฐธ์กฐ๋ณ€์ˆ˜๋Š” ๋ชจ๋“  Class์˜ ์กฐ์ƒ์ธ Object Class Type์œผ๋กœ ํ˜• ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด์—์š”!

 

 

 

 

 

 

  ๐Ÿ“์˜ค๋ฒ„๋ผ์ด๋”ฉ (์žฌ ์ •์˜)


๋ฉ”์„œ๋“œ์˜ ์žฌ์ •์˜ ํ˜น์€ ๋ฎ์–ด์“ฐ๊ธฐ๋กœ ์ดํ•ดํ•˜๋ฉด ์‰ฝ๋‹ต๋‹ˆ๋‹ค!

public static void main(String[] args) {
	toStirng();		// toStirng ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
}


##########################################

puglic String toStirng() {

	// ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๋‚ด์šฉ ์ž…๋ ฅ
}

// oject Class์˜ toStirng์„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ์‹œ

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ๋ฉ”์„œ๋“œ์˜ ๋‚ด์šฉ๋งŒ์„ ์ƒˆ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด์—์š”. ๋ฉ”์„œ๋“œ์˜ ์„ ์–ธ๋ถ€๋Š” ์กฐ์ƒ์˜ ๊ฒƒ๊ณผ ์™„์ „ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ต๋‹ˆ๋‹ค.

์ž์† ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ์™€
  - ์ด๋ฆ„์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
  - ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
  - ๋ฐ˜ํ™˜ํƒ€์ž…์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

1. ์ ‘๊ทผ ์ œ์–ด์ž๋Š” ์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ณด๋‹ค ์ข์€ ๋ฒ”์œ„๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

๋งŒ์ผ ์กฐ์ƒ ํด๋ž˜์Šค์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ์˜ ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ protected๋ผ๋ฉด, ์ด๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๋Š” ์ž์† ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋Š” ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ protected๋‚˜, public์ด์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

 

2. ์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ณด๋‹ค ๋งŽ์€ ์ˆ˜์˜ ์˜ˆ์™ธ(์—๋Ÿฌ)๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์—†๋‹ค.

 

 

๐Ÿ‘‰์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์˜ ์ฐจ์ด


์˜ค๋ฒ„๋กœ๋”ฉ(Overloding) ๊ธฐ์กด์— ์—†๋Š” ์ƒˆ๋กœ์šด ์ด๋ฆ„์ด ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ (new) (์ƒ์†๊ณผ ๋ฌด๊ด€)
์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding) ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝ (Changer, modify)

 

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

 

 

 

 

 

 

 

 

 

 

 

   ๐Ÿ“์ œ์–ด์ž(Modifier)


 ์˜์–ด๋กœ ์น˜๋ฉด ํ˜•์šฉ์‚ฌ(๋ช…์‚ฌ๋ฅผ ๊พธ๋ฉฐ์คŒ)๊ณผ ๊ฐ™์€ ๊ฒƒ์ด์—์š”. ํด๋ž˜์Šค์™€ ํด๋ž˜์Šค Member์—๊ฒŒ ๋ถ€๊ฐ€์ ์ธ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜์ฃ !

 

์ ‘๊ทผ ์ œ์–ด์ž: public, protected, defulat, private ( 4๊ฐœ ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
๊ทธ ์™ธ: static, final, abstract, native, transient, synchronized, volatile, strictfp

 

์ œ์–ด์ž๋Š” ํด๋ž˜์Šค๋‚˜ ๋ฉค๋ฒ„๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ํ•˜๋‚˜์˜ ๋Œ€์ƒ์— ์—ฌ๋Ÿฌ ์ œ์–ด์ž๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฑฐ์‹œ์—์š”.

์ ‘๊ทผ ์ œ์–ด์ž๋Š” ํ•œ ๋ฒˆ์— ๋„ค๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ•˜๋‹ต๋‹ˆ๋‹ค!

 

๐Ÿ‘‰static - ํด๋ž˜์Šค์˜, ๊ณตํ†ต์ ์ธ


static์€ 'ํด๋ž˜์Šค์˜' ๋˜๋Š” '๊ณตํ†ต์ ์ธ'์˜ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜(ํ•„๋“œ)๋Š” ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜์—ˆ๋”๋ผ๋„ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๊ฐ’์„ ์œ ์ง€ํ•˜๋‚˜, ํด๋ž˜์Šค๋ณ€์ˆ˜(static Member ๋ณ€์ˆ˜)๋Š” ์ธ์Šคํ„ด์Šค์— ๊ด€๊ณ„ ์—†์ด ๊ฐ™์€ ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋ฅผ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ์ด์—์š”.

 

static์ด ๋ถ™์€ Member ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ, ์ดˆ๊ธฐํ™” ๋ธ”๋Ÿญ์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์— ๊ด€๊ณ„ ๋˜์—ˆ๊ธฐ์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ต๋‹ˆ๋‹ค! (new๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.)

์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์™€ static๋ฉ”์„œ๋“œ์˜ ๊ทผ๋ณธ์  ์ฐจ์ด๋Š” ๋ฉ”์„œ๋“œ ๋‚ด์— ์ธ์Šคํ„ด์Šค Member(ํ•„๋“œ)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š๋ƒ ์—†๋Š๋ƒ ์ธ ๊ฒƒ์ด์—์š”.

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

 

๐Ÿ‘‰final - ๋งˆ์ง€๋ง‰์˜, ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†๋Š”


final์€ '๋งˆ์ง€๋ง‰์˜' ๋˜๋Š” '๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†๋Š”' ์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ–์€ ๊ฒƒ์ด์—์š”! ๋˜ํ•œ, ๊ฑฐ์˜ ๋ชจ๋“  ๋Œ€์ƒ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ต๋‹ˆ๋‹ค.

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

 

 

๐Ÿ’ฌ ์ฐธ๊ณ ์‚ฌํ•ญ


์ œ์–ด์ž๋“ค ๊ฐ„์˜ ์ˆœ์„œ๋Š” ์ƒ๊ด€์—†์ง€๋งŒ, ์ฃผ๋กœ ์ œ์–ด์ž๋ฅผ ๋งจ ์™ผ์ชฝ์— ๋ช…์‹œ ํ•œ๋‹ต๋‹ˆ๋‹ค!

 

 

 

 

 

 

 

 

 

 

 

   ๐Ÿ“์ถ”์ƒํ™”(Abstract - ์ถ”์ƒ์˜, ๋ฏธ์™„์„ฑ์˜)


abstract๋Š” '๋ฏธ์™„์„ฑ'์˜ ์˜๋ฏธ๋ฅผ ๊ฐ–์œผ๋ฉฐ, ๋ฉ”์„œ๋“œ์˜ ์„ ์–ธ๋ถ€๋งŒ ์ž‘์„ฑํ•˜๊ณ , ์‹ค์ œ ์ˆ˜ํ–‰๋‚ด์šฉ์€ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Abstract๊ฐ€ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ณณ - Class, Method

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์•„์ง ์™„์„ฑ๋˜์ง€ ์•Š์€ ๋งค์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” '๋ฏธ์™„์„ฑ ์„ค๊ณ„๋„' ํ˜น์€ '๋ฏธ์™„์„ฑ ํšŒ์‚ฌ'์ด๊ธฐ์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด์—์š”.

๋ฏธ์™„์„ฑ ํšŒ์‚ฌ์ด๊ธฐ์— ์—…๋ฌด๊ฐ€ ๋‹น์—ฐํžˆ ๋ถˆ๊ฐ€ํ•˜๊ฒ ์ง€์š”? ๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ํšŒ์‚ฌ(์ธ์Šคํ„ด์Šค - ๊ฐ์ฒด)์™€ ๊ณ„์•ฝ(์ƒ์„ฑ)์ด ๋ถˆ๊ฐ€ํ•œ ๊ฒƒ์ด์—์š”.

์ถ”์ƒ ํด๋ž˜์Šค์—์„œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„ ์™„์„ฑํ•ด์•ผ ํ•˜๊ณ , ์™„์„ฑ๋œ ํด๋ž˜์Šค์—์„œ ๊ฐ์ฒด ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ต๋‹ˆ๋‹ค!

abstract class AbstractTest {		//	์ถ”์ƒ ํด๋ž˜์Šค(์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•œ ํด๋ž˜์Šค)
	abstract void move();			// ์ถ”์ƒ ๋ฉ”์„œ๋“œ (๊ตฌํ˜„๋ถ€ ํ˜น์€ Body๊ฐ€ ์—†๋Š” ๋ฉ”์„œ๋“œ)
}

 

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

 

 

 

๐Ÿ‘‰ ์ถ”์ƒํ™”์—๋Š” ์™„์„ฑ๋˜์ง€ ์•Š์€ Method๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.


  โœ๏ธ  ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ํ•„์š”ํ•œ ๊ธฐ๋Šฅ(Method)๊ฐ€ ์žˆ๋Š”๋ฐ, ํ˜„์žฌ(๋‹น์žฅ) ๊ตฌํ˜„ํ•  ๋‚ด์šฉ์„ ๋ชจ๋ฅผ ๋•Œ ์‚ฌ์šฉ ํ•ฉ๋‹ˆ๋‹ค.

  โœ๏ธ Method ์ค‘ ๊ต์ฒด๋  ์—ฌ์ง€๊ฐ€ ๋†’๊ณ , ์ƒํ™ฉ, ์‚ฌ๋žŒ, ํšŒ์‚ฌ ๋“ฑ์— ๋ณ€๊ฒฝ์„ ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  โœ๏ธ ๊ตฌํ˜„๋œ๊ฒŒ ์žˆ๊ฑฐ๋‚˜, ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ฒƒ๋“ค์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ฒƒ๋“ค์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  โœ๏ธ ์ถ”์ƒ Class๋ฅผ ์„ ์–ธํ•  ๋•Œ, new๋ฅผ ๋ถ™ํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ถ”์ƒ Class๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— new๋ฅผ ๋ถ™ํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  โœ๏ธ extends(์ƒ์†)์„ ์ด์šฉํ•ด์„œ ์•„์ง ์™„์„ฑ๋˜์ง€ ์•Š์€ Class ํ˜น์€ Method๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ‘‰ ์ถ”์ƒ Mhothd๋Š” {} ์ค‘๊ด„ํ˜ธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.


โœ๏ธ Method๋ช…๊ณผ ์ „๋‹ฌ๊ฐ’(์ธ์ž ํ˜น์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ผ๊ณ ๋„ ํ•จ)์ด ํ•„์š”ํ•œ๋ฐ, ๊ทธ Method๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅผ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด emaile์„ ๋ณด๋‚ผ ๋•Œ, ๋„ค์ด๋ฒ„์™€ ๋‹ค์Œ ๋ฉ”์ผ์ด ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ค๋ฉด email์ด๋ผ๋Š” ๊ณตํ†ต์ ์€ ์žˆ์ง€๋งŒ, ๊ทธ ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿด ๋•Œ ์ถ”์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

โœ๏ธ abstract๊ฐ€ ๋ถ™์–ด ์žˆ๋Š” Method๊ฐ€ ์ถ”์ƒ Method์ธ๋ฐ, ์ด๊ฑด '์ง€๊ธˆ ๊ตฌํ˜„ ์•ˆํ•˜๊ณ , ๋‚˜์ค‘์— ํ•  ๊ฒƒ์ด๋‹ค'๋กœ ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

โœ๏ธ ๋‹ค์–‘์„ฑ์ด ์žˆ์œผ๋‹ˆ ๊ทธ ๋‹ค์–‘์„ฑ์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ‘‰ ์ถ”์ƒ Class๋Š” ์ถ”์ƒ Method๊ฐ€ ์žˆ๋Š” Class๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.


  โœ๏ธ ์ถ”์ƒ Class๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒ์„ฑ ์‹œ์— new๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  โœ๏ธ ์ถ”์ƒ Method ( Abstract )๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Class๋Š” public abstract class [Class๋ช…] {  }์œผ๋กœ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  โœ๏ธ ์ถ”์ƒ Class๋Š” ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ๋˜๊ณ , ๋งŒ์•ฝ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค๋ฉด ์ถ”์ƒ Class๋ฅผ ์ƒ์† ๋ฐ›์•„ ๊ตฌํ˜„ํ•œ ์ž์‹ Class(๊ตฌํ˜„์ฒด)๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ถ€๋ชจ Class์— ์žˆ๋Š” ์ถ”์ƒ Method๋ฅผ ์ž์‹ Class๊ฐ€ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  โœ๏ธ ์—…๋ฌด ์‹œ์— ์•ž์œผ๋กœ ๊ณ„์† ์‚ฌ์šฉํ•  Class ์ข…๋ฅ˜์— ๋Œ€ํ•ด ๊ธฐ์ค€์„ ์žก๋Š” ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹๋‹ค๊ณ  ํ•˜๋„ค์š”!

 

 

 

 

 

 

 

 

 

 

 

   ๐Ÿ“์ถ”์ƒ ํด๋ž˜์Šค (Abstract Class)


์ถ”์ƒ ํด๋ž˜์Šค๋„ ์ƒ์„ฑ์ž๋Š” ๊ผญ ๊ตฌํ˜„ ๋˜์–ด์•ผ ํ•œ๋‹ค!

ํด๋ž˜์Šค๋ฅผ ํšŒ์‚ฌ๋กœ ๋น„์œ ํ–ˆ๋‹ค๋ฉด ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๋ฏธ์™„์„ฑ์˜ ํšŒ์‚ฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„์ง ์—…๋ฌด๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์€ ํšŒ์‚ฌ์ธ ๊ฒƒ์ด์—์š”.

ํด๋ž˜์Šค๊ฐ€ ๋ฏธ์™„์„ฑ์ด๋ผ๋Š” ๊ฒƒ์€ Member์˜ ๊ฐœ์ˆ˜์— ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฏธ์™„์„ฑ Method(์ถ”์ƒ Method)๊ฐ€ ์•ˆ์— ํฌํ•จ ๋˜์–ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ ์ž…๋‹ˆ๋‹ค.

์œ„์—์„œ ์ฃผ๋‹ˆํ•˜๋ž‘์€ Method๋ฅผ ํšŒ์‚ฌ์˜ ํŒ€์ด๋ผ๊ณ  ํ–ˆ๋˜ ๊ฒƒ์ด์—์š”. ํŒ€์ด ๋ฏธ์™„์„ฑ์ด ๋˜์–ด ์žˆ์œผ๋‹ˆ ํšŒ์‚ฌ๊ฐ€ ์ œ๋Œ€๋กœ ์—…๋ฌด๋ฅผ ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๊ฒ ์ง€์š”?

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š”๋ฐ, ๋ฐ”ํƒ•์ด ๋˜๋Š” ์กฐ์ƒ ํด๋ž˜์Šค๋กœ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด์—์š”.

์•„๊ฒƒ๋„ ์—†๋Š” ์ƒํƒœ์—์„œ ์–ด๋–ค ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ๋ณด๋‹จ, ์™„์ „ํ•˜์ง€๋Š” ๋ชปํ•˜๋”๋ผ๋„ ํ‹€์ด๋ผ๋„ ๊ฐ–์ถ”์–ด์ ธ ์žˆ๋‹ค๋ฉด ํ›จ์”ฌ ์ž‘์—…์ด ์ˆ˜์›”ํ•  ๊ฒƒ์ด์—์š”.

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๊ณตํ†ต ๋ถ€๋ถ„๋งŒ์„ ๊ทธ๋ฆฐ ๋ฏธ์™„์„ฑ ํšŒ์‚ฌ๋ฅผ ๋งŒ๋“ค์–ด ๋†“๊ณ , ์ด ํšŒ์‚ฌ๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ๊ฐ์˜ ํ•˜์ฒญ ์—…์ฒด๋“ค์„ ์™„์„ฑํ•˜๋Š” ๊ฒƒ์ด์—์š”.

๊ต์œก์—์„œ ์ฒ˜๋Ÿผ ์„ค๊ณ„๋„๋กœ ๋น„์œ ๋ฅผ ํ•˜์ž๋ฉด ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๋ฏธ์™„์„ฑ์˜ ์„ค๊ณ„๋„์ธ ๊ฒƒ์ด๊ณ , ๊ณตํ†ต ๋ถ€๋ถ„๋งŒ์„ ๊ทธ๋ฆฐ ๋ฏธ์™„์„ฑ ์„ค๊ณ„๋„๋ฅผ ๋งŒ๋“ค์–ด ๋†“๊ณ , ์ด ๋ฏธ์™„์„ฑ ์„ค๊ณ„๋„๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์„ค๊ณ„๋„๋ฅผ ์™„์„ฑํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ํ‚ค์›Œ๋“œ 'abstract'๋ฅผ ๋ถ™์ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ต๋‹ˆ๋‹ค.

abstract class [ClassName] {
     // ํด๋ž˜์Šค Body
}

์ถ”์ƒ ํด๋ž˜์Šค ์—ญ์‹œ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์œผ๋ฉฐ, Member ๋ณ€์ˆ˜์™€ Method๋„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

 

๐Ÿ‘‰ ์ถ”์ƒ ๋ฉ”์„œ๋“œ(Abstract Method)


๊ผญ ์ •์˜๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, ์ž์†๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋  ๋•Œ ์‚ฌ์šฉ

์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ์„ ์–ธ๋ถ€๋งŒ ์ž‘์„ฑํ•˜๊ณ , ๊ตฌํ˜„๋ถ€(Body)๋Š” ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š” ์ฑ„๋กœ ๋‚จ๊ฒจ ๋‘” ๊ฒƒ์ด์—์š”.

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

์ถ”์ƒํ™”: ํด๋ž˜์Šค๊ฐ„์˜ ๊ณตํ†ต์ ์„ ์ฐพ์•„ ๊ณตํ†ต์˜ ์กฐ์ƒ์„ ๋งŒ๋“œ๋Š” ์ž‘์—…
๊ตฌ์ฒดํ™”: ์ƒ์†์„ ํ†ตํ•ด ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„, ํ™•์žฅํ•˜๋Š” ์ž‘์—…

์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์ž์† ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๊ทธ ๊ณณ์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ์•ผ๋งŒ ๊ฐ์ฒด๋กœ ์ƒ์„ฑ์„ ํ•˜๊ณ , ํ˜ธ์ถœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”. 

 

๐Ÿ’ฌ ์ฐธ๊ณ ์‚ฌํ•ญ


์ถ”์ƒ Method๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ํด๋ž˜์Šค๋„ ํ‚ค์›Œ๋“œ 'abstract'๋ฅผ ๋ถ™ํ˜€ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ฃผ์˜ํ•  ๊ฒƒ์€ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์ง€์ •๋˜๋ฉด ์ด ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

 

 

 

 

 

 

   ๐Ÿ“Interface (์ธํ„ฐํŽ˜์ด์Šค)


ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€์ ์—์„œ ๋ณด๋ฉด ์ถ”์ƒ ๋ฉ”์„œ๋“œ์˜ ์ง‘ํ•ฉ!
๋ชจ๋“  Member๊ฐ€ public์œผ๋กœ ์„ ์–ธ.

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ผ์ข…์˜ ์ถ”์ƒ ํด๋ž˜์Šค์ธ ๊ฒƒ์ด์—์š”. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ถ”์ƒ ํด๋ž˜์Šค์ฒ˜๋Ÿผ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–์ง€๋งŒ, ์ถ”์ƒ ํด๋ž˜์Šค๋ณด๋‹ค ์ถ”์ƒํ™” ์ •๋„๊ฐ€ ๋†’์•„ ์ถ”์ƒ ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ ๋ชธํ†ต์„ ๊ฐ–์ถ˜ ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ, Member ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑ์›์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด์—์š”.

์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๋จผ์ €, ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ, ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ์ƒ์„ฑ์ž๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด์—์š”. (์ผ๋ถ€ ๋ฏธ์™„์„ฑ์ด๋ผ๊ณ  ํ‘œํ˜„)

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋งŒ ๋ณด์œ ํ•˜๊ณ  ์žˆ๊ณ , ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ์ƒ์„ฑ์ž๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด์—์š”. ๋‹จ, final๋กœ ์ •์˜ ๋œ ๋ณ€์ˆ˜๋Š” ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. (์™„์ „ ๋ฏธ์™„์„ฑ์ด๋ผ๊ณ  ํ‘œํ˜„) 

๐Ÿ‘‰ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„๋œ ๊ฒƒ์ด ์•„๋ฌด๊ฒƒ๋„ ์—†์ด ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ Method ๋ชฉ๋ก๋งŒ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์ธํ„ฐํŽ˜์ด์Šค๋Š” Class๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค! ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ๊ฒƒ์€ ์—ฐ๊ฒฐ์  ํ˜น์€ ๊ทœ์น™์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. '์„œ๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ, ์ปดํ“จํ„ฐ ๋“ฑ์„ ์–ด๋–ค ๊ทœ์น™์œผ๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค'๋ผ๋Š” ์˜๋ฏธ์™€ ๊ฐ™๊ณ , ๋„คํŠธ์›Œํฌ์— ํ”„๋กœํ† ์ฝœ๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋ณด๋ฉด ๋˜๊ฒ ๋„ค์š”!

๐Ÿ‘‰ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋• Method ์ด๋ฆ„๊ณผ ์ž๋ฃŒํ˜•(์ „๋‹ฌ, ๋ฐ˜ํ™˜)๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ์ •์˜ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘‰ API (Application Programing Interface)๊ฐ€ ๊ฒฐ๊ตญ ์ง€๊ธˆ ์ด์•ผ๊ธฐ๋Š” Interface์™€ ๊ฐ™์€ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

๐Ÿ‘‰์ฒ˜์Œ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ ์‹œ Class๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ƒ์„ฑํ•œ ๋’ค์— public class [ class๋ช… ]์ด ์•„๋‹ˆ๋ผ, public interface [ interface๋ช…] ์œผ๋กœ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

๐Ÿ‘‰์ธํ„ฐํŽ˜์ด์Šค ํ•„๋“œ๋Š” Final ํ•„๋“œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๋ฐ, Final ํ•„๋“œ๋Š” ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•˜๊ณ , ์ดˆ๊ธฐ๊ฐ’์„ ๋ฐ˜๋“œ์‹œ ์ฃผ์–ด์•ผ ํ•˜๋ฉฐ, ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ ๋ชจ๋‘๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

๐Ÿ‘‰์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ Class๋ฅผ ๊ตฌํ˜„์ฒด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

    โœ๏ธ ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„ ์˜ค๋Š” ๊ณณ์— implements ์™ผ์ชฝ์— ์˜ค๋Š” ๋‚ด์šฉ์€ ๊ตฌํ˜„์ฒด์˜ ์ด๋ฆ„์ด ์˜ค๊ณ , ๊ทธ ์˜ค๋ฅธ์ชฝ์—๋Š” ์ž๋ฃŒํ˜• Type์ด ์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

// Person์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์„œ PersonImpl Class๋ฅผ ๋งŒ๋“ค ๋•Œ 

Public class PersonImpl[์ธํ„ฐํŽ˜์ด์Šค๋ช…] implements Person[์ž๋ฃŒํ˜• Type๋ช…] {

	@Override
    public void todo() {
    
    }
    
    @Override
    public void run() {
    
    }
    
    @Override
    public void walk() {
    
    }

  โœ๏ธ ๊ตฌํ˜„์ฒด๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, implements ์˜ค๋ฅธ์ชฝ์— ์‰ผํ‘œ๋ฅผ ๊ตฌ๋ถ„์ž๋กœ ํ•˜์—ฌ ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ‘‰ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ž‘์„ฑ


์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

interface [InterfaceName] {
	public static final	[์ž๋ฃŒํ˜• ํƒ€์ž…] [๋ณ€์ˆ˜๋ช…] = ๊ฐ’;	  // final์ด ๋ถ™์œผ๋ฉด ๋ณ€์ˆ˜๋ผ ํ•˜์ง€ ์•Š๊ณ , ์ƒ์ˆ˜(๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’)์ด๋ผ๊ณ  ํ‘œํ˜„
    public abstract [Method ๋ช…](๋งค๊ฐœ๋ณ€์ˆ˜);			// ์ถ”์ƒ ๋ฉ”์„œ๋“œ

 

๋ชจ๋“  Member ๋ณ€์ˆ˜๋Š” public static(์ œ์–ด์ž) final๋กœ ์ •์˜ ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—์„œ ๋ชจ๋‘ ์ ํ˜€์•ผ ๋˜๊ธฐ์— ์ƒ๋žต ๊ฐ€๋Šฅ.
๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” public abstract์—ฌ์•ผ ํ•˜๋ฉฐ, ์ƒ๋žต์ด ๊ฐ€๋Šฅ. (๋‹จ, static ๋ฉ”์„œ๋“œ์™€ defulat ๋ฉ”์„œ๋“œ๋Š” ์˜ˆ์™ธ JDK 1.8 ๋ถ€ํ„ฐ

์ธํ„ฐํŽ˜์ด์Šค์— ์ •์˜๋œ ๋ชจ๋“  Member์— ์˜ˆ์™ธ์—†์ด ์ ์šฉ๋˜๋Š” ์‚ฌํ•ญ์ด๊ธฐ์— ์ œ์–ด์ž๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

 

 

๐Ÿ‘‰์ธํ„ฐํŽ˜์ด์Šค์˜ ์ƒ์† 


์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด์—์š”.

 

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

 

ํด๋ž˜์Šค์˜ ์ƒ์†๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž์† ์ธํ„ฐํŽ˜์ด์Šค(Fightable)๋Š” ์กฐ์ƒ ์ธํ„ฐํŽ˜์ด์Šค(Movable, Attackable)์— ์ •์˜๋œ member๋ฅผ ๋ชจ๋‘ ์ƒ์† ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ •์˜๋œ Member๊ฐ€ ํ•˜๋‚˜๋„ ์—†์ง€๋งŒ, ์กฐ์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์† ๋ฐ›์€ ๋‘ ๊ฐœ์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฉค๋ฒ„๋กœ ๊ฐ–๊ฒŒ ๋œ๋‹ต๋‹ˆ๋‹ค.

 

 

๐Ÿ‘‰์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„


์ธํ„ฐํŽ˜์ด์Šค ์—ญ์‹œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ๋Œ€๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ž์‹ ์— ์ •์˜๋œ ์ถ”์ƒ๋ฉ”์„œ๋“œ์˜ ๋ชธํ†ต์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ, ํด๋ž˜์Šค๋ฅผ ํ™•์žฅํ•œ๋‹ค๋Š” ์˜๋ฏธ์˜ ํ‚ค์›Œ๋“œ 'extends'๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์˜ ํ‚ค์›Œ๋“œ 'implements'๋ฅผ ์‚ฌ์šฉ ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜: ์ž๋ฐ”์˜ ์ •์„

์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์€ 'Fighter ํด๋ž˜์Šค๋Š” Fightable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.' ๋ผ๊ณ  ํ‘œํ˜„ ํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์ผ ๊ตฌํ˜„ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ ์ค‘ ์ผ๋ถ€๋งŒ ๊ตฌํ˜„ ์‹œ abstract๋ฅผ ๋ถ™ํ˜€ ์ถ”์ƒํด๋ž˜์Šค๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ต๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋ž€? ์ถ”์ƒ ๋ฉ”์„œ๋“œ์˜ ์ง‘ํ•ฉ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด๋ž€? ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ ๋ชธํ†ต ๋งŒ๋“ค๊ธฐ
abstract class Fighter implements Fightable {
	public void move (int x, int y) {	/* ๋‚ด์šฉ ์ƒ๋žต	*/ }
} // Fighter ๊ตฌํ˜„์ฒด End


// ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ์†๊ณผ ๊ตฌํ˜„์„ ๋™์‹œ์— ํ•  ์ˆ˜๋„ ์žˆ๋‹ต๋‹ˆ๋‹ค.

class Fighter extends Unit implements Fightable {
	public void move(int x, int y) {	/* ๋‚ด์šฉ ์ƒ๋žต	*/ }
    public void attack(Unit u)	   {	/* ๋‚ด์šฉ ์ƒ๋žต	*/ }
} // Fighter ๊ตฌํ˜„์ฒด End

 

๐Ÿ’ฌ ์ฐธ๊ณ ์‚ฌํ•ญ


๋ชจ๋“  Class์—๋Š” [Class๋ช…] extends object๊ฐ€ ์ƒ๋žต๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋Š” ํด๋ž˜์Šค์™€ ๋‹ฌ๋ฆฌ Objectํด๋ž˜์Šค์™€ ๊ฐ™์€ ์ตœ๊ณ  ์กฐ์ƒ์ด ์—†์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

๐Ÿ’ฌ ์ „์ฒด ์ฐธ๊ณ ์‚ฌํ•ญ


์ฒ˜์Œ ์ฝ”๋”ฉํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์œผ์‹ค ๋งŒํ•œ ๋‚ด์šฉ ์ž…๋‹ˆ๋‹ค.

  - ์ฝ”๋“œ ๋‚ด์šฉ ๋ถ€ํ„ฐ ์•Œ์•„์•ผ ์ฝ”๋“œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  - ๊ฐœ๋…, ์ด๋ก ์„ ์กฐ๊ธˆ์”ฉ ํ˜„์žฌ ์•Œ๊ณ  ์žˆ๋Š” ์ง€์‹์— ๋ณดํƒœ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฒฝํ—˜๊ณผ ์ฐธ์กฐํ•  ๋‚˜๋งŒ์˜ ์ž๋ฃŒ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋  ๊ฒƒ ์ž…๋‹ˆ๋‹ค. 

  - ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณด๊ณ , ์ถ”์ƒํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ๊ทธ ์ถ”์ƒํ™”๋ฅผ ์ƒ์†๋ฐ›๋Š” Class๋“ค์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  - ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ• (Contains();๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋น„๊ต ๋Œ€์ƒ๊ณผ ๋น„๊ตํ•˜์—ฌ ๊ทธ ๋‚ด์šฉ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ๊ฒ€์ƒ‰ ์—”์ง„ Logic์— ์‚ฌ์šฉ ๋ฉ๋‹ˆ๋‹ค. equals๋Š” ์•„์˜ˆ ์ „๋ถ€ ๋ชจ๋‘ ์ผ์น˜ํ•  ๋•Œ true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, Login๊ณผ ๊ฐ™์€ Logic์— ์‚ฌ์šฉ ๋ฉ๋‹ˆ๋‹ค.

 - @Override : @ํ‘œ์‹œ ๋œ ๊ฒƒ์„ Annotation์ด๋ผ ํ•˜๋ฉฐ, ์–ด๋–ค ํŠน์„ฑ์ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ˆ์•ฝ์–ด ์ž…๋‹ˆ๋‹ค.

 - @Deprecated : ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ๋ถ€๋ถ„์„ ๋งก์•„ ์ฝ”๋”ฉํ•  ๋•Œ ํ•จ์ˆ˜์— ์ด๊ฒƒ์ €๊ฒƒ ๋งŒ๋“ค์–ด์„œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ณต์œ ํ–ˆ๋Š”๋ฐ, ๋’ค๋Šฆ๊ป˜ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์ƒ๊ฐ๋‚ฌ์„ ๋•Œ, ๋‹ค์‹œ ๊ณต์œ ์„ ํ•ด์„œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์— ์คฌ๋–ค ํ•จ์ˆ˜ ๋ง๊ณ , ์ˆ˜์ •ํ•œ ํ•จ์ˆ˜๋ฅผ ์ฃผ๊ธฐ ์ „์— ์ด ํ‘œ์‹œ๋ฅผ ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ , ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

 - System.exit(); ์ด ํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ˜„ ์‹œ์ ์—์„œ ์ข…๋ฃŒํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

package console_210223;



public class ExInstance01 {



	publicstaticvoidmain(String[] args) {

// ํด๋ž˜์Šคํ˜• ๋ณ€์ˆ˜๋ช…;๋ฅผ ์ธ์Šคํ„ด์Šค๋ช… ํ˜น์€ ๊ฐ์ฒด๋ช…์ด๋ผ๊ณ  ํ•œ๋‹ค.

Car car1 = new Car();    // ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋ผ๋Š” ์˜๋ฏธ๋กœ ์ƒ์„ฑ์ž(Constructor)๋ผ๊ณ  ํ•œ๋‹ค.

System.out.println( car1 );
System.out.println( car1.carNumber ); 
// ์—ฌ๊ธฐ์„œ car1์€ ๊ฐ์ฒด๋ช… ํ˜น์€ ์ธ์Šคํ„ด์Šค๋ช…์œผ๋กœ ๋ถ€๋ฅด๊ณ , carNumber๋Š” ๊ทธ ๊ฐ์ฒด์˜ Member๋ณ€์ˆ˜์ด๋‹ค.

(๊ฐœ๋…์ ์ธ ๋‚ด์šฉ) ์šฐ๋ฆฌ๊ฐ€ Member๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ๋žŒ์— ๋Œ€ํ•œ ์ •๋ณด์ด๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ–๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ผ๊นŒ? ๊ทธ๋Ÿฐ ๊ฒƒ๋“ค์€ ํ•„๋“œ์— ๋งŒ๋“ ๋‹ค. ์ฆ‰, ์–ด๋–ค ๊ฒƒ๋“ค์ด ๊ณตํ†ต์ ์œผ๋กœ ๊ฐ–๋Š” ๊ฐ’์€ ํ•„๋“œ๋กœ ๋บ€๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ๋žŒ์€ ์ด๋ฆ„์ด ์žˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ , ํ•„๋“œ์— ์„ ์–ธํ•œ ๊ฒƒ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜(Method)๋ฅผ ์ •์˜ํ•œ๋‹ค. ์–ด๋””์—? ํ•„๋“œ์—!

๋˜ํ•œ ํ•„๋“œ๊ฐ’์—๋Š” 'Class๊ฐ€ ์–ด๋–ค ํ–‰๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค'๋ฅผ Method๋กœ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค.

๊ฒฐ๊ตญ ๊ฐ์ฒด๋ž€ ์†์„ฑ๊ณผ ํ–‰์œ„๋กœ ํ‘œํ˜„๋˜๋Š” ๊ฒƒ์ด๋‹ค.

null์ด๋ผ๋Š” ์˜๋ฏธ๋Š” ์—†๋‹ค๋ผ๋Š” ๋œป์ธ๋ฐ, Memory์ƒ์— ์•„์˜ˆ ๊ณต๊ฐ„ ์ž์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: ๊ฐ•์˜์žฅ ์ž์ฒด๊ฐ€ ์—†๋‹ค)

empty๋ผ๋Š” ์˜๋ฏธ๋Š” ์—†๋‹ค๋ผ๋Š” ๋œป์ธ๋ฐ, Memory์ƒ์— ๊ณต๊ฐ„์€ ์žˆ์ง€๋งŒ, ๊ฐ’์ด ์—†๋‹ค๋ผ๋Š” ์˜๋ฏธ ์ด๋‹ค.

(์˜ˆ: ๊ฐ•์˜์žฅ์— ์‚ฌ๋žŒ์ด ์—†๋‹ค)

 

Memory

Stack์€ ํ•จ์ˆ˜, ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๊ณ , ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์ €์žฅ

Heap์€ ์ „์—ญ์ (์ง€์—ญ์— ๊ฒฝ๊ณ„๊ฐ€ ์—†๋‹ค.)์ด๋ฉฐ, ์ด๋ฆ„์ด ์•„๋‹ˆ๊ณ , ์ฃผ์†Œ(์œ„์น˜)๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. new(์ƒˆ๋กœ ์ƒ์„ฑํ•œ Method์˜ ์ฃผ์†Œ๋ฅผ ๋ณ€์ˆ˜์— ๋„ฃ๋Š”๋‹ค.)๋ผ๊ณ  ์ƒ์„ฑํ•œ ๊ฒƒ์€ ๋‹ค ์—ฌ๊ธฐ๋กœ ์ €์žฅ.

mainํ•จ์ˆ˜๋Š” stack์— ์ €์žฅ์ด๋˜๊ณ , Member m = new Member();๋ฅผ ์ƒ์„ฑํ–ˆ์„ ์‹œ

main์™€ m๋ณ€์ˆ˜๊ฐ€ stack์— ์ €์žฅ๋˜๊ณ , m๋ณ€์ˆ˜๊ฐ’์— Memeber์˜ Memory(Heap)์ƒ์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ฆ‰, m๋ณ€์ˆ˜ ์•ˆ์—๋Š” Member์˜ ์ฃผ์†Œ๊ฐ€ ์žˆ๋‹ค๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค์ด๊ณ , m ๋ณ€์ˆ˜๋ฅผ ์“ฐ๋ฉด Member ํ•จ์ˆ˜์˜ ์œ„์น˜๋กœ ๊ฐ€๋ผ๊ฐ€ ๋œ๋‹ค.

๋งŒ์•ฝ todo(m);์„ main์— ์„ ์–ธํ•˜๋ฉด statc์— todo(Member p);๊ฐ€ Memory ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•˜๋Š”๋ฐ, m๋ณ€์ˆ˜๋ฅผ ์ธ์ž๋กœ ์คฌ๊ธฐ ๋•Œ๋ฌธ์— Member ์œ„์น˜๊ฐ’์„ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋œ๋‹ค.

๊ฒฐ๊ตญ p.name = " "; ์ด๋ผ๊ณ  ํ•˜๋ฉด p๊ฐ€ Member์˜ ์ฃผ์†Œ๊ฐ’์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๊ธฐ์— name์•ˆ์— ๊ณต๋ฐฑ์„ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.

Classํ˜•์ด๋ผ๋Š” ๊ฑธ์„ ๋‹ค๋ฅธ๋ง๋กœ ์ฐธ์กฐํ˜•์ด๋ผ๊ณ  ํ•œ๋‹ค.๊ฒฐ๊ตญ ๊ธฐ๋ณธํ˜•์ด ์•„๋‹ˆ๋ฉด ๋‹ค ์ฐธ์กฐํ˜•์ด๋‹ค. ์–˜๋Š” ๋ฌด์กฐ๊ฑด ์•ž๊ธ€์ž๊ฐ€ ๋Œ€๋ฌธ์ž์ด๋‹ค.

(.)์€ ์•ˆ์— ๋“ค์–ด๊ฐ€๋ผ๋Š” ๊ฑด๋ฐ, ์•ˆ์— ๋“ค์–ด๊ฐ€๋ฉด ์ž๋ฃŒํ˜•์ด ๋ฐ”๋€๋‹ค.

Class๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ์ž๋ฃŒํ˜•์„ ์ƒˆ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ผ. ๊ทธ ์ด์œ ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ์ž๋ฃŒํ˜•์„ ํ•˜๋‚˜์˜ ๊ณต๊ฐ„์— ๋„ฃ์œผ๋ ค๊ณ  ํ•˜๋‹ˆ ์ž๋ฐ”๋Š” ๋ฐฐ์—ด์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž๋ฃŒํ˜•์„ ๋„ฃ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ํ•œ๋‹ค.

๋ฐฐ์—ด์€ Index ๋ฒˆํ˜ธ๋กœ ๊ฐ ๋ฐฉ์„ ํŒ๋‹จํ•˜์ง€๋งŒ, Class๋Š” ์ด๋ฆ„์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค. Classํ˜•์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด int๋‚˜ ๊ธฐํƒ€ ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ž๋ฃŒํ˜•์— ๋งž๊ฒŒ ๋„ฃ์–ด์•ผ ํ•˜๋“ฏ์ด Classํ˜•์„ ์‚ฌ์šฉํ•˜๋ ค๋‹ˆ Class์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋„ฃ์–ด์•ผ ํ•œ๋‹ค.

๊ฐ์ฒด๋ฅผ ์ฒ˜์Œ ์ƒ์„ฑํ•˜๋ฉด null๋กœ ์ดˆ๊ธฐํ™” ๋˜์–ด ์žˆ๋‹ค. null๋กœ ๋˜์–ด ์žˆ์„ ๋•Œ, (.) ์ ์„ ์ฐ์œผ๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. NPE(Null Point Error) null์— ์  ์ฐ์œผ๋ฉด ์ด๋Ÿฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

IllegalFormatConversionException

์ด ์˜ˆ์™ธ๋Š” format string ์‚ฌ์šฉ ์‹œ format์ด ์•ˆ ๋งž๋Š”๋‹ค๋Š” ์˜๋ฏธ

 

 


 

 

์ฃผ๋‹ˆํ•˜๋ž‘์˜ ๊ธ€์ด ๋งˆ์Œ์— ๋“œ์…จ๋‚˜์š”? ๊ตฌ๋…๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋Œ“๊ธ€์€ ์ฃผ๋‹ˆํ•˜๋ž‘์—๊ฒŒ ๋งŽ์€ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค!

728x90
๋ฐ˜์‘ํ˜•