10.2. 프로그램언어 자바(Java)의 오버라이딩과 오버로딩

프로그램언어 자바(Java)에서의 오버라이딩의 정의와 용법

자바(Java) 프로그래밍 언어에서의 오버라이딩(Overriding)은 상속 관계에 있는 클래스들 간에 발생하는 중요한 개념입니다. 오버라이딩은 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하여 사용하는 것을 말합니다. 이를 통해 자식 클래스는 부모 클래스의 메소드를 자신에 맞게 수정하거나 확장할 수 있습니다.

오버라이딩을 사용하기 위해서는 다음과 같은 규칙을 따라야 합니다:

  1. 오버라이딩할 메소드는 부모 클래스에서 선언되어야 합니다.
  2. 오버라이딩할 메소드는 부모 클래스의 메소드 시그니처(이름, 매개변수 타입, 반환 타입)와 동일해야 합니다.
  3. 접근 제어자는 부모 클래스의 메소드보다 더 넓은 범위로 변경할 수 있습니다.
  4. 부모 클래스의 메소드가 final이나 static으로 선언된 경우에는 오버라이딩할 수 없습니다.

아래는 간단한 예제 코드를 통해 오버라이딩의 사용법을 보여줍니다:


class Animal {
    public void makeSound() {
        System.out.println("동물이 소리를 만듭니다.");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.makeSound(); // "동물이 소리를 만듭니다."

        Dog dog = new Dog();
        dog.makeSound(); // "멍멍!"
    }
}

위 예제에서 Animal 클래스의 makeSound 메소드를 Dog 클래스에서 오버라이딩하여 재정의하였습니다. 따라서 Dog 클래스의 인스턴스를 생성하고 makeSound 메소드를 호출하면 “멍멍!”이 출력됩니다.

프로그램언어 자바(Java)에서의 오버로딩의 정의와 용법

자바(Java) 프로그래밍 언어에서의 오버로딩(Overloading)은 같은 이름을 가진 메소드나 생성자를 여러 개 정의하는 것을 말합니다. 이때, 각각의 메소드나 생성자는 서로 다른 매개변수를 가지고 있어야 합니다. 오버로딩은 메소드나 생성자의 이름은 같지만 매개변수의 개수, 타입, 순서 중 하나 이상이 달라야 합니다. 이를 통해 동일한 이름으로 다양한 상황에 대응할 수 있습니다.

오버로딩을 사용하면 코드의 가독성을 높일 수 있고, 유사한 기능을 하는 메소드들을 하나의 이름으로 통일하여 관리할 수 있습니다. 또한, 메소드 이름을 기억하기 쉽게 만들어주고, 개발자가 메소드를 호출할 때 편의성을 제공합니다.

아래는 자바에서의 오버로딩의 예제 코드입니다. 두 개의 메소드가 동일한 이름으로 정의되어 있지만 매개변수의 타입이나 개수가 다르기 때문에 오버로딩이 성립합니다.


public class OverloadingExample {

    public void printNumber(int num) {
        System.out.println("정수: " + num);
    }

    public void printNumber(double num) {
        System.out.println("실수: " + num);
    }

    public static void main(String[] args) {
        OverloadingExample example = new OverloadingExample();
        example.printNumber(10);
        example.printNumber(3.14);
    }
}

위의 예제 코드에서는 `printNumber` 메소드가 정수형 매개변수를 받는 버전과 실수형 매개변수를 받는 버전 두 가지가 오버로딩되어 있습니다. 메인 메소드에서 각각의 메소드를 호출할 때 전달하는 매개변수의 타입에 따라 적절한 오버로딩된 메소드가 호출됩니다.

프로그램언어 자바(Java)에서의 오버라이딩과 오버로딩의 차이점

자바(Java) 프로그래밍 언어에서의 오버라이딩(Overriding)과 오버로딩(Overloading)은 객체지향 프로그래밍의 중요한 개념입니다.

오버라이딩은 상위 클래스에서 이미 정의된 메소드를 하위 클래스에서 동일한 시그니처(메소드 이름, 매개변수 타입, 반환 타입)로 다시 정의하는 것을 말합니다. 이를 통해 하위 클래스는 상위 클래스의 메소드를 재정의하여 자신에 맞게 동작하도록 할 수 있습니다.

