자바

오버로딩

devjones 2020. 10. 14. 20:04

오버로딩이란 클래스에 메소드를 정의할 때 이름이 같지만 서로 다른 매개변수 형식을 지닌 메소드를 여러 개 정의할 수 있는 방법이다.

package org.opentutorials.javatutorials.overloading.example1;

public class CalculatorDemo {
	public static void main(String[] args) {
		Calculator c1 = new Calculator();
		c1.setOperands(10, 20);
		c1.sum();
		c1.avg();
		
		c1.setOperands(10, 20, 30);
		c1.sum();
		c1.avg();
	}
}

class Calculator {
	int left, right;
	int third = 0;
	
	public void setOperands(int left, int right) {
		System.out.println("setOperands(int left, int right)");
		this.left = left;
		this.right = right;
	}
	
	public void setOperands(int left, int right, int third) {
		System.out.println("setOperands(int left, int right, int third)");
		this.left = left;
		this.right = right;
		this.third = third;
	}
	
	public void sum() {
		System.out.println(this.left + this.right + this.third);
	}
	
	public void avg() {
		System.out.println((this.left + this.right + this.third) / 3);
	}
}

그런데 문제가 생겼다.

setOperands 메소드도 같이 수정해야 한다. 개선해보자.

public void setOperands(int left, int right, int third) {
  System.out.println("setOperands(int left, int right, int third)");
  this.setOperands(left, right);
  this.third = third;
}

 

오버로딩의 규칙

1. 매개변수가 다르더라도 리턴타입도 다르면 에러가 난다.

void alpha() { System.out.println("알파메소드호출");
int alpha() { System.out.println("알파메소드호출");

헷갈린다. 미연에 방지하는거다.

 

2. 매개변수의 이름! 당연히 달라야된다.

void beta(int arg1) { };
void beta(int param1) { };

파라미터의 이름은 해당메소드 작동중에 중요한 사항, 메소드 호출중에는 별 관심이 없다.

 

출처 : 생활코딩