Post

오버로딩과 오버라이딩

오버로딩(overloading)과 오버라이딩(overriding)

  • 비슷하게 생겼지만 완전히 다른 개념이다.
  • 하지만 공통점이 하나 있는데, 그것은 둘 다 자바의 다형성을 지원하는 방식들이라는 것이다.
  • 또한 둘 다 적용 대상이 메서드이다.


오버로딩(overloading)이란?

같은 클래스 내에서 같은 이름의 메서드를 여러 개 가지면서 매개변수의 타입과 개수를 다르게 하여 정의하는 것이다.
  • 메서드의 동작을 확장한다.
  • 반환 타입은 상관없지만, 매개변수의 타입과 개수를 다르게 정의해야 한다.
  • 메서드의 입력 형태를 다양화하여 사용성을 높일 수 있다.
  • 오버로딩에서의 다형성은 많은 행동(메서드)을 가질 수 있는 능력 이라고 볼 수 있다.


오버로딩 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int add(int a, int b){
    return a+b;
}

int add(int a, int b, int c){
    return a+b+c;
}

int add(int a, int b, int c, int d){
    return a+b+c+d;
}

add(1, 2);  // 3
add(1, 2, 3);   // 6
add(1, 2, 3, 4);    // 10


오버라이딩(overriding)이란?

상속받은 클래스에서 부모 클래스의 메서드를 재정의한다.
  • 메서드를 수정한다.
  • 상속 시 상위 클래스의 private 멤버를 제외한 모든 멤버를 상속받는다.
  • 상속받은 클래스에서 특정 메서드의 동작을 수정하거나 확장할 때 사용한다.
  • @Override 키워드를 통해 오버라이딩을 명시한다.
  • 오버라이딩에서의 다형성은 많은 형태를 가질 수 있는 능력 을 의미한다.


오버라이딩 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class People {
    void greet() {
        System.out.println("안녕하세요!");
    }
}

class Ostin extends People {
    @Override
    void greet() {
        System.out.println("안녕하세요. Ostin 입니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        People everyone = new People();
        everyone.greet(); // 안녕하세요!

        Ostin friend = new Ostin();
        friend.greet(); // 안녕하세요. Ostin 입니다.
    }
}


오버로딩과 오버라이딩 성립 조건

구분오버로딩오버라이딩
메서드 이름동일동일
매개변수, 타입다름동일
리턴 타입상관없음동일


누군가가 물어본다면

오버로딩은 같은 이름의 메서드에서 매개변수의 타입과 개수를 다르게 하여 메서드의 사용성을 높입니다.
오버라이딩은 상속받은 상위 클래스의 메서드를 재정의하여 상속에서의 유연성을 제공합니다.
This post is licensed under CC BY 4.0 by the author.