Study/Java

[TIL] ์ƒ์†

hong- 2022. 5. 12. 14:04

๐Ÿ”Ž OOP์˜ 4๋Œ€ ํŠน์ง•

๐Ÿ™Œ๐Ÿป  ์ƒ์†

 - ๊ธฐ์กด์˜ ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ

 - ๋‘ ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจ์™€ ์ž์‹์œผ๋กœ ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์ž์‹์€ ๋ถ€๋ชจ์˜ ๋ชจ๋“  ๋ฉค๋ฒ„๋ฅผ ์ƒ์†๋ฐ›์Œ

 - ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„์ธ ํ•„๋“œ, ๋ฉ”์„œ๋“œ, ์ด๋„ˆํด๋ž˜์Šค๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ๋ณด๋ƒ„


๐Ÿ’ก ์ƒ์†์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

  - ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉ ํ•˜์—ฌ ์ ์€ ์–‘์˜ ์ฝ”๋“œ๋กœ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ

  - ์ฝ”๋“œ ์ค‘๋ณต ์ œ๊ฑฐ ๊ฐ€๋Šฅ

  - ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ๋ชจ์–‘์œผ๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹คํ˜•์„ฑ ํ‘œํ˜„ ๊ฐ€๋Šฅ


๐Ÿ“ ์ƒ์† ์‚ฌ์šฉ : extends

ํด๋ž˜์Šค๋ช… extends ์ƒ์œ„ํด๋ž˜์Šค๋ช…

- ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์ƒ์† → ๊ณตํ†ต๋œ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ๊ฐ๊ฐ ์„ ์–ธํ•˜์ง€ ์•Š์•„๋„ ๋จ

- ํ•˜์œ„ ํด๋ž˜์Šค ํ•„๋“œ = ์ƒ์œ„ ํด๋ž˜์Šค ํ•„๋“œ + ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ƒˆ๋กœ์šด ํ•„๋“œ

- ํ•˜์œ„ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ = ์ƒ์œ„ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ + ํ•˜์œ„ ํด๋ž˜์Šค ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ

- ์ž๋ฐ”๋Š” ๋‹จ์ผ ์ƒ์†๋งŒ ํ—ˆ์šฉ (but ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๋‹ค์ค‘ ์ƒ์†๊ณผ ๋น„์Šทํ•œ ํšจ๊ณผ ๊ฐ€๋Šฅ )

   → ์ฆ‰, extends ๋’ค์—๋Š” ํ•˜๋‚˜์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋งŒ ์™€์•ผ ํ•จ ! class ๊ฐ•์•„์ง€ extends ์ƒ๋ฌผ, ๋™๋ฌผ {} ์ด ๋ถˆ๊ฐ€ !!


๐Ÿ™Œ๐Ÿป  ํฌํ•จ ๊ด€๊ณ„

  - ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค ํƒ€์ž…์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ


๐Ÿ’ก ์ƒ์†์ธ์ง€ ํฌํ•จ์ธ์ง€ ํŒ๋ณ„ ๊ธฐ์ค€

 : ํด๋ž˜์Šค ๊ฐ„ ๊ด€๊ณ„๊ฐ€ '~์€ ~์ด๋‹ค (is-a)' ๊ด€๊ณ„์ธ์ง€ '~์€ ~์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค (has-a)' ๊ด€๊ณ„์ธ์ง€๋ฅผ ํŒ๋ณ„ !

  → ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ A์ด๊ณ  ์ž์‹ ํด๋ž˜์Šค๊ฐ€ B์ผ ๋•Œ,

        'A๋Š” B์ด๋‹ค'๊ฐ€ ์„ฑ๋ฆฝํ•˜๋ฉด ์ƒ์† !!!!!!!!        vs          'A๋Š” B๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค'๊ฐ€ ์„ฑ๋ฆฝํ•˜๋ฉด ํฌํ•จ !!!!!!!!


