Skip to content

Latest commit

ย 

History

History
483 lines (392 loc) ยท 21 KB

Section3.md

File metadata and controls

483 lines (392 loc) ยท 21 KB

3. ์ž๋ฐ”์™€ ๊ฐ์ฒด ์ง€ํ–ฅ

๊ฐ์ฒด ์ง€ํ–ฅ์€ ์ธ๊ฐ„ ์ง€ํ–ฅ์ด๋‹ค

  • 1์žฅ์—์„œ ๋ณธ ๋ฐœ์ „์‚ฌ๋ฅผ ๋ณด๋ฉด ๊ฐœ๋ฐœ์ž(์ธ๊ฐ„)์„ ๋ฐฐ๋ คํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ 2์žฅ์—์„œ ๋ณธ ์ ˆ์ฐจ์ /๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ธ๊ฐ„์ด ๊ธฐ๊ณ„๋ฅผ ์ดํ•ดํ•˜๋ ค๋Š” ๋…ธ๋ ฅ์—์„œ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜์ง€ ๋ชปํ–ˆ๋‹ค.
    • ํŠนํžˆ ํฌ์ธํ„ฐ๋Š” ๊ธฐ๊ณ„ ์ˆ˜์ค€์œผ๋กœ ๋ˆˆ๋†’์ด๋ฅผ ๋‚ฎ์ถ”์ง€ ์•Š์œผ๋ฉด ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ค๋‹ค.
  • ๊ธฐ๊ณ„ ์ข…์†์ ์ธ ๊ฐœ๋ฐœ์—์„œ ๋ฒ—์–ด๋‚˜, ์šฐ๋ฆฌ๊ฐ€ ๋ˆˆ์œผ๋กœ ๋ณด๊ณ  ๋Š๋ผ๊ณ  ์ƒํ™œํ•˜๋Š” ํ˜„์‹ค ์„ธ๊ณ„์ฒ˜๋Ÿผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•œ ๊ฒƒ์ด ๊ฐ์ฒด์ง€ํ–ฅ์ด๋‹ค.
    • ํ˜„์‹ค ์„ธ๊ณ„๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค๋Š” ์ฆ๊ฑฐ๊ฐ€ ๊ฐ์ฒด๋‹ค.

๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ๊ฒƒ์€ ํ•จ์ˆ˜๋‹ค.

  • Devide and Conquer : ๋ช‡๋งŒ ๋ผ์ธ์˜ ๋ช…๋ น์–ด๋ฅผ ๋…ผ๋ฆฌ์  ๋‹จ์œ„(ํ•จ์ˆ˜)๋กœ ๋‚˜๋ˆ„์–ด ๋ธ”๋กํ™”ํ•ด์„œ ์ž‘์„ฑํ•˜์ž๋Š” ๊ฒƒ
  • ํ•จ์ˆ˜์˜ ๋ชฉ์  : 1. ์ค‘๋ณต์ œ๊ฑฐ, 2. ๋…ผ๋ฆฌ์˜ ๋ถ„ํ• 

