기록장
메소드에 대해서 알려줄게3 본문
메소드 오버로딩
같은 이름의 메소드를 여러개 선언 하는 것을 메소드 오버로딩이라고 해
오버로딩이란 많이 싣는 것을 뜻하거든
하나의 메소드 이름으로 여러개의 기능을 담아서 이렇게 이름이 붙여졌다고 하네?
근데 다 중복이면 코드의 중복이잖아?
메소드 오버로딩의 조건은
-매겨 변수의 타입,개수, 순서 중에서 하나가 달라야해~
만약
int변수를 변수를 선언했는데 double 타입이 필요 할 수도 있잖아?
이럴떄는 더블 타입으로 선언된 메소드를 하나 더 선언 하면 돼
그러면 JVM이 알아서 매개값의 타입을 보고 메소드를 선택한대
개꿀이지?
예를 들어서
plus(10, 20)을 호출하면 매개값이 정수니까
plus(int x,int y)가 실행되는거지
plus(10.5,20.3); 메소드를 호출 하면
뭐가 실행 될지 예상이 가지?
plus(double x, double y)가 실행 되겠지?
자 그러면
int x = 10;
double y =20.3;
plus(x,y);
이렇게 하면 어떻게 메소드가 실행이 될까?
보면 plus() 메소드가 없어서 에러가 날꺼 같지?
하지만
plus(double x, double y)메소드가 실행이 돼
JVM이 타입이 일치하지 않으면
자동 타입 변환가능 한지 보고
가능하면 최종적으로 메소드를 선택해주는거야
편하지?
메소드 오버로딩의 주의 점이 있어
1 매개 변수의 타입과, 개수,순서가 똑같으면 메소드 오버로딩이 아니야^^
2리턴타입만 다르고 매개 변수가 동일하다면 이것도 아니야
--> 왜냐면 리턴 타입은 JVM이 메소드를 선택 할 떄 도움 x
ex)
int divide(int x, int y) { ... }
double divide(int boonja, int boonmo) { ... }
이러면 오류 나
대표적은 메소드 오버로딩은
system.out.println() 이래
package sec02.exam01;
public class Calculator {
//정삭각형의 넓이
double areRectangle(double width) {
return width * width;
}
//직사각형의 넓이
double areRectangle(double width, double height) {
return width * height;
}
}
package sec02.exam01;
public class CalucalatorExample {
public static void main(String[] args) {
Calculator myCalcu = new Calculator();
//정사각형의 넓이 구하기
double reult1 = myCalcu.areRectangle(10);
//직사각형의 넓이 구하기
double reult2 = myCalcu.areRectangle(10,20);
//결과출력
System.out.println("정사각형 넓이=" + reult1);
System.out.println("직사각형 넓이=" + reult2);
}
}