ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA 오버라이딩(Overriding)과 오버로딩(Overloading) 비교
    전산학/프로그래밍 2024. 8. 1. 20:08
    728x90
    반응형

    오버라이딩(Overriding)과 오버로딩(Overloading)은 자바에서 다형성을 구현하는 두 가지 주요 방법입니다. 이 두 개념을 이해하기 위해 예제 코드를 통해 설명하겠습니다.

    ### 오버라이딩(Overriding)

    오버라이딩은 부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하는 것입니다. 이를 통해 자식 클래스는 부모 클래스의 메서드를 자신의 방식으로 동작하게 할 수 있습니다.

    ```java
    // 부모 클래스
    class Animal {
        void sound() {
            System.out.println("동물이 소리를 냅니다.");
        }
    }

    // 자식 클래스
    class Dog extends Animal {
        @Override
        void sound() {
            System.out.println("개가 멍멍 짖습니다.");
        }
    }

    public class Main {
        public static void main(String[] args) {
            Animal myAnimal = new Animal();
            Animal myDog = new Dog();
            
            myAnimal.sound(); // 출력: 동물이 소리를 냅니다.
            myDog.sound();    // 출력: 개가 멍멍 짖습니다.
        }
    }
    ```

    위의 예제에서, `Dog` 클래스는 `Animal` 클래스의 `sound` 메서드를 오버라이딩하여 개가 짖는 소리를 출력하도록 재정의했습니다. `@Override` 애너테이션은 메서드 오버라이딩임을 명시적으로 나타내기 위해 사용됩니다.

    ### 오버로딩(Overloading)

    오버로딩은 같은 이름의 메서드를 매개변수의 타입이나 개수에 따라 여러 개 정의하는 것입니다. 이는 동일한 작업을 수행하지만 입력 값이 다를 때 유용합니다.

    ```java
    class MathOperations {
        // 두 개의 정수를 더하는 메서드
        int add(int a, int b) {
            return a + b;
        }

        // 세 개의 정수를 더하는 메서드
        int add(int a, int b, int c) {
            return a + b + c;
        }

        // 두 개의 실수를 더하는 메서드
        double add(double a, double b) {
            return a + b;
        }
    }

    public class Main {
        public static void main(String[] args) {
            MathOperations math = new MathOperations();
            
            System.out.println(math.add(2, 3));         // 출력: 5
            System.out.println(math.add(2, 3, 4));      // 출력: 9
            System.out.println(math.add(2.5, 3.5));     // 출력: 6.0
        }
    }
    ```

    위의 예제에서, `MathOperations` 클래스는 `add` 메서드를 오버로딩하여 두 개의 정수, 세 개의 정수, 두 개의 실수를 더하는 세 가지 메서드를 정의했습니다. 이렇게 하면 `add` 메서드 이름을 유지하면서 다양한 입력 타입과 개수에 대응할 수 있습니다.

    ### 정리

    - **오버라이딩(Overriding)**: 부모 클래스의 메서드를 자식 클래스에서 재정의. 실행 시간에 메서드가 결정됨(런타임 다형성).
    - **오버로딩(Overloading)**: 같은 이름의 메서드를 다른 매개변수로 여러 번 정의. 컴파일 시간에 메서드가 결정됨(컴파일타임 다형성).

    이 두 개념은 객체 지향 프로그래밍에서 중요한 역할을 하며, 유연하고 재사용 가능한 코드를 작성하는 데 도움을 줍니다.

    728x90
    반응형
공기업 전산 필기 후기 + 공기업 전산학 지식 모음