๊ทธ ๋’ค๋กœ ๋‚˜์˜จ ํŒŒ๊ฒฉ์  ์ œ์•ˆ์ด ๋ฐ”๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ์ด๋‹ค.

  • ๋ˆˆ์œผ๋กœ ๋ณด์—ฌ์ง€๋Š” ๊ฒƒ, ์†์œผ๋กœ ๋งŒ์ ธ์ง€๋Š” ๊ฒƒ, ๋จธ๋ฆฌ์†์œผ๋กœ ์ƒ์ƒ๋˜๋Š” ๋ชจ๋“  ๊ฒƒ์€ ์‚ฌ๋ฌผ(Object)์ด๋‹ค.

  • "์šฐ๋ฆฌ๊ฐ€ ์ฃผ๋ณ€์—์„œ ์‚ฌ๋ฌผ๋กœ ์ธ์ง€ํ•˜๋Š” ๋ฐฉ์‹๋Œ€๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š๊ฒ ๋Š”๊ฐ€?" โžก๏ธ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ถœ๋ฐœ

  • 0๊ณผ 1๋กœ ๋Œ€๋ณ€๋˜๋Š” ๊ธฐ๊ณ„(์ปดํ“จํ„ฐ)์— ๋งž์ถฐ ์‚ฌ๊ณ ํ•˜๋˜ ๋ฐฉ์‹์„ ๋ฒ„๋ฆฌ๊ณ  ํ˜„์‹ค์„ธ๊ณ„๋ฅผ ์ธ์ง€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์ž๋Š” ๊ฒƒ

  • ์‚ฌ๋ฌผ์ด๋ž€?

    - ์„ธ์ƒ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์€ ์‚ฌ๋ฌผ, ์ฆ‰ ๊ฐ์ฒด(Object)๋‹ค
    - ๊ฐ๊ฐ์˜ ์‚ฌ๋ฌผ์€ ๊ณ ์œ ํ•˜๋‹ค.
    - ์‚ฌ๋ฌผ์€ ์†์„ฑ์„ ๊ฐ–๋Š”๋‹ค.
    - ์‚ฌ๋ฌผ์€ ํ–‰์œ„ํ•œ๋‹ค.
    
  • ์‚ฌ๋ฌผ์„ ๋ถ„๋ฅ˜(class)ํ•ด์„œ ์ดํ•ดํ•˜๋Š” ๊ฒƒ โžก๏ธ ์ธ๊ฐ„์˜ ์ธ์ง€๋ฒ•

    - ์ง๋ฆฝ๋ณดํ–‰์„ ํ•˜๋ฉฐ ๋ง์„ ํ•˜๋Š” ์กด์žฌ๋ฅผ ์‚ฌ๋žŒ์ด๋ผ๊ณ  ๋ถ„๋ฅ˜ํ•œ๋‹ค.
    - ๊ฐ•๋™์›(object), ํ•œํšจ์ฃผ(object), ๊น€์—ฐ์•„(object)๋Š” ๋ชจ๋‘ ์‚ฌ๋žŒ์ด๋ผ๋Š” ๋ถ„๋ฅ˜์— ์†ํ•œ๋‹ค.
    - ๊ฐ์ฒด(object)๋“ค์€ ๋‚˜์ด, ํ‚ค ๋“ฑ์˜ ์†์„ฑ(property)๊ณผ ๋จน๋‹ค, ์ž๋‹ค ๋“ฑ์˜ ํ–‰์œ„(method)๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค.
    
    ์‚ฌ๋žŒ(class๋ช…) ๊ฐ•๋™์›(๊ฐ์ฒด๋ช…)
    ์†์„ฑ๋“ค ๋‚˜์ด, ํ‚ค ๋‚˜์ด:=35, ํ‚ค:=185
    ํ–‰์œ„๋“ค ๋จน๋‹ค, ์ž๋‹ค ๋จน๋‹ค, ์ž๋‹ค

์ง๊ด€์ ์ธ ๊ฐ์ฒด์ง€ํ–ฅ

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

๊ฐ์ฒด ์ง€ํ–ฅ์˜ 4๋Œ€ ํŠน์„ฑ - ์บก! ์ƒ์ถ”๋‹ค

  • ์บก - ์บก์Šํ™”(Encapsulation) : ์ •๋ณด ์€๋‹‰ (information hiding)
  • ์ƒ - ์ƒ์†(Inheritance) : ์žฌ์‚ฌ์šฉ
  • ์ถ” - ์ถ”์ƒํ™”(Abstraction) : ๋ชจ๋ธ๋ง
  • ๋‹ค - ๋‹คํ˜•์„ฑ(Polymorphism) : ์‚ฌ์šฉ ํŽธ์˜

Inheritance๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์“ฐ์ง€๋ง์ž. ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ํฌ๋‹ค.


