Java : Overloading & Overriding

m_ngyeong·2024년 10월 16일
0

Java

목록 보기
11/14
post-thumbnail

☕️ Java


Overloading

메서드 오버로딩동일한 이름을 공유하지만 서로 다른 인수를 갖는 여러 메서드를 설계할 수 있는 프로그래밍 개념이다. 즉, 같은 클래스 내에서 같은 이름의 메소드를 여러 개 정의하는 것이다. 각 메서드는 서로 다른 매개변수 목록을 가져야 한다. 이는 코드의 가독성과 유연성을 높여준다.

오버로딩은 메서드의 매개변수의 개수, 유형 또는 둘 다의 변경이 가능하다. 메서드의 이름은 같지만 매개변수의 개수나 유형이 다르면 오버로딩된 것이다. 다른 인수를 전달하여 같은 이름의 다른 메서드를 호출할 수 있다.

What is a method signature?

메서드 시그니처는 메서드의 이름과 인수로 구성된 메서드의 고유 식별자이다.

public int sum(int a, int b)
  • sum : 메서드 이름
  • a, b: 정수인 매개변수

메서드가 호출되면 컴파일러는 시그니처를 비교하여 어떤 메소드가 호출되었는지 식별한다.

Example:

public class MathUtils {
    // 두 정수의 합을 반환하는 메서드
    public int add(int a, int b) {
        return a + b;
    }

    // 세 정수의 합을 반환하는 메서드
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // 두 실수의 합을 반환하는 메서드
    public double add(double a, double b) {
        return a + b;
    }

    public static void main(String[] args) {
        MathUtils math = new MathUtils();

        System.out.println(math.add(5, 10));       // 15
        System.out.println(math.add(5, 10, 15));   // 30
        System.out.println(math.add(5.5, 10.5));   // 16.0
    }
}

Overriding

메서드 오버라이딩은 상속 관계에 있는 클래스에서 부모 클래스의 메서드를 자식 클래스가 재정의하는 것이다. 이는 다형성을 구현하여 객체 지향 프로그래밍의 유연성을 높여준다.

Example:

// 부모 클래스
class Animal {
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

// 자식 클래스
class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Animal(); // 부모 클래스의 객체
        Animal myDog = new Dog(); // 자식 클래스의 객체

        myAnimal.makeSound(); // Animal makes a sound
        myDog.makeSound(); // Dog barks
    }
}

오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점:

Overloading:

  • 같은 클래스 내에서 같은 이름의 메서드를 매개변수 목록을 다르게 하여 여러 번 정의.
  • 컴파일 시에 결정 (정적 바인딩).
  • 리턴 타입은 같아도 되고 달라도 됨.

Overriding:

  • 상속 관계에서 부모 클래스의 메서드를 자식 클래스가 재정의.
  • 런타임 시에 결정 (동적 바인딩).
  • 리턴 타입은 같아야 함.
    Java 5 이후에는 공변 반환 타입을 허용하여 자식 타입의 반환도 허용.


참고문헌,
https://hyperskill.org/learn/step/3525

profile
사용자 경험 향상과 지속적인 성장을 추구하는 프론트엔드 개발자 ʚȉɞ

0개의 댓글