컴퓨터 공학 & 통신

[개념 정리] 오버로딩(overloading)과 오버라이딩(overriding)

왈왈디 2023. 6. 30. 21:05
728x90

오버로딩(overloading)

오버로딩이란 함수를 같은 이름으로 매개 변수의 개수, 타입, 순서를 다르게 하여 정의함으로서,

같은 이름의 여러 함수를 정의하는 것을 말한다.

 

자바스크립트만 개발해본 사람으로서 생소한 개념인데,

자바스크립트에서는 오버로딩 기능을 지원하지 않는다.

 

대표적으로 자바C++에서 사용되며, 언어마다 지원 여부가 다르다.

 

오버로딩을 잘 활용하면, 프로그램의 유연성을 높이고, 코드를 깔끔하게 하여 가독성을 높이는 효과가 있다.

오버로딩은 같은 클래스 내에서 사용된다.

 

자바와 C++은 아직 잘 몰라서 강의의 자바 예시를 가져왔다.

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 walwal = new Person();
        walwal.pay("왈왈이", 10000); //"왈왈이가 10000원만큼 계산합니다."
        walwal.pay(10000, "왈왈이"); //"왈왈이가 10000원만큼 계산합니다."
    }
}

 

오버라이딩(overriding)

오버라이딩은 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의 하는 것을 말하며, 역시나 자바스크립트에서는 지원하지 않는다.

 

때문에 자바 기준으로 이야기해보자면, 상속 관계 클래스에서 사용되며,

static, final로 선언한 메서드는 오버라이딩 할 수 없다.

 

아래는 강의의 자바 코드 예시이다.

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(); //"사람처럼 먹습니다."
    }
}

 

아래처럼 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(); //"사람처럼 먹습니다."
    }
}

 

참고: inflearn 강의 'CS 지식의 정석 - 큰돌'

728x90