관리 메뉴

ruriruriya

[Java] μžλ°” μ˜€λ²„λ‘œλ”© vs μ˜€λ²„λΌμ΄λ”© - μ½”λ“œ 닀쀑 ν™œμš© 및 상속 ꡬ쑰 이해 λ³Έλ¬Έ

πŸͺJava

[Java] μžλ°” μ˜€λ²„λ‘œλ”© vs μ˜€λ²„λΌμ΄λ”© - μ½”λ“œ 닀쀑 ν™œμš© 및 상속 ꡬ쑰 이해

루리야ㅑ 2024. 2. 21. 17:03
λ°˜μ‘ν˜•

μžλ°” ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ˜€λ²„λ‘œλ”©(Overloading)κ³Ό μ˜€λ²„λΌμ΄λ”©(Overriding)은 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ μ€‘μš”ν•œ κ°œλ…μ΄λ‹€.
λ‘˜ λ‹€ λ‹€ν˜•μ„±(polymorphism)을 κ΅¬ν˜„ν•˜λŠ” 방법 쀑 ν•˜λ‚˜μ΄μ§€λ§Œ μ„œλ‘œ λ‹€λ₯Έ λͺ©μ κ³Ό λ™μž‘μ„ κ°–κ³  μžˆλ‹€.
 

1. μ˜€λ²„λ‘œλ”©(Overloading)

  • λ©”μ†Œλ“œλ‚˜ μƒμ„±μžμ˜ 이름은 κ°™μ§€λ§Œ, λ§€κ°œλ³€μˆ˜μ˜ νƒ€μž…, 개수, μˆœμ„œκ°€ λ‹€λ₯Έ μ—¬λŸ¬ 버전을 μ •μ˜ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.
  • μ˜€λ²„λ‘œλ”©μ„ μ‚¬μš©ν•˜λ©΄ 같은 μ΄λ¦„μ˜ λ©”μ†Œλ“œλ₯Ό μ—¬λŸ¬ 개 μ •μ˜ν•˜μ—¬ λ‹€μ–‘ν•œ 상황에 맞게 ν˜ΈμΆœν•  수 μžˆλ‹€.
  • μ»΄νŒŒμΌλŸ¬κ°€ λ©”μ†Œλ“œ 호좜 μ‹œ 인자의 νƒ€μž…μ„ 보고 μ μ ˆν•œ λ²„μ „μ˜ λ©”μ†Œλ“œλ₯Ό κ²°μ •ν•œλ‹€.

μƒμ„±μž μ˜€λ²„λ‘œλ”©

public class Person {
    private String name;
    private int age;

    // κΈ°λ³Έ μƒμ„±μž
    public Person() {
        this.name = "Unknown";
        this.age = 0;
    }

    // 이름을 λ°›λŠ” μƒμ„±μž
    public Person(String name) {
        this.name = name;
        this.age = 0;
    }

    // 이름과 λ‚˜μ΄λ₯Ό λ°›λŠ” μƒμ„±μž
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

 

String 클래슀의 substring λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©

public class SubstringExample {
    public static void main(String[] args) {
        String str = "Hello, World!";
        
        // μ‹œμž‘ μΈλ±μŠ€λΆ€ν„° λκΉŒμ§€μ˜ λ¬Έμžμ—΄ λ°˜ν™˜
        String sub1 = str.substring(7); // "World!"
        
        // μ‹œμž‘ μΈλ±μŠ€λΆ€ν„° μ§€μ •λœ 인덱슀 μ΄μ „κΉŒμ§€μ˜ λ¬Έμžμ—΄ λ°˜ν™˜
        String sub2 = str.substring(7, 12); // "World"
    }
}

 

Math 클래슀의 max λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©

public class MaxExample {
    public static void main(String[] args) {
        int max1 = Math.max(5, 10); // 10
        double max2 = Math.max(3.5, 7.8); // 7.8
    }
}

 

2. μ˜€λ²„λΌμ΄λ”©(Overriding)

