기록장

메소드에 대해서 알려줄게3 본문

카테고리 없음

메소드에 대해서 알려줄게3

HJJJJJ 2022. 5. 14. 22:11
728x90

메소드 오버로딩

같은 이름의 메소드를 여러개 선언 하는 것을 메소드 오버로딩이라고 해

오버로딩이란 많이 싣는 것을 뜻하거든 

하나의 메소드 이름으로 여러개의 기능을 담아서 이렇게 이름이 붙여졌다고 하네?

 

근데 다 중복이면 코드의 중복이잖아? 

메소드 오버로딩의 조건은 

-매겨 변수의 타입,개수, 순서 중에서 하나가 달라야해~ 

 

만약 

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);
		
	}
}
728x90
Comments