๐Ÿ“š Study/Java

์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding)

kkh1902 2022. 3. 16. 21:52
728x90
๋ฐ˜์‘ํ˜•
์ฐฝ์˜์ ์ธ ์ƒ์†
 
์ƒ์†์€ ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ํ•˜์œ„ ํด๋ž˜์Šค์—๊ฒŒ ๋ฌผ๋ ค์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ฃผ์–ด์ง„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ? ๋งŒ์•ฝ ๊ทธ๋ž˜์•ผ ํ•œ๋‹ค๋ฉด ์ œ์•ฝ์ด ์ƒ๋‹นํ•  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ ์ œ์•ฝ์„ ๋ฒ—์–ด๋‚˜๋ ค๋ฉด ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘๋ฐฉ๋ฒ•์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฐ ๋งฅ๋ฝ์—์„œ ๋„์ž…๋œ ๊ธฐ๋Šฅ์ด ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(overriding)์ด๋‹ค.
 
๋งŒ์•ฝ ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ๋ฌผ๋ ค ๋ฐ›์€ ๋ฉ”์†Œ๋“œ sum์„ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ข€ ๋” ์นœ์ ˆํ•˜๊ฒŒ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?
class SubstractionableCalculator extends Calculator {

    public void sum() {

        System.out.println("์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” " +(this.left + this.right)+"์ž…๋‹ˆ๋‹ค.");
    }
}   
๋ฉ”์†Œ๋“œ sum์ด  SubstractionableCalculator์— ์ถ”๊ฐ€ ๋˜์—ˆ๋‹ค. ์‹คํ–‰๊ฒฐ๊ณผ๋Š” c1.sum์ด ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ sum์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค. ํ•˜์œ„ ํด๋ž˜์Šค ์ž…์žฅ์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ž€ ๋งํ•˜์ž๋ฉด ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์ƒ์˜ ํด๋ž˜์Šค์™€ ๋™์ผํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋ฌผ๋ ค ๋ฐ›์€ ๊ธฐ๋ณธ ๋™์ž‘ ๋ฐฉ๋ฒ•์„ ๋ณ€๊ฒฝํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ์ด๊ฒƒ์„ ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(overriding)์ด๋ผ๊ณ  ํ•œ๋‹ค.
 
์˜ค๋ฒ„๋ผ์ด๋”ฉ์˜ ์กฐ๊ฑด
 
์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”์†Œ๋“œ avg๋Š” ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ข€ ๋” ๋‹ค์–‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฉ”์†Œ๋“œ avg๊ฐ€ ํ™”๋ฉด์— ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋Œ€์‹  ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•ด์ฃผ๋ฉด ์ข‹๊ฒ ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ๊ณ ์ณ๋ดค๋‹ค.

    public int avg() {

        return (this.left + this.right)/2;
    }
    

์ด๊ฒƒ์€ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•œ๋‹ค.

 
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    The return type is incompatible with Calculator.avg()
 
    at org.opentutorials.javatutorials.overriding.example1.SubstractionableCalculator.avg(CalculatorDemo.java:26)
    at org.opentutorials.javatutorials.overriding.example1.CalculatorDemo.main(CalculatorDemo.java:40)
 
overriding์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ด ํ˜•์‹์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค. 
 
์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑ์‹œ์ผœ์•ผ ํ•œ๋‹ค.
  1. ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„
  2. ๋ฉ”์†Œ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆซ์ž์™€ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ทธ๋ฆฌ๊ณ  ์ˆœ์„œ
  3. ๋ฉ”์†Œ๋“œ์˜ ๋ฆฌํ„ด ํƒ€์ž…
 
์œ„์™€ ๊ฐ™์ด ๋ฉ”์†Œ๋“œ์˜ ํ˜•ํƒœ๋ฅผ ์ •์˜ํ•˜๋Š” ์‚ฌํ•ญ๋“ค์„ ํ†ตํ„ธ์–ด์„œ ๋ฉ”์†Œ๋“œ์˜ ์„œ๋ช…(signature)๋ผ๊ณ  ํ•œ๋‹ค. ์ฆ‰ ์œ„์˜ ์—๋Ÿฌ๋Š” ๋ฉ”์†Œ๋“œ๋“ค ๊ฐ„์˜ ์„œ๋ช…์ด ๋‹ฌ๋ผ์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋‹ค.
 
์ด๋ ‡๊ฒŒํ•ด์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ธ ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ดค๋‹ค.
728x90
๋ฐ˜์‘ํ˜•