Myo-Kyeong Tech Blog

[ JAVA ] JAVA 객체 지향 프로그래밍 개념 정리 - 오버로딩(Overloading) 과 오버라이딩(Overriding) 본문

Programming/Java

[ JAVA ] JAVA 객체 지향 프로그래밍 개념 정리 - 오버로딩(Overloading) 과 오버라이딩(Overriding)

myo-kyeong 2023. 6. 16. 16:50
728x90

 

 

 

오버로딩(Overloading)

  • 같은 이름의 메서드를 여러 개 가지면서 매개변수의 유형과 개수가 각각 다른 것을 의미
  • 매개변수에 따라 동일한 이름의 메서드가 다르게 작동하도록 하는 기능

예를 들어, '더하기' 함수를 만든다고 가정해보겠습니다. 이 함수는 두 개의 정수를 더하는 기능, 두 개의 실수를 더하는 기능, 또는 두 개의 문자열을 연결하는 기능 등을 수행할 수 있습니다. 함수의 이름은 같지만, 매개변수의 유형과 개수가 다르므로 이를 '오버로딩' 이라고 합니다. 

또한, 자주 사용하는 'System.out.println' 메서드도 매개변수에 따라 서로 다른 동작을 하는 오버로딩의 전형적인 예입니다.

System.out.println(1);        // 정수 출력
System.out.println(1.0);      // 실수 출력
System.out.println("Hello");  // 문자열 출력

 

오버라이딩(Overriding)

  • 상속 관계에 있는 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것
  • 부모 클래스에서 정의한 메서드를 자식 클래스가 필요에 따라 수정해서 사용하도록 하는 기능

예를 들어,  Student 클래스가 있다고 가정해 보겠습니다. 

public class Student {
    private String registrationNumber;

    public Student(String regNum) {
        this.registrationNumber = regNum;
    }

    // equals 메서드 오버라이딩
    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Student))
            return false;   

        Student otherStudent = (Student) obj;
        return this.registrationNumber.equals(otherStudent.registrationNumber);
    }
}

위의 코드에서 Student 클래스는 equals 메서드를 오버라이딩하였습니다. Object 클래스의 기본 equals 메서드는 두 객체가 동일한 객체인지(즉, 메모리 상에서 같은 위치에 있는지) 확인합니다. 그러나 Student 클래스에서는 equals 메서드를 재정의하여 두 학생이 같은 등록 번호를 가지고 있는지 확인하도록 했습니다.

이제 두 Student 객체의 equals 메서드를 호출하면, 그들이 같은 등록 번호를 가지고 있는지를 확인할 수 있습니다.

 

Student student1 = new Student("123");
Student student2 = new Student("123");

System.out.println(student1.equals(student2));  // true

이처럼, 자바에서는 equals, hashCode, toString 등의 메서드를 자주 오버라이딩하여 클래스에 맞는 동작을 정의합니다. 

오버로딩과 오버라이딩은 모두 메서드의 이름을 재사용하는 기법이지만, 그 목적과 사용되는 상황은 크게 다릅니다. 오버로딩은 같은 이름의 메서드가 다양한 매개변수를 처리할 수 있게 해줌으로써 코드를 간결하게 하며, 오버라이딩은 상속받은 메서드의 기능을 필요에 따라 변경하거나 확장하게 해줍니다.

728x90