TIL 20-04-07
Updated:
06-4 메소드
메소드 호출
- 클래스 내부에서 호출할 경우 메소드 이름만 호출, 외부에서 호출할 경우 객체을 생성하고 참조 변수를 이용해야 함
객체 내부에서 호출
- 리턴값이 없거나 있어도 받고 싶지 않을 경우
메소드( 매개값, … );
public class ClassName{
void method1( String p1, int p2 ){
}
void method2(){
method1( "홍길동", 100 );
}
}
- 리턴값이 있는 메소드를 호출하고 리턴값을 받고 싶을 경우
타입 변수 = 메소드( 매개값, … );
- 이때 변수 타입은 메소드 리턴 타입과 동일하거나, 자동 타입 변환이 될 수 있어야 함.
public class ClassName { int method1( int x, int y ){ int result = x + y; return result; } void method2() { int result1 = method(10, 20); //result1에는 30이 저장 double result2 = method(10, 20); //result2에는 30.0이 저장 } }
객체 외부에서 호출
1) 클래스로부터 객체를 생성
클래스 참조변수 = new 클래스( 매개값, …);
2) 참조 변수와 함께 도트(.) 연산자를 이용해서 메소드를 호출
참조변수.메소드( 매개값, … ); //리턴값이 없거나 리턴값을 받지 않을 경우
타입 변수 = 참조변수.메소드( 매개값, … ); //리턴값이 있고, 리턴값을 받고 싶을 경우
메소드 오버로딩
- 같은 이름의 메소드를 여러 개 선언하는 것
- 메소드 오버로딩의 조건은 매개 변수의 타입, 개수, 순서 중 하나가 달라야 한다는 점
class 클래스 { 리턴 타입 메소드 이름 ( 타입 변수, ... ) { ... } ↑ ↑ ↑ 상관없음 동일 매개 변수의 타입, 개수, 순서가 달라야 함 ↓ ↓ ↓ 리턴 타입 메소드 이름 ( 타입 변수, ... ) { ... }
- 오버로딩이 필요한 이유 : 매개값을 다양하게 받기 위함
// 메소드 선언
int plus( int x, int y ) {
int result = x + y;
return result;
}
double plus( double x, double y) {
double result = x + y;
return result;
}
- 오버로딩된 메소드를 호출할 경우 JVM의 매개값은 타입을 보고 메소드를 선택
// plus(int x, int y) 실행
plus(10, 20);
// plus(double x, double y) 실행
plus(10.5, 20.3);
// int 타입은 double 타입으로 자동변환되므로 plus(double x, double y) 실행
int x = 10;
double y = 20.3;
plus(x, y);
- 매개변수의 타입과 개수, 순서가 똑같을 경우 매개 변수 이름이 다르다고 메소드 오버로딩이 아님
// 메소드 오버로딩 x (컴파일 에러)
int divide( int x, int y ) { ... }
double divide( int boonja, int boonmo) { ... }
### 메소드 오버로딩 예제
- 매개값이 1개면 정사각형의 넓이를, 2개이면 직사각형의 넓이를 계산하여 리턴함.
- 어떤 메소드가 호출될 것인지는 매개값의 개수에 달려있음.
// 소스코드 Calculator.java
public class Calculator{
//정사각형의 넓이
double areaRectangle(double width) {
return width * width;
}
//직사각형의 넓이
double areaRectangle(double width, double height) {
return width * height;
}
}
// 소스코드 CalculatorExample.java
public class CalculatorExample {
public static void main(String[] args) {
Calculator myCalc = new Calculator();
//정사각형의 넓이 구하기
double result1 = myCalc.areaRectangle(10);
//직사각형의 넓이 구하기
double result2 = myCalc.areaRectangel(10, 20);
//결과 출력
system.out.println("정사각형 넓이=" + result1);
system.out.println("직사각형 넓이=" + result2);
}
}