본문 바로가기

프로그래밍/Java

[Java]메소드 오버로딩

메소드 오버로딩이란

 한 클래스 내부에 같은 이름의 메소드가 있더라도 매개 변수의 타입이나 개수가 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다. 즉, 클래스 내에 같은 이름의 메소드를 여러개 선언 하는 것을 메소드 오버로딩이라 한다.

 

오버로딩 조건

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

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

 3. 매개 변수의 이름이 다르더라도 타입이 같으면 쓸 수 없다.

 

메소드 오버로딩을 사용하는 이유

 우리는 메소드 오버로딩을 사용함으로서 하나의 메소드 명을 통해 다양한 기능을 활용 할 수 있는 이점을 가질 수 있다.

우리가 많이 사용하는 println() 이 메소드 오버로딩의 좋은 예시이다. 우리는 자바에서 출력을 하기 위해 println()이라는 메소드를 사용하는데 int타입의 변수를 출력하든, double타입의 변수를 출력하든 println()메소드 하나로 처리한다.

이는 PrintStream이라는 클래스에 println(), println(boolean x), println(char x) ... println(String x)등 모든 타입의 메소드가 오버로딩 되어있기 때문이다. 

 이로서 사용자는 int형을 사용할때 굳이 printlnInt(), double형을 사용할때 printlnDouble() 이라는 다른 이름의 메소드를 사용하지 않고 편리하게 사용할 수 있는 것이다.

 

메소드 오버로딩 예시

class Math {
	int cal(int a, int b, int c){
		return (a + b) * c;
	}
	
	double cal(double a, double b, double c){
		return (a + b) * c;
	}
}

 먼저 정수형 값만 받아 '(a+b) * c' 를 계산하는 메소드 cal을 하나 생성한다. 이후 double형 값만받아 계산하는 메소드를 만드려는데, 만약 메소드 오버로드가 되지 않았다면 calDouble이라는 다른 이름의 메소드를 만들어 사용하여야 했을 것이다. 그리고 저 두 메소드에 그치지 않고 수많은 경우의 수를 따져가며 메소드를 추가하게 된다면

calFloat, calDoubleInt, calDoubleFloat 등 다른 이름의 메소드들이 계속 늘어날 것이고 사용자는 그것들을 전부 기억해가며 사용해야하는 불편함을 겪을 것이다.

 

public class Test {

	//main메소드에서 배열 선언과 배열에 객체 담기.
	public static void main(String[] args) {
		
		Math m = new Math();
		
		System.out.println(m.cal(1, 2, 3));
		System.out.println(m.cal(1.5, 2.6, 3.7));

	}

}

 

 하지만 우리는 메소드 오버로딩을 활용하여 cal() 메소드 하나만을 사용하며 모든 경우의 계산을 할 수 있게된다.

 

'프로그래밍 > Java' 카테고리의 다른 글

[Java]패키지  (0) 2021.03.30
[Java]this와 this()  (0) 2021.03.26
[Java]생성자  (0) 2021.03.24
[Java]객체 배열  (0) 2021.03.19
[Java]클래스와 객체  (0) 2021.03.17