[Java] 오버로딩(Overloading)
카테고리: Java
태그: coding Programming Java
오버로딩의 사용 이유
- 매개변수 종류 별로 메소드 내용을 다르게 작성해야하는 경우들이 있다
- 이 때 동일한 기승의 메소드를 매개변수에 따라 다르게 이름을 정의하면 복잡하고 관리가 어렵다
- 규모가 작은 프로그램의 경우는 정도가 덜하지만, 규모가 거대한 경우 메소드 또한 관리가 어려워 진다
- 따라서 동일한 이름으로 다양한 종류의 매개변수에 따라 처리해야하는 여러 메소드를 동일한 이름으로 관리하기 위해 사용하는 기술을 오버로딩이라고 한다.
오버로딩의 조건
- 동일한 이름을 가진 매소드의 파라미더 선언부에 매개변수 타입, 갯수, 순서를 다르게 작성하여 현 클래스 내에서 동일한 이름의 메소드를 여러개 작성할 수 있도록 한다
- 메소드 시그니처가 다르면 다른 메소드로 인식하기 때문이다
- 즉, 시그니처 중 메소드의 이름은 동일해야하기 때문에 파라미터 선언부가 다르게 작성되어야 오버로딩이 성립된다
메소드 시그니처란?
- public void method(int num){}이라는 메소드의 메소드명과 파라미터 선언부 부분을 시그니처라고 부른다
- method(int num) 이 부분이 시그니처이다
-
매소드 시그니처가 달라야하기 때문에 접근제한이나 변환형은 오버로딩 성립요건에 해당하지 않는다
- OverloadingTest
package section05.overloading;
public class OverloadingTest {
public void test(){}
// public void test(){} //에러남
//private void test(){} //에러남 // 접근제한자는 매소드 시그니처에 해당하지 않는다.
/*public in test(){ //에러남 // 반환형은 매소드 시그니처에 해당하지 않는다.
return 0;
*/
public void test(int num){} //파라미터 선언부는 매소드 시그니처에 해당합니다.
public void test (int num, int num2){} // 매개변수 갯수에 따른 오버로딩 확인
public void test(int num,String name){} // 매개변수 타입에 따른 오버로디로딩 확인
public void test(String name, int num){} // 매개변수 순서에 따른 오버로딩 확인
}
메소드의 파라미터에 대해 이해하고 사용할 수 있다
- 매개변수(parameter)로 사용 가능한 자료형
- 기본자료형
- 기본자료형 배열
- 클래스자료형
- 클래스자료형 배열
- 가변인자
-Application.java
package section05.parameter;
import javax.lang.model.SourceVersion;
public class Application {
public static void main(String[] args) {
/*인스턴스 생성*/
ParameterTest pt = new ParameterTest();
/* 1. 기본자료형을 매개변수로 전달받는 메소드 호출 확인*/
int num = 10;
pt.testPrimaryType(num);
/* 2. 기본자료형을 매개변수로 전달받은 메소드 호출 확인*/
int[] iarr = new int[]{1, 2, 3, 4, 5};
System.out.println("인자로 전달하는 값= " + iarr );
pt.testPrimaryTypeArray(iarr);
System.out.print("변경된 원본 배열의 값 출력 : ");
for (int i = 0; i < iarr.length; i++) {
System.out.print(iarr[i] + " ");
}
System.out.println();
/* 3. 클래스 자료형 */
RectAngle r1 = new RectAngle((12.5), 22.5);
System.out.println("인자로 전달하는 값 :" + r1);
pt.testClassType(r1);
System.out.println("================ 변경 후 사각형의 넓이와 둘레 ================");
r1.calcArea();
r1.calcRound();
/* 4. 클래스 자료형 배열은 뒤에 다룬다. */
/* 5. 가변인자 */
// pt.testVariableLengthArray();
pt.testVariableLengthArray("홍길동"); // 가변인자는 전달하지 않아도 됨
pt.testVariableLengthArray("유관순","볼링"); // 1개도 전달가능
pt.testVariableLengthArray("이순신","볼링","농구","축구"); // 여러개도 가능
pt.testVariableLengthArray("신사임당", new String[]{"테니스", "족구", "농구", "만두빚기"}); // 배열도 가능
}
}
- ParameterTest.java
package section05.parameter;
public class ParameterTest {
public void testPrimaryType(int num) {
System.out.println("내개변수로 전달 받은 값 = " + num);
}
public void testPrimaryTypeArray(int[] iarr) {
System.out.println("매개변수로 전달 받은 값 = " + iarr);
System.out.print("배열의 값 출력 : ");
for (int i = 0; i < iarr.length; i++) {
System.out.print(iarr[i] + " ");
}
System.out.println();
iarr[0] = 99;
System.out.println("변경된 배열의 값 출력 = " + iarr);
System.out.print("배열의 값 출력 : ");
for (int i = 0; i < iarr.length; i++) {
System.out.print(iarr[i] + " ");
}
System.out.println();
}
public void testClassType(RectAngle rectAngle) {
System.out.println("매개변수로 전달받은 값 = " + rectAngle);
System.out.println("================ 사각형의 넓이와 둘레 ================");
rectAngle.calcArea();
rectAngle.calcRound();
rectAngle.setWidth(100);
rectAngle.setHeight(100);
System.out.println("================ 변경 된 사각형의 넓이와 둘레 ================");
rectAngle.calcArea();
rectAngle.calcRound();
}
public void testVariableLengthArray(String name, String... hobby) {
/* (...)은 가변인자를 나타내는 문법. 메서드에 여러 개의 매개변수를 전달할 수 있도록 한다.
가변인자를 사용하면 메서드를 호출할 때 필요한 수만큼의 인자를 전달할 수 있으며, 메서드 내부에서 해당 이자들을 배열로 처리할 수 있다. */
System.out.println("이름 : " + name);
System.out.println("취미의 갯수 : " + hobby.length);
System.out.print("취미 : ");
for (int i = 0; i < hobby.length; i++) {
System.out.print(hobby[i] + " ");
}
System.out.println();
}
}
- RectAngle.java
package section05.parameter;
public class RectAngle {
private double width;
private double height;
public RectAngle(double width, double height) {
this.width = width;
this.height = height;
}
public void setWidth(double width) {
this.width = width;
}
public void setHeight(double height) {
this.height = height;
}
public double getWidth() {
return width;
}
public double getHeight() {
return height;
}
public void calcArea() {
double area = width * height;
System.out.println("이 사각형의 넓이는? = " + area + "입니다.");
}
public void calcRound() {
double round = (width + height) * 2;
System.out.println("이 사각형의 둘레는? = " + round + "입니다.");
}
}
요약. 파라미터: 함수나 메소드에 전달되는 값으로, 해당 함수 또는 메소드에서 사용되는 변수를 초기화하거나 조작하는 데 사용된다
오늘도 좋은일만 가득하길..
댓글 남기기