오버라이딩 vs. 오버로딩
이름이 비슷해서 자주 헷갈리는 경우가 많아서 이 포스트로 개념을 정리하고자 합니다.
오버라이딩 (Overriding)
객체 지향 언어에서 오버라이딩은 상속과 관련이 되어있습니다. Child 클래스들은 Parent class에서 정의된 method들을 사용 할 수 있는데 이런 것들은 inherited method라고 불립니다. 혹은 child 클래스가 parent class의 method와 똑같은 이름, parameter, return type을 가지고 있으면 overriding method 라고 불립니다. Overriding의 이런 특성은 다형성 (polymorphism)에 속합니다.
정리하자면
- Parent class에 선언된 method의 이름, parameter, return type과 같은 method를 child class에서도 선언 하는 것을 오버라이딩 (overriding)이라 합니다.
// Parent class
public class Parent {
public void show () {
System.out.println("This is Overriding");
}
}
//Child class containing overriding class
public class Child extends Parent {
@Override
public void show() {
System.out.println("This is Child show");
}
}
//Main
public class Main {
public static void main(String[] args) {
Parent obj1 = new Parent();
obj1.show();
Parent obj2 = new Child();
obj2.show();
}
}
이것에 대한 결과 값으로는 아래와 같이 나온다.
This is Overriding
This is Child show
오버로딩(Overloading)
오버로딩은 다른 종류의 method들이 똑같은 이름을 가질 수 있게 해준다. 하지만 이름만 같을 뿐 차이점이 필요한데 차이점은 parameter의 수, 데이터 타입 등으로 만들어 질 수 있다.
public class Sum {
public int sum (int x, int y) {
return x + y;
}
public int sum (int x, int y, int z) {
return x + y + z;
}
public double sum (double x, double y) {
return x + y;
}
}
public class Main {
public static void main(String[] args) {
Sum obj = new Sum();
System.out.println(obj.sum(10.0, 20.0));
System.out.println(obj.sum(10, 20));
System.out.println(obj.sum(10, 20, 30));
}
}
결과 값:
30.0
30
60
'Java' 카테고리의 다른 글
[Data Structure] List.of() (0) | 2023.09.10 |
---|---|
[Stream API] map과 flatMap (0) | 2023.08.21 |
객체(Object)란 무엇일까요? (0) | 2020.04.25 |