ํด๋ž˜์Šค vs ๊ฐ์ฒด = ๋ถ•์–ด๋นตํ‹€ vs ๋ถ•์–ด๋นต ???

ํด๋ž˜์Šค ๊ฐ์ฒด๋ช… = new ํด๋ž˜์Šค();
๋ถ•์–ด๋นตํ‹€ ๋ถ•์–ด๋นต = new ๋ถ•์–ด๋นตํ‹€(); // ๋ถ•์–ด๋นตํ‹€์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ๋ถ•์–ด๋นต์ด ๋˜์—ˆ๋‹ค?
  • ๋ถ•์–ด๋นตํ‹€์€ ๋ถ•์–ด๋นต์„ ๋งŒ๋“œ๋Š” ํŒฉํ„ฐ๋ฆฌ์ผ ๋ฟ, ํด๋ž˜์Šค์™€ ๊ฐ์ฒด๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋‹ค.

ํด๋ž˜์Šค์™€ ๊ฐ์ฒด

  • ํด๋ž˜์Šค๋Š” ๋ถ„๋ฅ˜์— ๋Œ€ํ•œ ๊ฐœ๋…์ด์ง€ ์‹ค์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด๋Š” ์‹ค์ฒด์ด๋‹ค.
  • ๋ถ•์–ด๋นตํ‹€๊ณผ ๋ถ•์–ด๋นต์ด๋ผ๋Š” ๋ฉ”ํƒ€ํฌ ๋Œ€์‹  ์•„๋ž˜์˜ ๋ฉ”ํƒ€ํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ž.
ํด๋ž˜์Šค : ๊ฐ์ฒด = ํŽญ๊ท„ : ๋ฝ€๋กœ๋กœ = ์‚ฌ๋žŒ : ๊น€์—ฐ์•„ 

์ถ”์ƒํ™”: ๋ชจ๋ธ๋ง

  • ์ถ”์ƒ : [๋ช…์‚ฌ] [์‹ฌ๋ฆฌ] ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์‚ฌ๋ฌผ์ด๋‚˜ ๊ฐœ๋…์—์„œ ๊ณตํ†ต๋˜๋Š” ํŠน์„ฑ์ด๋‚˜ ์†์„ฑ ๋”ฐ์œ„๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํŒŒ์•…ํ•˜๋Š” ์ž‘์šฉ
  • ์ถ”์ƒํ™” : [๋ช…์‚ฌ] ์ถ”์ƒ์ ์ธ ๊ฒƒ์œผ๋กœ ๋จ. ๋˜๋Š” ๊ทธ๋ ‡๊ฒŒ ๋งŒ๋“ฆ

