IT/JAVA

[JAVA] 오버로딩에 대해서

오버로딩(overloading) 또는 메소드 오버로딩(method overloading)이라고 한다.

한 클래스 내에 같은 이름의 메소드를 여러 개 정의한다는 의미

보통 하나의 메소드 이름에 하나의 기능만을 구현하는게 일반적이지만,

하나의 메소드 이름으로 여러 기능을 구현하는게 편한 경우가 있다.

 

우리가 대표적으로 사용하는 println메소드를 살펴보자

예시

void println()

void println(boolean x)

void println(char x)

보다시피 차이점이 있다면 매개 변수의 차이가 존재한다.

내부적으로, 우리는 하나의 메소드 이름 println을 이용해 매개변수만 바꿔 편리하게 여러 기능을 이용했다는 점을 인지하고 

조건을 살펴보자.

오버로딩의 조건

1. 메소드 이름은 같게

2. 매개변수의 개수, 또는 타입만 다르면 된다.

*주의. 리턴 타입은 상관없다.


위 조건에 맞춘 오버로딩의 예시를 살펴보자

옳은 예시

int add(int a, int b)

int add(int a, long b)

long add(long a, int b)

long add(long a,long b)

-> 오버로딩 o 

틀린 예시

int add(int a, int b)

long add(int a, int b) 

-> 리턴 타입은 아무런 영향을 못주기 때문에 두 메소드는 정확히 같은 것으로 간주된다.
-> 오버로딩x


오버로딩에 대한 이해를 했을거라 생각하고, 실제 코드 예시를 보며 살펴보자.

import java.util.Scanner;

public class Practice_01 {
	public static void main(String[] args) {
		MyMath3 example = new MyMath3(); //인스턴스 생성
		System.out.println(example.add(3, 3));
		System.out.println(example.add(3L, 3));
		System.out.println(example.add(3, 3L));
		System.out.println(example.add(3L, 3L));
		
	}
}

class MyMath3{
	int add(int a, int b) {
		System.out.print("int add(int a, int b) - ");
		return a+b;
	}
	long add(int a, long b) {
		System.out.print("int add(int a, int b) - ");
		return a+b;
	}
	long add(long a, int b) { 
		System.out.print("int add(int a, int b) - ");
		return a+b;
	}
	long add(long a, long b) {
		System.out.print("int add(int a, int b) - ");
		return a+b;
	}
	int add(int[] a) {
		System.out.print("int add(int[] a) - ");
		int result = 0 ;
		for(int i = 0 ; i < a.length; i++)
			result += a[i];
		return result;
	}
}

보다시피 매개변수의 타입(long이든, int이든)은 상관없이 계산할 수 있는 메소드add() 를 만든 것이다.

이런 식으로, add라는 메소드 이름 하나로 여러 기능을 매개변수로만 구분하여 이용할 수 있다는 점이 오버로딩의 장점이다.