2 ๋ถ„ ์†Œ์š”

๐Ÿ“š JAVA


๐Ÿ“š Overriding & Overloading

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

Overriding ๋ž€ ๋ฌด์—‡์ผ๊นŒ?

์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์ƒ์†๋˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ ๋ฉ”์„œ๋“œ๋„ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์ƒ์†๋˜์–ด ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์ด ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด๋‹ค.
๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฎ์–ด์”Œ์šฐ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค

์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ํด๋ž˜์Šค ๊ฐ„์— ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•˜๋Š” ๊ธฐ์ˆ 

๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ๊ฐ™๋”๋ผ๋„ ์–ด๋–ค ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ƒ์— ๋”ฐ๋ผ ์ถœ๋ ฅ๋˜๋Š” ๊ฐ’์ด ๋‹ฌ๋ผ์ง„๋‹ค.

Overriding ์˜ ์กฐ๊ฑด

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

Overriding ์˜ ์žฅ์ 

  • ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋กœ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๊ณ  ๊ฐ์ฒด๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ€๋…์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ์˜ค๋ฅ˜์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.

Overriding ์‹ค์Šต

OverridingParent

public class OverridingParent {
    String name;

    // ๋ถ€๋ชจ ๋ฉ”์„œ๋“œ
    void introduce(){
        System.out.println("์ €๋Š” "+this.name+ "์ž…๋‹ˆ๋‹ค.");
    }
}

Overriding

public class Overriding extends OverridingParent{
        public String name_m;
        public int age;

    @Override
    // ๋ถ€๋ชจ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜
        public void introduce() {
        System.out.println("์ €๋Š” "+ this.name_m + "์ด๊ณ  ๋‚˜์ด๋Š” " + this.age + "์ž…๋‹ˆ๋‹ค.");
    }
}

OverridingTest

public class OverridingTest {
    public static void main(String[] args) {

        // ์ž์‹ ํด๋ž˜์Šค ๊ฐ์ฒด ์ƒ์„ฑ
        Overriding ov = new Overriding();

        ov.name_m = "jack";
        ov.age = 17;

        // ์ž์‹ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
        ov.introduce();

    }
}

์‹คํ–‰๊ฒฐ๊ณผ

์ €๋Š” jack์ด๊ณ  ๋‚˜์ด๋Š” 17์ž…๋‹ˆ๋‹ค.

์˜ค๋ฒ„๋กœ๋”ฉ ( Overloading )

Overloading ๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๊ฐ€์ง€๋ฉด์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์œ ํ˜•๊ณผ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ 

๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜ ์ถ”๊ฐ€ ์ž‘์„ฑ
๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜, ์ˆœ์„œ, ํƒ€์ž…์— ๋”ฐ๋ผ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ๋„ ์žˆ์ง€๋งŒ ์ƒ์„ฑ์ž ์˜ค๋ฒ„๋กœ๋”ฉ๋„ ์žˆ๋‹ค.
์ƒ์„ฑ์ž๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๊ฐ๊ฐ ์ •์˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

Overloading ์˜ ์กฐ๊ฑด

  • ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜, ์ˆœ์„œ๊ฐ€ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค.
  • ๋ฆฌํ„ด ํƒ€์ž…์€ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ฐ™๊ณ  ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์˜ค๋ฒ„๋กœ๋”ฉ์€ ์„ฑ๋ฆฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

Overloading ์˜ ์žฅ์ 

  • ๊ฐ€๋…์„ฑ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ์˜ค๋ฅ˜์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๋ณด๊ณ  ๊ฐ™์€ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์ ˆ์•ฝ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ex) ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” println() ๋„ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ด๋‹ค.

Overloading ์‹ค์Šต

Overloading class

public class Overloading {

    // ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
     void sum(){
        System.out.println("๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์Œ");
    }

    // ๊ธฐ๋ณธ
     void sum(int a, int b){
         System.out.println(a+b);
    }

    // ๋งค๊ฐœ๋ณ€์ˆ˜ ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ
     void sum(int a, int b, int c){
         System.out.println(a+b);
    }


    // ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ
     void sum(double a, double b){
         System.out.println(a+b);
    }

}


OverloadingTest class

public class OverloadingTest {
    public static void main(String[] args) {
        Overloading ov = new Overloading();

        // ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” sum ํ˜ธ์ถœ
        ov.sum();

        // sum(double a, double b) ํ˜ธ์ถœ
        ov.sum(1.5, 3.2);

        // sum(int a, int b) ํ˜ธ์ถœ
        ov.sum(1,2);

        // sum(int a, int b, int c) ํ˜ธ์ถœ
        ov.sum(2,3,4);

    }
}

์‹คํ–‰๊ฒฐ๊ณผ

๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์Œ
4.7
3
5

์˜ค๋ฒ„๋ผ์ด๋”ฉ ( Overriding ) vs ์˜ค๋ฒ„๋กœ๋”ฉ ( Overloading ) ๋งˆ๋ฌด๋ฆฌ

๋‹คํ˜•์„ฑ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์š”๊ตฌํ•˜๋Š” ์•„์ฃผ ์ค‘์š”ํ•œ ํŠน์„ฑ์ด๋‹ค.
๋‹คํ˜•์„ฑ์ด๋ž‘ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋‚˜ ํ•จ์ˆ˜๊ฐ€ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ์˜ค๋ฒ„๋กœ๋”ฉ์ด ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹คํ˜•์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ ,
์˜ค๋ฒ„๋กœ๋”ฉ์€ ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋กœ ์—ฌ๋Ÿฌ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋‹คํ˜•์„ฑ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์žˆ์–ด ํšจ์œจ์„ฑ์„ ์•„์ฃผ ๋†’์—ฌ์ฃผ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ๊ฐœ๋…์˜ ์ค‘์š”ํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
๋”ฐ๋ผ์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ์˜ค๋ฒ„๋กœ๋”ฉ๋„ ์ค‘์š”ํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
๋ฉด์ ‘์— ์ž์ฃผ ์งˆ๋ฌธํ•˜๋Š” ๊ธฐ์ดˆ์ ์ธ ์ง€์‹ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ž˜ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค !!





๐Ÿ‘ ์ฐธ์กฐ
https://wooono.tistory.com/262
https://programmingnote.tistory.com/29

ํƒœ๊ทธ: , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: