java/객체지향

8. 오버로딩(overloading)

VanillaSky7 2023. 1. 15. 23:50

오버로딩(overloading)?


오버로딩(overloading)은 한 클래스 내에 있는 이름이 같은 메서드들을 여러 개 정의하는 것을 의미합니다.

 

한 이름 내 다양한 메서드들을 과적(overload)하고 있기 때문에 그 이름이 붙었음을 쉽게 아실 수 있을겁니다.

 

다음의 간단한 예제를 살펴보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
public class overloading {
 
    public static void main(String[] args) {
        
        System.out.println(1);
        System.out.println("바닐라");
        System.out.println(3L);
       
 
    }
}
cs

 

 

우리가 그동안 println()을 사용해오면서 타입을 int, String, long 인지 구분없이 출력하고 싶은 값을 넣어 사용해왔습니다.

 

하지만 사실 println 메서드라는 같은 이름으로 "매개변수로 구분하여" 알맞은 방식의 타입으로 출력해주도록 여러 개의 메서드가

 

정의되어 있던 것이었습니다. 간단히 예를 들어보자면, 위 코드와 같이 1이 들어오면 println(int a) 메서드가 호출되고

 

"바닐라"라는 값이 들어오면 println(String a) 이런식으로 알맞게 메서드가 호출되고 이것이 오버로딩의 역할이라고 할 수 있습니다.

 


오버로딩(overloading) 성립 조건


첫 번째, 메서드의 이름이 같아야 합니다. int형을 출력할 때는 printlnInt 로, float형을 출력할 때는 printfloat로, String형을 출력할 때는

 

printlnString과 같이 모두 나뉜다면 우리는 각 역할을 수행하는 메서드명을 모두 알아야한다는 등의 불편함이 있을 것입니다. 따라서

 

println라는 하나의 이름으로 그 역할을 통일할 수 있는 메서드를 정의해야 합니다!

 

두 번째, 매개변수의 개수 혹은 타입이 달라야 합니다. 같은 이름의 메서드로 그 역할들을 나누기 위함인데, 만약 똑같이 역할하는 로직으

 

로 메서드를 구현한다면 이것은 단순 코드의 중복이 될 뿐이기 때문입니다.

 

세 번째, 반환 타입은 성립 조건에 영향을 주지 않습니다. 따라서 메서드의 이름이 같고 매개변수의 개수 혹은 타입이 같은 상황에서 반환

 

타입이 서로 다르다고 하여 오버로딩으로써 성립되지 않습니다. 이 점에 유의하시기 바랍니다!

 


코드


 

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
class Calculator2 {
    int add(int a, int b) {
        return a + b;
    }
    
    long add(long a, long b) {
        return a + b;
    }
    
    String add(String a, String b) {
        return a + b;
    }
}
 
public class overloading {
 
    public static void main(String[] args) {
        
        Calculator2 Cal = new Calculator2();
        
        System.out.println(Cal.add(510));
        System.out.println(Cal.add(20L, 30L));
        System.out.println(Cal.add("개발자""바닐라"));
        
    }
}
cs