  • μƒμœ„ ν΄λž˜μŠ€κ°€ 가지고 μžˆλŠ” λ©”μ†Œλ“œλ₯Ό ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ 같은 μ΄λ¦„μ˜ λ©”μ†Œλ“œλ‘œ λ‹€μ‹œ μ •μ˜ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.
  • 상속 κ΄€κ³„μ—μ„œ λ°œμƒν•˜λ©°, ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μƒμœ„ 클래슀의 λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ν•˜μ—¬ μžμ‹ 클래슀의 λ…νŠΉν•œ λ™μž‘μ„ κ΅¬ν˜„ν•  수 μžˆλ‹€.
  • 동적 바인딩(dynamic binding)을 톡해 λ©”μ†Œλ“œ 호좜 μ‹œ μ‹€μ œ 객체의 νƒ€μž…μ— 따라 싀행될 λ©”μ†Œλ“œκ°€ κ²°μ •λœλ‹€.

μ˜ˆμ‹œ μ½”λ“œ
Animal 클래슀의 sound λ©”μ†Œλ“œκ°€ Dog ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ”©λ˜μ—ˆκ³ ,
λ”°λΌμ„œ Dog κ°μ²΄μ—μ„œ sound λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ "Dog barks"κ°€ 좜λ ₯λœλ‹€.
즉, κΈ°λŠ₯을 λ³΅μ‚¬ν•˜μ—¬ μš©λ„μ— 맞게 μ»€μŠ€ν…€ν•˜λŠ” 것이닀.

class Animal {
    public void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("Dog barks");
    }
}

 

3. μ˜€λ²„λ‘œλ”©κ³Ό μ˜€λ²„λΌμ΄λ”© 비ꡐ

  • μ˜€λ²„λ‘œλ”©μ€ λ©”μ†Œλ“œ 이름이 κ°™κ³  λ§€κ°œλ³€μˆ˜κ°€ λ‹€λ₯Έ μ—¬λŸ¬ λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•˜λŠ” 것이며, μ˜€λ²„λΌμ΄λ”©μ€ μƒμœ„ 클래슀의 λ©”μ†Œλ“œλ₯Ό ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ λ‹€μ‹œ μ •μ˜ν•˜λŠ” 것이닀.
  • μ˜€λ²„λ‘œλ”©μ€ 정적 바인딩(static binding)에 μ˜ν•΄ 컴파일 μ‹œκ°„μ— κ²°μ •λ˜μ§€λ§Œ, μ˜€λ²„λΌμ΄λ”©μ€ 동적 바인딩에 μ˜ν•΄ μ‹€ν–‰ μ‹œκ°„μ— κ²°μ •λœλ‹€.
  • μ˜€λ²„λ‘œλ”©μ€ 같은 클래슀 λ‚΄μ—μ„œλ§Œ μ μš©λ˜μ§€λ§Œ, μ˜€λ²„λΌμ΄λ”©μ€ 상속 κ΄€κ³„μ—μ„œλ§Œ μ μš©λœλ‹€.
  • μ˜€λ²„λ‘œλ”©μ€ λ°˜ν™˜ νƒ€μž…μ΄λ‚˜ μ ‘κ·Ό μ œμ–΄μž λ³€κ²½ 등을 ν¬ν•¨ν•œ μ‹œκ·Έλ‹ˆμ²˜(λ©”μ†Œλ“œ 이름, λ§€κ°œλ³€μˆ˜ νƒ€μž… 및 μˆœμ„œ)κ°€ 달라야 ν•œλ‹€. ν•˜μ§€λ§Œ μ˜€λ²„λΌμ΄λ”©μ€ λ©”μ†Œλ“œ μ‹œκ·Έλ‹ˆμ²˜κ°€ μ •ν™•νžˆ μΌμΉ˜ν•΄μ•Ό ν•œλ‹€.
λ°˜μ‘ν˜•