์ถ”์ƒํ™”๋Š” ๋ชจ๋ธ๋ง์ด๋‹ค

  • ๊ฐ์ฒด์ง€ํ–ฅ์˜ 4๋Œ€ ํŠน์„ฑ์€ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋œ๋‹ค. ๋˜๋Š” ๊ฐ์ฒด

    • ๊ฐ์ฒด: ์„ธ์ƒ์— ์กด์žฌํ•˜๋Š” ์œ ์ผ๋ฌด์ดํ•œ ์‚ฌ๋ฌผ
    • ํด๋ž˜์Šค : ๋ถ„๋ฅ˜, ์ง‘ํ•ฉ, ๊ฐ™์€ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์ด์นญํ•˜๋Š” ๊ฐœ๋…
    • ์ฆ‰, ๊ฐ์ฒด๋ฅผ ํŠน์„ฑ(์†์„ฑ + ๊ธฐ๋Šฅ)์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•ด๋ณด๋‹ˆ ๊ฐ์ฒด๋ฅผ ํ†ต์นญํ•  ์ˆ˜ ์žˆ๋Š” ์ง‘ํ•ฉ์  ๊ฐœ๋…, ์ฆ‰ ํด๋ž˜์Šค(๋ถ„๋ฅ˜)๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.
    • ์˜ˆ์‹œ
      ์‚ฌ๋žŒ ํ™๊ธธ๋™ = new ์‚ฌ๋žŒ();
      • ์‚ฌ๋žŒ์ด๋ผ๋Š” ํด๋ž˜์Šค(๋ถ„๋ฅ˜)๋ฅผ ์ด์šฉํ•ด์„œ ์œ ์ผ๋ฌด์ดํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ•˜๋‚˜์˜ ์‚ฌ๋žŒ(๊ฐ์ฒด)๋ฅผ ๋งŒ๋“ค์–ด ํ™๊ธธ๋™(๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜)๋ผ๋Š” ์ด๋ฆ„์„ ์ง€์–ด์ฃผ์—ˆ๋‹ค.
    • ๊ฐ์ฒด(object) = ํด๋ž˜์Šค(class)์˜ ์ธ์Šคํ„ด์Šค(instance)
  • ๊ฐœ๋ฐœ์ž๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฐฝ์กฐ์ž๊ฐ€ ๋˜๊ณ , ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ ํด๋ž˜์Šค๋ฅผ ๋จผ์ € ์„ค๊ณ„ํ•˜๊ฒŒ ๋œ๋‹ค.

    • ์‚ฌ๋žŒ์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ฃผ๋ณ€์— ๋ณด์ด๋Š” ์‹ค์ฒด๋“ค, ์ฆ‰ ์‚ฌ๋žŒ ๊ฐ์ฒด๋ฅผ ๊ด€์ฐฐํ•ด์„œ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ์ฐพ๋Š”๋‹ค.
      • ํ‚ค, ๋‚˜์ด, ํ˜ˆ์•กํ˜• ๋“ฑ(์†์„ฑ) + ๋จน๋‹ค, ์ž๋‹ค, ์ผํ•˜๋‹ค ๋“ฑ(๋ฉ”์„œ๋“œ)
    • ๋ชจ๋“  ํŠน์„ฑ์„ ๋‚˜์—ดํ•  ํ•„์š”๋Š” ์—†๋‹ค. ์™œ? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ๊ณ„์— ์žˆ๋Š” ํŠน์„ฑ๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ๊ณ„(Context) : ๋‚ด๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์–ด๋””์— ์‚ฌ์šฉ๋  ๊ฒƒ์ธ๊ฐ€?

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒฝ๊ณ„ ๋ณ‘์› ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์€ํ–‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
    ์‚ฌ๋žŒ์ด๋ž€ ์‚ฌ๋žŒ์€ ํ™˜์ž๋‹ค. ์‚ฌ๋žŒ์€ ๊ณ ๊ฐ์ด๋‹ค.
    ํด๋ž˜์Šค ๋ชจ๋ธ๋ง ์†์„ฑ : ์‹œ๋ ฅ, ๋ชธ๋ฌด๊ฒŒ, ํ˜ˆ์•กํ˜•, ํ‚ค
    ๋ฉ”์„œ๋“œ : ๋จน๋‹ค, ์ž๋‹ค, ์šด์ „ํ•˜๋‹ค, ์šด๋™ํ•˜๋‹ค
    ์†์„ฑ : ๋‚˜์ด, ์ง์—…, ์—ฐ๋ด‰
    ๋ฉ”์„œ๋“œ : ์ผํ•˜๋‹ค, ์ž…๊ธˆํ•˜๋‹ค, ์ถœ๊ธˆํ•˜๋‹ค, ์ด์ฒดํ•˜๋‹ค
    • ์ถ”์ƒํ™”๋ž€ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ๋ถ„ํ•ดํ•ด์„œ ๊ด€์ฐฐ์ž๊ฐ€ ๊ด€์‹ฌ์žˆ๋Š” ํŠน์„ฑ๋งŒ ๊ฐ€์ง€๊ณ  ์žฌ์กฐํ•ฉํ•˜๋Š” ๊ฒƒ
      • IT์šฉ์–ด๋ฅผ ์ด์šฉํ•ด ๋ฐ”๊พธ์–ด๋ณธ๋‹ค๋ฉด
    • ์ถ”์ƒํ™”๋ž€ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ๋ถ„ํ•ดํ•ด์„œ ๊ด€์‹ฌ ์˜์—ญ(์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒฝ๊ณ„, Application Boundary)์— ์žˆ๋Š” ํŠน์„ฑ๋งŒ ๊ฐ€์ง€๊ณ  ์žฌ์กฐํ•ฉ ํ•˜๋Š”๊ฒƒ = ๋ชจ๋ธ๋ง
  • ๋ชจ๋ธ : ์‹ค์ œ ์‚ฌ๋ฌผ์„ ์ •ํ™•ํžˆ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋ชฉ์ ์— ๋งž๊ฒŒ ๊ด€์‹ฌ ์žˆ๋Š” ํŠน์„ฑ๋งŒ ์ถ”์ถœํ•ด์„œ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ.

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

    • OOP์˜ ์ถ”์ƒํ™”๋Š” ๋ชจ๋ธ๋ง์ด๋‹ค.
    • ํด๋ž˜์Šค : ๊ฐ์ฒด = ํŽญ๊ท„ : ๋ฝ€๋กœ๋กœ
    • ํด๋ž˜์Šค ์„ค๊ณ„์—์„œ ์ถ”์ƒํ™”๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.
    • ํด๋ž˜์Šค ์„ค๊ณ„๋ฅผ ์œ„ํ•ด์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒฝ๊ณ„๋ถ€ํ„ฐ ์ •ํ•ด์•ผ ํ•œ๋‹ค.
    • ๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ ์ถ”์ƒํ™”์˜ ๊ฒฐ๊ณผ๋Š” ํด๋ž˜์Šค๋‹ค.
  • ์ถ”์ƒํ™”๋ฅผ ๋„“๊ฒŒ ๋ณธ๋‹ค๋ฉด?

    • ์ƒ์†์„ ํ†ตํ•œ ์ถ”์ƒํ™”, ๊ตฌ์ฒดํ™”
    • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ์ถ”์ƒํ™”
    • ๋‹คํ˜•์„ฑ์„ ํ†ตํ•œ ์ถ”์ƒํ™”
  • ์ถ”์ƒํ™” = ๋ชจ๋ธ๋ง = ์ž๋ฐ”์˜ class ํ‚ค์›Œ๋“œ

    ํด๋ž˜์Šค ๊ฐ์ฒด_์ฐธ์กฐ_๋ณ€์ˆ˜ = new ํด๋ž˜์Šค(); // ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด ๊ทธ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’(ํฌ์ธํ„ฐ)์„ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜์— ํ• ๋‹น

