Java

์ƒ์†, ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ, ๊ฐ€์ƒ ๋ฉ”์„œ๋“œ, ๋‹คํ˜•์„ฑ

์กฐ๋ฐˆ๋ฐ 2022. 3. 1. 04:51

๐Ÿ’ก ์ƒ์† Inheritance

: ์ด๋ฏธ ๊ตฌํ˜„๋œ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•„์„œ ์†์„ฑ/๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค

: ์ƒ์† ํ•˜๋Š” ํด๋ž˜์Šค == ์ƒ์œ„ ํด๋ž˜์Šค , ๋ถ€๋ชจ ํด๋ž˜์Šค, super class, parent class : ์ผ๋ฐ˜์ ์ธ ์˜๋ฏธ (ํฌ์œ ๋ฅ˜)

  ์ƒ์† ๋ฐ›๋Š” ํด๋ž˜์Šค == ํ•˜์œ„ ํด๋ž˜์Šค, ์ž์‹ ํด๋ž˜์Šค, subclass, child class : ๊ตฌ์ฒด์ ์ธ ์˜๋ฏธ (์‚ฌ๋žŒ)

: class B extends A {     // B->A Bํด๋ž˜์Šค๊ฐ€ Aํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค, Aํด๋ž˜์Šค๊ฐ€ Bํด๋ž˜์Šค์—๊ฒŒ ์ƒ์†ํ•œ๋‹ค.

  }

: ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ + ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ฐ–๋„๋ก ์ž‘์„ฑํ•œ๋‹ค

 

cf) ํ•ฉ์„ฑ

 

๐Ÿ’ก ์ ‘๊ทผ ์ œํ•œ์ž ๊ฐ€์‹œ์„ฑ

 

๐Ÿ”Ž ์ƒ์† : ํด๋ž˜์Šค ์ƒ์„ฑ ๊ณผ์ •

: ํ•˜์œ„ ํด๋ž˜์Šค ์ƒ์„ฑ ๋  ๋•Œ ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ๋จผ์ € ์ƒ์„ฑ๋œ๋‹ค

: ์ƒ์œ„ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  -> ํ•˜์œ„ํด๋ž˜์Šค ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋จ 

* ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์—์„œ๋Š” ๋ฌด์กฐ๊ฑด ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•œ๋‹ค

: ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š”๊ฒฝ์šฐ ์ƒ์œ„ํด๋ž˜์Šค ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด super(); ๋„ฃ์–ด์คŒ (ํ•˜์œ„ํด๋ž˜์Šค ์ƒ์„ฑ์ž์—)

: ๋งŒ์•ฝ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ์ƒ์„ฑ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค

  ( == ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ)

  -> super(์ƒ์œ„ํด๋ž˜์Šค์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’); or ํ•˜์œ„ํด๋ž˜์Šค ์ƒ์„ฑ์ž๋„ ์ƒ์œ„ํด๋ž˜์Šค์™€ ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ›๊ณ  super(๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ’);

: super(); == ์ƒ์œ„์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋ฅผ  ํด๋ž˜์Šค ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค

 

๐Ÿ”Ž ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

: ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๊ณตํ†ต์ ์ธ ์š”์†Œ๋ฅผ ๋ชจ์œผ๊ณ  ๋‚˜๋จธ์ง€ ํด๋ž˜์Šค๋Š” ์ด๋ฅผ ์ƒ์†๋ฐ›์€ ๋‹ค์Œ ๊ฐ๊ฐ ํ•„์š”ํ•œ ํŠน์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„

: ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ์—ฌ๋Ÿฌ ํŠน์„ฑ์„ ํ•œ๊บผ๋ฒˆ์— ๊ตฌํ˜„์‹œ ๋งŽ์€ ์ฝ”๋“œ ๋‚ด์— ๋งŽ์€ if๋ฌธ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค 

: ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…๊ณผ ๊ตฌ์ฒด์ ์ธ ๊ฐœ๋…๊ณผ์˜ ๊ด€๊ณ„

: ํ•œ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์†Œ์œ ํ•œ ๊ด€๊ณ„

 

๐Ÿ’ก ์—…์บ์ŠคํŒ… : ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ๋ฌต์‹œ์  ํ˜•๋ณ€ํ™˜

: ์ƒ์œ„ ํด๋ž˜์Šค ํ˜•์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ํ•˜์œ„ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค

: ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์˜ ํƒ€์ž…์„ ๋‚ดํฌํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ๋ฌต์‹œ์  ํ˜•๋ณ€ํ™˜์ด ๊ฐ€๋Šฅ

ex) Customer vc = new VIPCustomer();

: VIPCustomer() ์ƒ์„ฑ์ž์˜ ํ˜ธ์ถœ๋กœ ์ธ์Šคํ„ด์Šค๋Š” ๋ชจ๋‘ ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ, ํƒ€์ž…์ด Customer์ด๋ฏ€๋กœ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š”

๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋Š” Customer์˜ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋‹ค

 

๐Ÿ”Ž IS-A ๊ด€๊ณ„

Animal dog = new Dog(); // Dog is a Animal

: ์ƒ์†๊ด€๊ณ„์— ์žˆ์„ ๋•Œ ์ž์‹ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ž๋ฃŒํ˜•์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

