Maenya's Techlog

[20210318 JAVA문법] 오버로딩과 오버라이딩의 차이 본문

프로그래밍/Java | Spring

[20210318 JAVA문법] 오버로딩과 오버라이딩의 차이

ming235 2021. 3. 18. 15:30

오랜만에 나의 최애 기술블로그들을 둘러보다가 자바문법 게시물들에 눈이 갔다.

그 중에 이해하기 쉽게 오버로딩과 오버라이딩의 차이가 설명되어 있었는데

평소 명확하게 잡혀있지 않던 개념이라 꼼꼼히 읽고 다른 자료까지 찾아가며 나도 한번 정리를 해봤다.

 

 

오버로딩 (Overloading)

 

이름은 같지만 아예 다른 함수

class Overloading{
    public void same(int param){
        System.out.println("입력된 숫자 : " + param);
    }
    public void same(String param){
        System.out.println("입력된 문자 : " + param);
    }
}
 
public class OverloadingDemo {
    public static void main(String[] args) {
        Overloading o = new Overloading();
        o.same(1);		// int형으로 입력
        o.same("one");		// string형으로 입력
    }
}

Overloading이라는 클래스에 same이라는 함수 2개를 만들었는데

 

파라미터 형식이 int와 string으로 이름만 같고 둘은 아예 다른 함수이다.

 

메소드의 이름, 매개변수의 데이터 타입(+그의 순서), 메소드 리턴 타입

이 3가지가 모두 동일해야만 같은 함수로 인식된다.

 

 

 

 

오버라이딩 (Overriding)

 

부모에게 물려받아 변형한 함수

 

상속의 개념이 깔려 있고 '다형성' (객체지향 특)

 

두 개의 함수가 같은 함수이지만 하나의 함수는 변형되어 우선 순위를 갖는다.

 

// 부모 클래스
class Calculator {
    public void sum(int left, int right) {
        System.out.println(left + right);
    }
}
 
// 자식 클래스
class OverridingCalculator extends Calculator {
    public void sum(int left, int right) {
        System.out.println(left + right + "입니다.");
    }
}
 
// 실행
public class Demo {
    public static void main(String[] args) {
        OverridingCalculator c1 = new OverridingCalculator(); // 자식 인스턴스 생성
        c1.sum(10,20); // 결과 : "30입니다."
    }
}

 

 

하나의 클래스가 다른 하나의 클래스를 상속받는 경우,


둘다 같은 함수를 각각 가지고 있을때 


이 시점에서는 상속받은 자식클래스의 함수가


더 높은 우선순위를 차지한다. 

 

결국 자식클래스가 부모클래스의 객체를 변형하는것,

 

그렇게 우선순위를 차지하는 것을 의미한다.

 

 

 

마무리

 

실무하면서는 솔직히 너무 당연하고 기초적인 부분이라 할지라도 막상 질문을 받으면

그에 대해 유창하게 답변하기 힘든 것 같다.

그래서 꼭 새로 알게 된 개념 말고도

기초적인 개념이나, 애매하게 기억하고 있는 문법들에 대해서도

다시 공부하고 이렇게 기록할 필요가 있는 것 같다.

 

  앞으로 더욱 깊게 학습하고 더 많은 기록들을 남기려고 노력해야겠다.