๐Ÿจ [JAVA] ํ˜•๋ณ€ํ™˜ ๐Ÿจ

์ฐธ์กฐ ๋ฐ์ดํ„ฐ ํ˜•๋ณ€ํ™˜

์ฐธ์กฐ ๋ฐ์ดํ„ฐํ˜•

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

(1) ์ฐธ์กฐ ๋ฐ์ดํ„ฐ ํ˜•๋ณ€ํ™˜ ์กฐ๊ฑด

  • ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ํด๋ž˜์Šค ๊ฐ„์—๋งŒ ํ˜•๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค
  • ์„œ๋กœ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ํด๋ž˜์Šค ๊ฐ„์—๋Š” ํ˜•๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ƒ์œ„ ํด๋ž˜์Šค ์ฐธ์กฐ ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜๋Š” ํ•˜์œ„ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•˜์œ„ ํด๋ž˜์Šค ์ฐธ์กฐ ๋ฐ์ดํ„ฐ ๋ณ€์ˆ˜๋Š” ์ƒ์œ„ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค.

๊ฐ€. ์—…์บ์ŠคํŒ…

  • ํŠน์ • ๊ฐ์ฒด๊ฐ€ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ํ˜•์—์„œ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํ˜•์œผ๋กœ ํ˜•๋ณ€ํ™˜ ๋˜๋Š” ๊ฒƒ
  • ํ˜•๋งŒ ์ •ํ™•ํ•˜๋‹ค๋ฉด ๋ฌต์‹œ์ ์œผ๋กœ ํ˜•๋ณ€ํ™˜๋œ๋‹ค.(์—…์บ์ŠคํŒ…)
    -> ์ฆ‰ ์ˆ˜ํผํด๋ž˜์Šค๋ฅผ ์„œ๋ธŒํด๋ž˜์Šค๋กœ ํ˜•๋ณ€ํ™˜ ์‹œํ‚ฌ ์‹œ์—๋Š” ๋ฌต์‹œ์ ์œผ๋กœ ํ˜•๋ณ€ํ™˜(์—…์บ์ŠคํŒ…)๋œ๋‹ค๋Š” ๊ฒƒ

ํ˜•์‹

  • ์Šˆํผ ํด๋ž˜์Šค ๊ฐ์ฒด = new ์„œ๋ธŒํด๋ž˜์Šค();
class Person{}
class Student extends Person{}
...
Person p = new Sudent(); //์ˆ˜ํผ ํด๋ž˜์Šค ๊ฐ์ฒด = new ์„œ๋ธŒํด๋ž˜์Šค
Student s = new Person(); //์˜ค๋ฅ˜ ๋ฐœ์ƒ -> ์„œ๋ธŒํด๋ž˜์Šค๋Š” ์ˆ˜ํผํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋‹ค. 

๋‚˜. ๋‹ค์šด์บ์ŠคํŒ…

  • ์—…์บ์ŠคํŒ… ํ•œ ๊ฒƒ์„ ๋‹ค์‹œ ์›๋ž˜์˜ ํ˜•์œผ๋กœ ๋ณต๊ตฌ์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ
  • ์—…์บ์ŠคํŒ… ๋œ ๊ฒƒ๋งŒ ๋‹ค์šด์บ์ŠคํŒ… ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค์šด ์บ์ŠคํŒ…์€ ๊ฐ•์ œ ์บ์ŠคํŒ…(๋ช…์‹œ์ )์„ ์›์น™์œผ๋กœ ํ•œ๋‹ค.

ํ˜•์‹

  • ์„œ๋ธŒํด๋ž˜์Šค ๊ฐ์ฒด = (์„œ๋ธŒํด๋ž˜์Šค)์ˆ˜ํผํด๋ž˜์Šค๊ฐ์ฒด;
class Student extends Person{};
...
Person p = new Student(); //์—…์บ์ŠคํŒ… ํ•œ ํ›„ 
Student s = (Student)p; //๋‹ค์šด ์บ์ŠคํŒ… ๊ฐ€๋Šฅ 

ํด๋ž˜์Šค๊ฐ„์˜ ์ƒ์† ๊ด€๊ณ„์™€ ๊ฐ์ฒด ์ƒ์„ฑ

Bus , Truck, Tax ๋ฅผ ๋ชจ๋‘ Car์„ ์ƒ์† ๋ฐ›์„ ์‹œ

Car mycar = new Car();
Bus mybus = new Bus();
Truck mytruck = new Truck();
Tax mytax = new Tax();

mycar = mybus //์ปดํŒŒ์ผ ๊ฐ€๋Šฅ (์—…์บ์ŠคํŒ…)
mybus = mycar //์ปดํŒŒ์ผ ์˜ค๋ฅ˜ (์ƒ์† ๊ด€๊ณ„ X)
mybus = mytruck //์ปดํŒŒ์ผ ์˜ค๋ฅ˜ (์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ์ฐธ์กฐ ๋ฐ›์œผ๋ฏ€๋กœ)
mybus = (Bus)mycar //์ปดํŒŒ์ผ ๊ฐ€๋Šฅ, ์‹คํ–‰์˜ค๋ฅ˜ -> ์—…์บ์ŠคํŒ…X

//mybus = (Bus)mycar๊ฐ€ ์‹คํ–‰ ๋ ๋ผ๋ฉด ์—…์บ์ŠคํŒ…์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 
Car mycar = new Bus(); //์—… ์บ์ŠคํŒ…
Bus mybus = (Bus)mycar; //๋‹ค์šด ์บ์ŠคํŒ…

๋‹ค. ๊ฐ€์ƒ ๋ฉ”์†Œ๋“œ

์ƒ์œ„ ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฒ•

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

์ฐธ๊ณ ์‚ฌํ•ญ

instance of ์—ฐ์‚ฐ์ž

  • ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ž๋กœ ์šฐ๋ณ€์˜ ๊ฐ์ฒด์™€ ์ขŒ๋ณ€์˜ ๊ฐ์ฒด ํƒ€์ž… ๋น„๊ตํ•˜์—ฌ ์„œ๋กœ ๊ฐ™์œผ๋ฉด true๋ฐ˜ํ™˜, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false ๋ฐ˜ํ™˜

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