์ถ”์ƒํ™”์™€ T๋ฉ”๋ชจ๋ฆฌ

  • ์ฅ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•ด๋ณด์ž.

    • ํด๋ž˜์Šค ์„ค๊ณ„(๋ชจ๋ธ๋ง)์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ถ”์ƒํ™”๋‹ค.

    • ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฒฝ๊ณ„ ๋‚ด์—์„œ ๊ด€์‹ฌ ์žˆ๋Š” ํŠน์„ฑ๋“ค๋งŒ ๋ฝ‘์•„์˜ค์ž.

    • ์ถ”์ƒํ™”์˜ ๊ฒฐ๊ณผ๋ฌผ = ๋ชจ๋ธ = 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()๋ฉ”์„œ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค. ์ฝ”๋“œ ์‹คํ–‰ ์˜์—ญ์— ์‹คํ–‰๋˜์–ด "๋ฏธํ‚ค ์ฐ์ฐ"์„ ์ถœ๋ ฅํ•  ๊ฒƒ.

  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(Garbage Collector) : ์•„๋ฌด๋„ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์“ฐ๋ ˆ๊ธฐ๋กœ ์ธ์ง€ํ•˜๊ณ  ์ˆ˜๊ฑฐํ•ด ๊ฐ„๋‹ค.

    • mickey = null : mickey๋Š” ๋” ์ด์ƒ ํž™์˜์—ญ์˜ Mouse๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š”๋‹ค. GC๊ฐ€ ๋‹ค๋…€๊ฐ€๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„์—์„œ Mouse๊ฐ์ฒด๋Š” ์‚ฌ๋ผ์ง„๋‹ค.