๐Ÿ‘๐Ÿป  ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

  - ๋ฉ”์„œ๋“œ ์žฌ์ •์˜๋ผ๊ณ ๋„ ํ•จ : ๋ฎ์–ด ์”Œ์šฐ๊ธฐ

  - ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ํ•„์š”์— ๋”ฐ๋ผ ์ƒ์†๋œ ๋ถ€๋ชจ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

  - ๋™์ผํ•œ ์œ„์น˜์— ๋™์ผํ•œ ํŒŒ์ผ์„ ์ €์žฅํ•  ๋•Œ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ๊ฐœ๋…

  - ๋ฉ”์„œ๋“œ์˜ ํ—ค๋”๋Š” ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ๋ฐ”๋””๋งŒ ๊ต์ฒด


๐Ÿ’ก ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์˜ 3๊ฐ€์ง€ ์กฐ๊ฑด

   1๏ธโƒฃ  ๋ฉ”์„œ๋“œ์˜ ์„ ์–ธ๋ถ€(๋ฉ”์„œ๋“œ ์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฐ˜ํ™˜ํƒ€์ž…)์ด ์ƒ์œ„ ํด๋ž˜์Šค์™€ ์ผ์น˜

   2๏ธโƒฃ  ์ ‘๊ทผ ์ œ์–ด์ž๊ฐ€ ์ƒ์œ„ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ณด๋‹ค ๋„“๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ ํ•จ

         (๋ถ€๋ชจ๊ฐ€ protected์ด๋ฉด ์ž์‹์€ protected๊ฑฐ๋‚˜ public)

   3๏ธโƒฃ  ์˜ˆ์™ธ๋Š” ์ƒ์œ„ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ณด๋‹ค ๋งŽ์ด ์„ ์–ธํ•  ์ˆ˜ ์—†์Œ


 ๐Ÿ’ก ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ vs ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

   - ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ : ๊ฐ™์€ ํด๋ž˜์Šค ์•ˆ์—์„œ ์ด๋ฏธ ์ •์˜๋œ ๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ ํ›„ ์‚ฌ์šฉ

   - ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ : ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ์˜ ๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ ํ›„ ์‚ฌ์šฉ


๐Ÿ‘๐Ÿป  super ํ‚ค์›Œ๋“œ์™€ super()

  - ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์กด์žฌ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์ƒ์† ๊ด€๊ณ„๋ฅผ ์ „์ œ๋กœ ํ•จ

 โ–ช๏ธ super : ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด

  - ์ƒ์œ„ ํด๋ž˜์Šค ๋ฉค๋ฒ„์™€ ์ž์‹ ์˜ ๋ฉค๋ฒ„๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

  - super.๋ณ€์ˆ˜ ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋ฅผ ๋ถˆ๋Ÿฌ์˜ด

 

 โ–ช๏ธ super() : ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž

  - ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

  - ์ƒ์„ฑ์ž ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ฐ˜๋“œ์‹œ ์ฒซ ์ค„์— ์ž‘์„ฑ


๐Ÿ‘๐Ÿป  Object ํด๋ž˜์Šค

  - ์ž๋ฐ”์˜ ํด๋ž˜์Šค ์ƒ์†์—์„œ ์ตœ์ƒ์œ„์— ์œ„์น˜ํ•œ ์ƒ์œ„ ํด๋ž˜์Šค

  - ์ž๋ฐ”์˜ ๋ชจ๋“  ํด๋ž˜์Šค๋Š” Object ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์Œ 

  - ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์•„๋ฌด ์ƒ์†์„ ๋ฐ›์ง€ ์•Š์•˜๋‹ค๋ฉด ์ž๋™์œผ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ Object ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋„๋ก ํ•จ


  ๐Ÿ“Object ํด๋ž˜์Šค์˜ ๋Œ€ํ‘œ์ ์ธ ๋ฉ”์†Œ๋“œ

   1) toString() : ๊ฐ์ฒด ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅ (String)

   2) equals(Object obj) : ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ’ ๋น„๊ต (boolean)

   3) hashCode() : ๊ฐ์ฒด์˜ ์œ„์น˜์ •๋ณด๋ฅผ Hashtable ๋˜๋Š” HashMap์—์„œ ๋™์ผ ๊ฐ์ฒด ํŒ๋‹จ (int)

   4) wait() : ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ ์ผ์‹œ ์ •์ง€ (void)

   5) notify() : ์ผ์‹œ ์ •์ง€ํ•œ ์“ฐ๋ ˆ๋“œ ์žฌ๋™์ž‘ (void)