오버로딩은 같은 이름의 메소드지만 매개변수의 개수나 타입이 다른 여러 메소드를 정의하는 것을 말합니다. 컴파일러는 전달된 매개변수의 개수나 타입에 따라 적절한 메소드를 호출할 수 있도록 합니다.

아래는 간단한 예제 코드를 통해 오버라이딩과 오버로딩의 차이를 보여줍니다.


class Animal {
    public void makeSound() {
        System.out.println("동물이 소리를 내고 있습니다.");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍!");
    }

    public void makeSound(String sound) {
        System.out.println(sound);
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.makeSound(); // "동물이 소리를 내고 있습니다."

        Dog dog = new Dog();
        dog.makeSound(); // "멍멍!"
        dog.makeSound("왈왈!"); // "왈왈!"
    }
}

위의 예제에서 Animal 클래스의 makeSound 메소드를 Dog 클래스에서 오버라이딩하여 재정의하였습니다. 또한 Dog 클래스에는 makeSound 메소드를 오버로딩하여 매개변수가 있는 버전을 추가로 정의하였습니다.

프로그램언어 자바(Java)에서의 오버라이딩과 오버로딩의 활용 예시

자바(Java) 프로그래밍 언어에서의 오버라이딩(Overriding)과 오버로딩(Overloading)은 객체지향 프로그래밍의 핵심 개념 중 하나로, 메소드의 다형성을 구현하는 데 사용됩니다.

오버라이딩(Overriding)

오버라이딩은 부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니처(메소드 이름, 매개변수 타입 및 개수)를 가지고 재정의하는 것을 말합니다. 이를 통해 자식 클래스는 부모 클래스의 메소드를 재정의하여 자신에 맞게 동작하도록 할 수 있습니다.

오버라이딩의 활용 예시

다음은 오버라이딩의 간단한 예시입니다. 부모 클래스인 Animal과 이를 상속받는 Dog 클래스가 있을 때, Animal 클래스의 sound() 메소드를 Dog 클래스에서 오버라이딩하여 짖는 소리를 출력하도록 할 수 있습니다.


class Animal {
    public void sound() {
        System.out.println("동물 소리");
    }
}

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

오버로딩(Overloading)

오버로딩은 같은 메소드 이름을 가지지만 매개변수의 타입, 개수, 순서가 다른 여러 메소드를 정의하는 것을 말합니다. 컴파일러는 메소드 호출 시 전달된 인자에 맞는 메소드를 선택하여 실행합니다.

오버로딩의 활용 예시

다음은 오버로딩의 간단한 예시입니다. Calculator 클래스에 add() 메소드를 정수형과 실수형 매개변수를 받는 두 가지 버전으로 오버로딩하여 구현할 수 있습니다.


class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

프로그램언어 자바(Java)에서의 오버라이딩과 오버로딩의 장단점

자바(Java) 프로그래밍 언어에서의 오버라이딩(Overriding)과 오버로딩(Overloading)은 객체지향 프로그래밍의 중요한 개념입니다.

오버라이딩(Overriding)의 장단점

오버라이딩은 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것을 말합니다. 이를 통해 다형성을 구현할 수 있습니다.

  • 장점:
    • 유지보수가 용이하며 코드의 재사용성을 높일 수 있습니다.
    • 다형성을 지원하여 유연한 프로그래밍이 가능합니다.
  • 단점:
    • 잘못된 오버라이딩으로 인해 예기치 않은 동작이 발생할 수 있습니다.
    • 오버라이딩이 지나치게 많아지면 코드의 가독성이 떨어질 수 있습니다.

오버라이딩 예제 코드


class Animal {
    public void makeSound() {
        System.out.println("동물이 소리를 만듭니다.");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

오버로딩(Overloading)의 장단점

오버로딩은 같은 이름의 메소드를 매개변수의 타입 또는 개수를 다르게 하여 여러 개 정의하는 것을 말합니다.

  • 장점:
    • 메소드 이름을 일관성 있게 유지하면서 다양한 상황에 대응할 수 있습니다.
    • 가독성을 높이고 사용자 편의성을 제공합니다.
  • 단점:
    • 오버로딩이 지나치게 많아지면 메소드의 혼란을 야기할 수 있습니다.
    • 컴파일러가 오버로딩된 메소드를 선택하는 규칙을 이해해야 합니다.

오버로딩 예제 코드


class Calculator {
    public int add(int a, int b) {
        return a + b;
    }

    public double add(double a, double b) {
        return a + b;
    }
}

Leave a Comment