ํด๋ž˜์Šค ๋ฉค๋ฒ„ vs ๊ฐ์ฒด ๋ฉค๋ฒ„ = static ๋ฉค๋ฒ„ vs ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„

  • ํด๋ž˜์Šค ๋ฉค๋ฒ„ = static ๋ฉค๋ฒ„ = ์ •์  ๋ฉค๋ฒ„
    • ํด๋ž˜์Šค ๋ฉค๋ฒ„๋“ค์€ staticํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๊ณ  T๋ฉ”๋ชจ๋ฆฌ์˜ static ์˜์—ญ์— ์ƒ์ฃผํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ static(์ •์ )๋ฉค๋ฒ„๋ผ๊ณ  ํ•œ๋‹ค.
  • ๊ฐ์ฒด ๋ฉค๋ฒ„ = ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„
    • ๊ฐ์ฒด ๋ฉค๋ฒ„๋“ค ๊ฐ์ฒด๊ฐ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ด๋ฏ€๋กœ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„๋ผ๊ณ ๋„ํ•œ๋‹ค.
ํด๋ž˜์Šค ์„ค๊ณ„
ํด๋ ˆ์Šค ๋ฉค๋ฒ„(์ •์  ๋ฉค๋ฒ„) ํด๋ž˜์Šค ๋ฉค๋ฒ„ ์†์„ฑ(์ •์  ์†์„ฑ)
ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ฉ”์„œ๋“œ(์ •์  ๋ฉ”์„œ๋“œ)
๊ฐ์ฒด ๋ฉค๋ฒ„ ๊ฐ์ฒด ๋ฉค๋ฒ„ ์†์„ฑ
๊ฐ์ฒด ๋ฉค๋ฒ„ ๋ฉ”์„œ๋“œ
  • ์ •์  ์†์„ฑ : ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์งˆ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ.

    • ์ด ์™ธ์˜ ๊ฒฝ์šฐ์—” ์ •๋‹นํ•œ ๋…ผ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์จ์•ผํ•œ๋‹ค.
  • ์ •์  ๋ฉ”์„œ๋“œ : ๊ฐ์ฒด๋“ค์˜ ์กด์žฌ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ

    • ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์— ์†ํ•ด์žˆ์œผ๋ฉฐ, JVM ๊ตฌ๋™ ์‹œ ์Šคํƒœํ‹ฑ ์˜์—ญ์— ๋ฐ”๋กœ ๋ฐฐ์น˜๋œ๋‹ค.
    • ex) main(), ์ •์  ๋ณ€์ˆ˜ ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ(getter), ์ •์  ๋ณ€์ˆ˜ ์„ค์ •์ž ๋ฉ”์„œ๋“œ(setter)

    ์‹ค๋ฌด์—์„œ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์„ฑ ๋ฉ”์„œ๋“œ๋ฅผ ์ฃผ๋กœ ์ •์  ๋ฉ”์„œ๋“œ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.

  • ์„ธ๊ฐ€์ง€ ๋ณ€์ˆ˜ ์œ ํ˜•

    • ์ง€์—ญ ๋ณ€์ˆ˜(local ๋ณ€์ˆ˜)
      • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„๋กœ ์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ์“ฐ๋ ˆ๊ธฐ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.
      • ํ•œ ์ง€์—ญ์—์„œ๋งŒ ์“ฐ๋Š” ๋ณ€์ˆ˜์ด๋‹ค.
      • ์‚ฌ๋Š” ๊ณณ : ์Šคํƒ ํ”„๋ ˆ์ž„ ์˜์—ญ
    • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜(instance ๋ณ€์ˆ˜)
      • ๋ณ„๋„์˜ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ค€๋‹ค.
      • ๊ฐ์ฒด ์•ˆ์—์„œ ๋‹ค์ˆ˜์˜ ๊ฐ์ฒด ๋ฉ”์„œ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ณต์œ  ๋ณ€์ˆ˜์ด๋‹ค.
      • ์‚ฌ๋Š” ๊ณณ : ํž™ ์˜์—ญ
    • ํด๋ž˜์Šค ๋ณ€์ˆ˜(static ๋ณ€์ˆ˜)
      • ๋ณ„๋„์˜ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ค€๋‹ค.
      • ์ „์—ญ ๋ณ€์ˆ˜๋กœ์„œ ํ”„๋กœ๊ทธ๋žจ ์–ด๋””์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ณต์œ  ๋ณ€์ˆ˜์ด๋‹ค.
      • ์‚ฌ๋Š” ๊ณณ : ์Šคํƒœํ‹ฑ ์˜์—ญ
    • ๊ณต์œ  ๋ณ€์ˆ˜๋Š” ๋ณ„๋„์˜ ์ดˆ๊ธฐํ™”๊ฐ€ ํ•„์š”์—†์ด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค.
      • ๊ฐ์ฒด ๋ฉค๋ฒ„๋Š” ์ƒ์„ฑ์ž, ์ •์  ๋ฉค๋ฒ„๋Š” ์ •์  ์‹คํ–‰ ์˜์—ญ์„ ํ†ตํ•ด ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.
        • ํ•˜์ง€๋งŒ ๋ˆ„๊ฐ€ ์ดˆ๊ธฐํ™”ํ•ด์•ผํ•œ๋‹ค๊ณ  ๊ทœ์ •ํ•  ์ˆ˜ ์—†๋‹ค.
      • ์ง€์—ญ ๋ณ€์ˆ˜๋Š” ํ•œ ์ง€์—ญ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๊ณ  ์†Œ๋ฉธ๋˜๋Š” ๋ณ€์ˆ˜์ด๊ธฐ์— ๊ทธ ์ง€์—ญ์—์„œ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋งž๋‹ค.

