Back-end/JAVA / / 2024. 6. 26. 11:53

[JAVA] 오버로딩(Overloading), 오버라이딩(Overriding)이란? 차이점은?

반응형

오버로딩(Overloading)이란?

C#, C++, 자바(Java) 등의 다양한 프로그래밍 언어에서 사용되는 함수의 특징으로, 같은 함수 이름을 가지고 있으나 매개변수, 리턴타입 등의 특징은 다른 여러개의 서브프로그램 생성을 가능하게 한다. (C언어는 지원하지 않음)

출처 : 위키백과

 

 오버로딩은 함수의 이름이 동일하나 투입되는 매개변수의 타입이나 수량이 다른 매서드들을 말한다.

class Animal {
    
    void dog(){
        System.out.println("강아지는 귀엽습니다.");
    }

    void dog(String str){
        System.out.println(str+"은 귀엽습니다.");
    }

    void dog(int age){
        System.out.println("강아지의 나이는 " + age + "살 입니다.");
    }


}

public class Main {
    public static void main(String[] args) {
        Animal ani = new Animal();
		ani.dog();
		ani.dog("토이푸들");
		ani.dog(3);
    }
}

 

 위의 코드를 실행하면 아래와 같이 입력 변수의 타입에 따라 다른 매서드가 실행되었음을 확인할 수 있습니다.

강아지는 귀엽습니다.
토이푸들은(는) 귀엽습니다.
강아지의 나이는 3살 입니다.

 

 여기서 주의할 점은 리턴 타입이 다르더라도 입력되는 매개변수의 수량과 타입이 동일하면 성립하지 않는다

class Animal {

    String dog(String str){
        return "강아지의 이름은 " + str + "입니다.";
    } 
    
    void dog(String str){
        System.out.println(str+"은 귀엽습니다.");
    }

}

public class Main {
    public static void main(String[] args) {
        Animal ani = new Animal();
        ani.dog("토이푸들");
    }
}

 

위와 같이 입력값이 같은 매서드를 오버로딩 할 경우 컴파일 에러가 발생한다.

 

오버라이딩(Overriding)이란?

객체 지향 프로그래밍에서 서브클래스 또는 자식 클래스가 자신의 슈퍼클래스들 또는 부모 클래스들 중 하나에 의해 이미 제공된 메소드를 특정한 형태로 구현하는 것을 제공하는 언어의 특징이다.

출처 : 위키백과

 

 오버라이딩은 상위 클래스의 매서드를 하위 클래스에서 재정의해서 사용하는 방식을 이야기한다.

 여기서 주의할 점은 오버라이딩할때의 매서드는 상위 클래스 매서드와 이름, 매개변수 수, 매개변수 타입, 리턴 타입이 동일해야한다.

class Animal {

    void ani() {
        System.out.println("동물은 소중합니다.");
    }

}

class Dog extends Animal {

    @Override
    void ani() {
        System.out.println("강아지는 소중합니다.");
    }

}

public class Main {
    public static void main(String[] args) {
        Animal Ani = new Animal();
        Dog Puppy = new Dog();
		
        Ani.ani();
        Puppy.ani();
    }
}

 

위의 코드를 실행하면 Dog클래스의 객체는 Animal 클래스의 상속을 받았지만 ani() 매서드를 호출할때 오버라이딩된 결과 값을 리턴 받았음을 확인할 수 있습니다.

동물은 소중합니다.
강아지는 소중합니다.

정리

오버로딩과 오버로딩의 차이는 아래의 표와 같이 정의할 수 있다.

  오버로딩(Overloading) 오버라이딩(Overriding)
매서드 이름 일치해야함 일치해야함
매개변수의 개수, 타입 부분적으로 동일해도 되나 전부 일치하면 안 됨 일치해야함
리턴 타입 무관 일치해야함

오버로딩은 동일한 함수명으로 처리하고 싶은 일이 있는 경우에 오버라이딩은 상위 클래스의 매서드를 재정의 해서 사용할 때 사용하면 된다.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유