* ๋‹ค๋งŒ Dog๊ฐ์ฒด๋ฅผ Animal์ž๋ฃŒํ˜•์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, Dog ํด๋ž˜์Šค์— ์กด์žฌํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹คAnimal ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค* ๋ถ€๋ชจ ๊ฐ์ฒด๊ฐ€ ์ž์‹ ํด๋ž˜์Šค์˜ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค (์ž์‹๋งŒ ๋ถ€๋ชจ ํด๋ž˜์Šค ์ž๋ฃŒํ˜•์œผ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ)

 

๐Ÿ’ก ๋‹ค์šด ์บ์ŠคํŒ…

: ์›๋ž˜ํ˜•์œผ๋กœ ๋ณต๊ท€

: ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ํ˜• ๋ณ€ํ™˜ ๋˜๋Š” ๊ฒƒ์€ ๋ฌต์‹œ์ ์œผ๋กœ ์ด๋ค„์ง

: ์›๋ž˜ ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž…์„ ์ฒดํฌํ•˜๋Š” ์˜ˆ์•ฝ์–ด instanceof

 

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

: ๋ถ€๋ชจํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ž์‹ํด๋ž˜์Šค๊ฐ€ ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ๋˜๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ํ–‰์œ„ (๋ฉ”์„œ๋“œ ๋ฎ์–ด์“ฐ๊ธฐ)

* ์ž์‹ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค

: ์ƒ์œ„ ํด๋ž˜์Šค์— ์ •์˜ ๋œ ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜์œ„ ํด๋ž˜์Šค์™€ ๊ธฐ๋Šฅ์ด ๋งž์ง€ ์•Š๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ 

  ๊ฐ™์€ ์ด๋ฆ„, ๊ฐ™์€ ๋ฐ˜ํ™˜๊ฐ’, ๊ฐ™์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์žฌ์ •์˜ํ•œ๋‹ค.

 

* ์˜ค๋ฒ„๋กœ๋”ฉ : ์ด๋ฆ„ ๋˜‘๊ฐ™์€๊ฒŒ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ๋Š”๊ฑฐ 

  ์˜ค๋ฒ„๋ผ์ด๋”ฉ : ๋ฎ์–ด์ผ๋‹ค

 

๐Ÿ’ก ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ Method Overloading

: ๊ฐ™์€ ํด๋ž˜์Šค ์•ˆ์— ์ž…๋ ฅํ•ญ๋ชฉ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๋™์ผํ•œ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

class ZooKeeper {
    void feed(Tiger tiger) {  // ํ˜ธ๋ž‘์ด๊ฐ€ ์˜ค๋ฉด ์‚ฌ๊ณผ๋ฅผ ๋˜์ ธ ์ค€๋‹ค.
        System.out.println("feed apple");
    }

    void feed(Lion lion) {  // ์‚ฌ์ž๊ฐ€ ์˜ค๋ฉด ๋ฐ”๋‚˜๋‚˜๋ฅผ ๋˜์ ธ์ค€๋‹ค.
        System.out.println("feed banana");
    }
}

 

๐Ÿ’ก ๊ฐ€์ƒ ๋ฉ”์„œ๋“œ

: ํ”„๋กœ๊ทธ๋žจ์—์„œ ์–ด๋–ค ๊ฐ์ฒด์˜ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ์˜ ์ฐธ์กฐ๋Š” ๊ทธ ํƒ€์ž…์— ๋”ฐ๋ผ ์ด๋ค„์ง„๋‹ค

: ํƒ€์ž…๊ณผ ์ƒ๊ด€์—†์ด ์‹ค์ œ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์›๋ฆฌ

+ : ์žฌ์ •์˜ ๋˜์–ด์ง€์ง€ ์•Š์œผ๋ฉด ์ƒ์†๋ฐ›์€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š”๋ฐ ์žฌ์ •์˜ ๋˜๋ฉด ์ƒˆ๋กญ๊ฒŒ ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค

ex) Customer vc = new VIPCustomer();     

     vc.calcPrice(10000);   

=> ํƒ€์ž…์€ Customer์ด์ง€๋งŒ, ์‹ค์ œ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค์˜ VIPCustomer ํด๋ž˜์Šค์˜ calcPrice()๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋จ

 

๐Ÿ’ก ๋‹คํ˜•์„ฑ

: ๊ฐ€์ƒ ๋ฉ”์„œ๋“œ์— ์˜ํ•ด ๋‹คํ˜•์„ฑ ๊ตฌํ˜„: ์ฝ”๋“œํ•œ์ค„๋กœ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์„ ํ•˜๋Š” ๊ฒƒ

: ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์€ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ

: ๊ฐ ํด๋ž˜์Šค๋งˆ๋‹ค ๊ฐ™์€ ์ด๋ฆ„์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•จ

: ์ƒ์œ„ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋œ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์— ๋Œ€์ž…๋˜์–ด ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค

 

=> ๋ฉ”์„œ๋“œ ์žฌ์ •์˜

=> ์ƒ์†๋ฐ›์•˜๋‹ค๊ณ  ๊ฐ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ๊ฐ ์žฌ์ •์˜๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋จ

=> ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜• == ์ƒ์œ„ ํด๋ž˜์Šค

 

* instanceof : ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ํŠน์ • ํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ธ์ง€๋ฅผ ์กฐ์‚ฌ

* ์ž์‹ ํด๋ž˜์Šค์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋Š” ์–ธ์ œ๋‚˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

* ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์ž๋ฃŒํ˜• ํƒ€์ž…์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๊ฒƒ == ๋‹คํ˜•์„ฑ