์ƒ์† : ์žฌ์‚ฌ์šฉ + ํ™•์žฅ

  • ์ƒ์† : ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ์ƒ์†์€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํŠน์„ฑ์„ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์ƒ์†(ํŠน์„ฑ ์ƒ์†)์„ ํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ํ•„์š”ํ•œ ํŠน์„ฑ์„ ์ถ”๊ฐ€, ์ฆ‰ ํ™•์žฅํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ.

    • ๋ถ€๋ชจ ํด๋ž˜์Šค - ์ž์‹ ํด๋ž˜์Šค ๋ณด๋‹ค ์ƒ์œ„ ํด๋ž˜์Šค - ํ•˜์œ„ ํด๋ž˜์Šค ๋˜๋Š” ์Šˆํผ ํด๋ž˜์Šค - ์„œ๋ธŒํด๋ž˜์Šค ๋กœ ํ‘œํ˜„ํ•˜์ž.
    • ์ƒ์œ„ ํด๋ž˜์Šค ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ์ถ”์ƒํ™”, ์ผ๋ฐ˜ํ™” ๋๋‹ค๊ณ  ๋งํ•˜๋ฉฐ, ํ•˜์œ„ ํด๋ž˜์Šค ์ชฝ์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ๊ตฌ์ฒดํ™”, ํŠน์ˆ˜ํ™” ๋๋‹ค๊ณ  ๋งํ•œ๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ์˜ ์ƒ์†์€ ์กฐ์ง๋„๋‚˜ ๊ณ„์ธต๋„๊ฐ€ ์•„๋‹Œ ๋ถ„๋ฅ˜๋„๋ผ๋Š” ์‚ฌ์‹ค์„ ๊ธฐ์–ตํ•ด๋ผ.

