본문 바로가기
Programming/Java

[Java] 13. 오버로딩 (Overloading)

by Rayched 2023. 1. 17.

1. 개요

자바 생성자 게시물에서 this 키워드를 설명할 때, 오버로딩의 정의를 간략하게 설명하고

상세한 것은 추후에 하겠다고 하며 넘어간 적이 있었다.

이번엔 오버로딩에 대해 좀 더 상세하게 설명해 보도록 하겠다.

자바 생성자 게시물에서 오버로딩의 정의를 간략하게 설명하고 넘어갔었다.


 2. Overloading

① 오버로딩의 정의

- 자바에서 메서드를 다루는 기법 중 하나

- Overloading: 과적하다, 너무 많이 주다. (사전적인 의미)

- 매개변수의 개수, 타입을 다르게 해서 같은 이름의 메서드가 존재할 수 있게 하는 기법

- 오버로딩, 메서드 오버로딩은 객체 지향 프로그래밍 언어의 특징 중 하나인

  '다형성(Polymorphism)'을 구현하는 방법 중 하나이다.

 

아래는 메서드 오버로딩의 성립 조건이다.

자바로 프로그래밍을 하다 보면 오버로딩을 활용할 일도 많으니 잘 기억해 두자.

  • 메서드의 이름이 같아야 한다.
  • 메서드의 매개변수의 개수, 타입은 달라야 한다.

② 오버로딩 예제

메서드 오버로딩의 정의와 성립 조건에 대해 알아봤으니

간단한 예제를 풀어보고 설명을 마치도록 하겠다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//메서드 오버로딩 예제
//오버로딩된 메서드 설명하기.
 
class Main {
    public static void main(String[] args) {
        Example a = new Example();
        a.plus(510); //15
        a.plus(51015); //30
        a.plus("Hello""_World"); //Hello_World
    }
}
 
class Example {
    //int형 메서드 plus
    int plus(int a, int b){
        System.out.println(a + b);
        return a+b;
    }
    //Overloading
    //int형 메서드 plus 오버로딩
    //매개변수의 개수를 다르게 함.
    int plus(int a, int b, int c){
        System.out.println(a + b + c);
        return a+b+c;
    }
    //Overloading
    //int형 메서드 plus 오버로딩
    //메서드의 타입, 매개변수의 타입을 다르게 함. (개수는 같음)
    String plus(String a, String b){
        System.out.println(a + b);
        return a+b;
    }
}
cs

 

상단의 소스코드를 확인해 보면 메서드의 이름은 'plus'로 똑같이 했지만

리턴타입을 같게 했지만 매개변수의 개수를 다르게 하거나

리턴타입과 매개변수의 타입을 다르게 했지만 개수를 같게 해서

메서드 오버로딩을 구현한 것을 확인할 수 있을 것이다.

이제 프로그램을 실행해 보자. 아래와 같은 출력 결과가 나온 것을 확인할 수 있을 것이다.

프로그램 실행 결과

 

Main 클래스에서 Example의 객체를 만들고

참조변수 a를 통해서 Example 객체의 메서드를 실행시킨다.여기서 메서드의 인자로 넣은 값의 개수나 타입에 따라해당 조건에 맞는 메서드가 실행됐다는 것을 위의 출력결과를 통해서 알 수가 있다.


③ 오버로딩과 오버라이딩

OverloadingOverriding

이 둘을 비교하기 전에 오버라이드의 정의를 알고 넘어가 보자.

 

Overriding

 - 부모 클래스로부터 상속받은 메서드를, 자식 클래스에서 재정의해서 사용할 수 있는 기능

  - 메서드의 이름, 매개변수의 개수, 타입같으면 상속받은 메서드를 덮어쓴다.

 

오버로딩과 오버라이딩은 공통점과 차이점이 존재하는 것을 알 수 있을 것이다.

이 둘의 특징을 비교한 것을 표로 한번 정리해 봤다.

  오버로딩 (Overloading) 오버라이딩 (Overriding)
메소드 명 메소드의 이름은 같아야한다.
매개변수 개수, 타입 달라야한다.
(최소 개수나 타입 둘 중 하나가 달라야 한다.)
같아야한다.
(매개변수 개수, 타입 모두 같아야한다.)
return type 상관 없음 (같거나 다른 것에 구애받지 않음) 같아야 한다.

오버로딩과 오버라이딩은 메서드의 이름이 같아야 한다는 공통점이 존재하지만

매개변수나 반환 타입에 대해서는 서로 다른 점이 존재한다는 것을 확인할 수 있다.


3. 마치며

이로써 메서드 오버로딩에 대한 설명이 끝났다.

이번에 작성한 글에는 이전과 다르게 조금 다른 방식을 사용했다는 것을 알 수 있을 것이다.

일단 자바 문법 정리본을 다 업로드하기 전까지는 그대로 둘 것이다.

그리고 정리본을 전부 다 올리고 나서는

용어나 양식 같은 부분을 전부 다 통일시키는 수정 작업을 진행할 필요가 있을 것 같다.

전체적으로 약간 중구난방의 느낌이 없잖아 있으니 말이다...

 

다음에 작성할 글은 객체 지향 프로그래밍의 특징 중 하나인 '다형성'에 대한 것이다.

이것도 빠른 시일 내에 올려보도록 하겠다.

 

'Programming > Java' 카테고리의 다른 글

[Java] 15. 추상 클래스  (0) 2023.01.26
[Java] 14. 다형성 (Polymorphism)  (0) 2023.01.20
[Java] 12. 캡슐화와 접근 제어자  (0) 2023.01.16
[Java] 11. 생성자 (Constructor)  (0) 2023.01.16
[Java] 10. 상속 (Inheritance)  (0) 2022.12.22