오버로딩과 오버라이딩은 객체 지향 프로그래밍에서 다형성을 구현하기 위해 사용되는 개념입니다. 각각의 개념에 대하여 알아보고, 예시코드를 통해 차이점을 알아보겠습니다.
목차
오버로딩(Overloading)이란?
오버라이딩(Overriding)이란?
오버로딩(Overloading)이란?
오버로딩은 동일한 이름의 메서드를 여러 개 정의하는 것을 말합니다. 다만, 매개변수의 개수나 타입을 다르게 하여 서로 다른 버전의 메서드를 생성합니다. 이를 통해 같은 작업을 수행하는 메서드를 다양한 상황에 맞게 사용할 수 있습니다.
오버로딩의 특징
1. 메서드의 매개변수의 개수와 타입이 다르기 때문에, 같은 이름의 메서드가 여러 개 존재할 수 있습니다.
2. 오버로딩된 메서드는 매개변수의 개수와 타입에 따라 호출될 메서드가 선택됩니다.
3. 오버로딩은 다양한 입력을 처리하기 위해 사용됩니다.
예시 코드
class Calculator {
public int cal(int a, int b) {
return a * b;
}
public double cal(double a, double b) {
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
int result1 = calc.cal(2, 3); // int 타입의 cal 메서드 호출
double result2 = calc.cal(2.5, 3.7); // double 타입의 cal 메서드 호출
System.out.println(result1); // 출력: 6
System.out.println(result2); // 출력: 6.2
}
}
위의 코드에서 Calculator 클래스는 cal메서드를 오버로딩하여 정수형 매개변수를 받는 버전과 실수형 매개변수를 받는 버전을 정의하였습니다. 메서드 호출 시 전달되는 인자의 타입에 따라 적절한 메서드가 선택되어 실행되고 결과 값이 반환됩니다.
오버라이딩(Overriding)이란?
오버라이딩은 상위 클래스에서 이미 정의된 메서드를 하위 클래스에서 동일한 매개변수와 타입으로 재정의 하는 것을 말합니다. 상속관계에서 발생하며, 하위 클래스는 상위 클래스의 메서드를 오버라이딩하여 동작을 변경하거나 추가 기능을 구현할 수 있습니다.
오버라이딩의 특징
1. 오버라이딩된 메서드는 상위 클래스의 메서드와 동일한 메서드 이름, 매개변수 타입, 반환 타입을 가져야 합니다.
2. 오버라이딩은 런타임 다향성을 구현하기 위해 사용됩니다.
3. 오버라이딩된 메서드는 상위 클래스의 메서드 대신 하위 클래스에서 실행됩니다.
예시 코드
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 animal = new Dog();
animal.makeSound(); // 출력: "Dog barks"
}
}
위의 코드에서 Animal 클래스의 makeSound 메서드를 Dog 클래스에서 오버라이딩 했습니다. Dog 클래스의 makeSound 메서드는 상위 클래스의 동일한 매개변수와 타입을 가지며 출력되는 값을 "Dog barks"로 재정의 하였습니다.
따라서 main 메서드에서 Animal타입의 변수 animal가 Dog 객체를 참조하고 있어 타입은 Animal이지만 animal.makeSound의 출력은 "Dog barks"가 됩니다.
정리
오버로딩 : 같은 클래스 내에서 메서드 이름이 동일하고 매개변수가 다른 메서드를 정의하는 것이며 컴파일러가 메서드 호출 시 인자를 기반으로 선택합니다.
오버라이딩 : 상속 관계에서 상위 클래스의 메서드를 하위 클래스에서 재정의 하는 것이며, 런타임 다형성을 구현합니다. 동일한 매개변수와 타입을 가지고 하위 클래스의 메서드가 실행됩니다.
오버로딩과 오버라이딩은 객체 지향 프로그래밍에서 다형성을 지원하는 중요한 개념으로, 유연하고 확장 가능한 코드를 작성하는데 도움을 줍니다.
'Computer Science' 카테고리의 다른 글
[CS] 그래프 알고리즘 (깊이 우선 탐색, 너비 우선 탐색) (0) | 2023.06.22 |
---|---|
[CS] 검색 알고리즘 (선형 검색, 이진 검색, 트리 검색, 해시 검색, 보간 검색) (0) | 2023.06.21 |
[CS] 정렬 알고리즘 (버블 정렬, 선택 정렬, 퀵 정렬, 병합 정렬, 힙 정렬) (0) | 2023.06.21 |
[CS] 자료구조란 무엇인가? (배열, 리스트, 스택, 큐, 트리, 그래프) (0) | 2023.06.20 |
[CS] 객체 지향 프로그래밍(OOP) (클래스, 객체, 캡슐화, 상속, 인터페이스) (0) | 2023.06.19 |