ํฌ์œ ๋ฅ˜๋Š” ๋™๋ฌผ์˜ ํŠน์„ฑ์„ ํ™•์žฅํ–ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ณ ๋ž˜๋Š” ํฌ์œ ๋ฅ˜์˜ ํŠน์„ฑ์„ ํ™•์žฅํ–ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค๋‹ค.
    • ์ด๋Š” ์ƒ์† ๊ด€๊ณ„์—์„œ ๋ฐ˜๋“œ์‹œ ๋งŒ์กฑํ•ด์•ผํ•˜๋Š” ๋ฌธ์žฅ์ด๋‹ค.
    • ๋”ธ์€ ์•„๋ฒ„์ง€๋‹ค?? (๊ดด์ดํ•˜๋‹ค.)
      ์•„๋ฒ„์ง€ ์˜ํฌ์•„๋น  = 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 ์‚ฌ๋žŒ
  • 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(์ธํ„ฐํŽ˜์ด์Šค ๋ถ„ํ•  ์›์น™)

์ƒ์†๊ณผ T๋ฉ”๋ชจ๋ฆฌ

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)

  • ์บก์Šํ™”๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ์„ ๋ฌถ๋Š” ๊ฒƒ์ด๋‹ค.
  • ๊ฐ์ฒด๊ฐ€ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์™ธ๋ถ€์— ๊ฐ์ถ˜๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ ์‹œ ์™ธ๋ถ€์˜ ์˜ํ–ฅ ์—†์ด ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.
    • ์ฆ‰, ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์—๊ฒŒ ์—ฐ์‡„์ ์ธ ๋ณ€๊ฒฝ ์ „ํŒŒ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ฒŒ ๋œ๋‹ค.

์ถœ์ฒ˜ : ์ตœ๋ฒ”๊ท ์˜ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธ

  • ์ •๋ณด์€๋‹‰(information hiding)์ด๋ผ๊ณ  ํ•˜๋ฉด ์ ‘๊ทผ ์ œ์–ด์ž(private, default, protected, public)๊ฐ€ ์Šค์ณ์ง€๋‚˜๊ฐ„๋‹ค.

๊ฐ์ฒด ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ์ œ์–ด์ž

  • public : ๋ชจ๋‘๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • protected : ์ƒ์† / ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด์˜ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • default : ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด์˜ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ๊ฐ€๋Šฅ
  • private : ๋ณธ์ธ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์ƒ์†์„ ๋ฐ›์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ฐ์ฒด ๋ฉค๋ฒ„๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ ‘๊ทผํ•ด์•ผํ•œ๋‹ค.
  • ์ •์  ๋ฉค๋ฒ„๋Š” ํด๋ž˜์Šค๋ช….์ •์ ๋ฉค๋ฒ„ ํ˜•์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ๋ณต์‚ฌ

  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜๋Š” ๊ฐ’์„ ๊ฐ’ ์ž์ฒด๋กœ ํŒ๋‹จํ•œ๋‹ค.
  • ์ฐธ์กฐ ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜๋Š” ๊ฐ’์„ ์ฃผ์†Œ, ์ฆ‰ ํฌ์ธํ„ฐ๋กœ ํŒ๋‹จํ•œ๋‹ค.
  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ, ์ฐธ์กฐ ์ž๋ฃŒํ˜• ๋ณ€์ˆ˜๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ผ์€ ๊ฐ™๋‹ค.
    • ์ฆ‰, ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด์„œ ๋„˜๊ฒจ์ค€๋‹ค.

์ •๋ฆฌ - ์ž๋ฐ” ํ‚ค์›Œ๋“œ์™€ OOP 4๋Œ€ ํŠน์„ฑ

  • class, extends, new, private, protected, public, static ๋“ฑ
  • ๊ธฐ์–ตํ•ด์•ผํ•  ๊ฒƒ : ์บก! ์ƒ์ถ”๋‹ค