반응형

Java

 

안녕하세요. 후니입니다!

이번 포스팅에서는 메소드 오버로딩(Method Overloading)에 관하여 가볍게 알아보겠습니다.

 

오버로딩(Overloading)이란?

변수 선언시 변수 명이 중복되지 않게 선언한 것처럼 메소드도 마찬가지로 서로 구별될 수 있어야 합니다.

하지만 자바에서는 한 클래스 내에 이름이 같은 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 사용할 수 있습니다. 이처럼 한 클래스 내에 같은 이름의 메소드를 여러 개 정의하는 것을 메소드 오버로딩(Method Overloading)이라 부르며 간단하게는 오버로딩(Overloading)이라 부릅니다. 코드로 바로 확인해보겠습니다.

 

1
2
int apple;
int apple;

 

만약 위 코드처럼 apple이라는 이름을 가진 변수를 두 번 선언하면 오류가 발생합니다. 하지만 메소드는 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package smile;
 
public class Test {
    public static void main(String[] args) {
        Test t = new Test();
        t.something();
        t.something(10);
        t.something(10,10);
        t.something(10,10.1);
    } 
    void something() {
        System.out.println("something!");
    }
    void something(int i) {
        System.out.println(i);
    }
    void something(int i, int i2) {
        System.out.println(i+i2);
    }
    void something(int i, double d) {
        System.out.println(i+d);
    }
}
Colored by Color Scripter

 

이와 같이 Test클래스 내부에 something()이라는 이름을 가진 메소드가 4개가 있지만 매개변수가 각각 다르므로 사용이 가능합니다. 

 

오버로딩의 조건

1. 메소드의 이름이 같아야합니다.

 - 위 코드보시면 이름이 같은 something()이라는 메소드가 4개가 있지만 사용이 가능하죠?

 

2. 매개변수의 개수 또는 타입이 달라야 합니다.

 - 매개변수가 없는 메소드부터 1개, 2개가 있는 메소드가 있으며 개수가 같더라도 세 번째 something() 메소드는 두 개의 int형 타입이고 마지막 네 번째 something() 메소드는 int형과 double형이기 때문에 오버로딩이 가능합니다.

 

3. 매개변수의 개수와 타입은 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않습니다.

 - 메소드를 호출하는 부분에서는 호출 할 메소드의 이름과 매개변수 개수, 타입으로 구분짓기 때문에 return타입이 다르다고 해서 오버로딩이 성립되지는 않습니다.

 

그러면 오버로딩은 왜 사용할까?

오버로딩이 없을 경우 두 개의 매개변수를 받아서 정수+정수/ 정수+실수 / 실수+실수를 덧셈하는 add()메소드를 다음과 같이 정의해야합니다.

 

1
2
3
4
5
6
7
8
9
int addInteger(int first, int second){
    return first+second;
}
double addIntDouble(int first, double second){
    return first+second;
}
double addDouble(double first, double second){
    return first+second;    
}
Colored by Color Scripter
 

위 코드를 작성하는데 너무 귀찮았습니다. 가장 귀찮았던 이유는 모두 덧셈하는 기능이지만 타입이 다르다는 이유로 메소드의 이름을 짓기가 어려웠습니다. 다음은 오버로딩을 사용한 코드입니다. 

 

1
2
3
4
5
6
7
8
9
int add(int first, int second){
        return first+second;
}
double add(int first, double second){
        return first+second;
}
double add(double first, double second){
        return first+second;
}
Colored by Color Scripter

 

매개변수가 다르지만 add라는 메소드의 이름이 중복되도 괜찮기 때문에 각 각 메소드의 이름을 짓는 번거로움에서 벗어날 수도 있고 add라는 메소드 이름 하나만 기억하면 되므로 부담이 덜 된다는 장점이 있습니다.

 

반응형

+ Recent posts