오버로딩과 오버라이딩

1c2·2024년 4월 3일
0

CS

목록 보기
8/18

오버로딩과 오버라이딩이 무엇인가?

오버로딩(Overloading)

오버로딩은 이름이 같아도 매개변수 개수, 타입, 순서를 다르게 해서 같은 이름으로도 여러 개의 함수를 정의할 수 있는 것을 말한다. 이는 프로그램의 유연성을 높이고 결과적으로 코드를 깔끔하게 하는 효과가 있으며 같은 클래스 내에서 사용한다.

ex1)

class Calculator{
    void multiply(int a, int b){
        System.out.println("결과는 : "+(a * b) + "입니다.");
    }
    void multiply(int a, int b,int c){
    	System.out.println("결과는 : "+(a * b * c) + "입니다.");
    }
    void multiply(double a, double b){
    	System.out.println("결과는 : "+(a * b) + "입니다.");
    }
}
public class MyClass {
    public static void main(String args[]) {
        int a = 1;
        int b = 2;
        int d = 4;
        Calculator c = new Calculator();
        c.multiply(a, b);
        c.multiply(a, b, d);
        double aa = 1.2;
        double bb = 1.4;
        c.multiply(aa, bb);
	}
}

ex2)

class Person{
    void pay(String a, int b){
    	System.out.println(a + "가 "+ b + "원만큼 계산합니다. ");
    }
    void pay(int a, String b){
    	System.out.println(b + "가 "+ a + "원만큼 계산합니다. ");
    }
}
public class MyClass {
    public static void main(String args[]) {
        Person c = new Person();
        c.pay("영주", 1000000000);
        c.pay(1000000000, "영주");
    }
}

ex3)
C++에서도 쓰이기도 함 (이처럼 되는 언어가 있고 안되는 언어가 있음)

#include<bits/stdc++.h>
using namespace std;
string a = "aaa";
string b = string("aaa");
string c = string(3, 'a');
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cout << a << '\n';
    cout << b << '\n';
    cout << c << '\n';
}
/*
aaa
aaa
aaa
*/

오버라이딩

상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의 하는 것을 의미. 상속 관계에서 사용되며 static, final로 선언한 매서드는 오버라이딩이 불가.

ex1)

class Animal{
    void eat(){
    	System.out.println("먹습니다.");
    }
}
class Person extends Animal{
    @Override
    void eat(){
    	System.out.println("사람처럼 먹습니다. ");
    }
}
public class MyClass {
    public static void main(String args[]) {
        Person a = new Person();
        a.eat();
    }
}

ex2)
interface를 기반으로 구체적인 함수 정의는 하지 않고 이를 기반으로 여러개의 하위 클래스를 만들어 오버라이딩

interface Animal{
	public void eat();
}
class Person implements Animal{
    @Override
    public void eat(){
    	System.out.println("사람처럼 먹습니다. ");
    }
}
public class MyClass {
    public static void main(String args[]) {
        Person a = new Person();
        a.eat();
    }
}

0개의 댓글